1 | ionic start pstock blank |
1 2 3 4 5 6 7 8 9 10 11 12 13 14 | <ion-tabs class="tabs-icon-top"><!-- 首页 --><ion-tab title="首页" icon="ion-home" href="#/home"><ion-nav-view name="tab-home"></ion-nav-view></ion-tab><!-- 自选 --><ion-tab title="自选" icon="ion-person-add" href="#/user"><ion-nav-view name="tab-user"></ion-nav-view></ion-tab><!-- 回测 --><ion-tab title="回测" icon="ion-clock" href="#/backtest"><ion-nav-view name="tab-backtest"></ion-nav-view></ion-tab></ion-tabs> |
1 2 3 4 5 6 7 8 9 10 11 12 13 | app.config(function($stateProvider, $urlRouterProvider, $ionicConfigProvider) {$ionicConfigProvider.tabs.position('bottom');$stateProvider.state("home", {url:"/home",views:{"tab-home":{controller:"homeCtrl",templateUrl: "tpls/home.html"}}});略... |
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 | <ion-refresherpulling-text="Pull to refresh..."on-refresh="loadNewer()"></ion-refresher><a class="item item-thumbnail-left"ng-repeat="n in news track by n.item_id"ng-click="openLink(n.article_url)"><img ng-src="{{n.media_avatar_url}}"><h2 class="news-title">{{n.title}}</h2><p><span am-time-ago="n.behot_time | amFromUnix"></span> - {{n.media_name}}</p></a></div><ion-infinite-scrollon-infinite="loadOlder()"distance="1%"></ion-infinite-scroll> |
1 2 3 4 | $scope.userCode = angular.fromJson(window.localStorage["userCode"] || "{}");function persist() {window.localStorage["userCode"] = angular.toJson($scope.userCode)}; |
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 | #coding: utf8from flask import Flaskfrom flask import Response, request, abortimport urlparseimport requestsimport jsonimport tushare as tsfrom random import randintfrom bs4 import BeautifulSoupimport pandas as pd# import sys# reload(sys)# sys.setdefaultencoding('utf-8')app = Flask(__name__)# sinaApi = "http://hq.sinajs.cn/list="detailUrl = "http://stockpage.10jqka.com.cn/%s/company/"toutiao = "http://www.toutiao.com/api/article/recent/?source=2&category=%s&as=A105177907376A5&cp=5797C7865AD54E1&count=5&offset=0&_=%s"def getUserAgent():userAgent = ["Mozilla/5.0 (compatible, MSIE 10.0, Windows NT, DigExt)","Mozilla/4.0 (compatible, MSIE 7.0, Windows NT 5.1, 360SE)","Mozilla/4.0 (compatible, MSIE 8.0, Windows NT 6.0, Trident/4.0)","Mozilla/5.0 (compatible, MSIE 9.0, Windows NT 6.1, Trident/5.0,","Opera/9.80 (Windows NT 6.1, U, en) Presto/2.8.131 Version/11.11","Mozilla/4.0 (compatible, MSIE 7.0, Windows NT 5.1, TencentTraveler 4.0)","Mozilla/5.0 (Windows, U, Windows NT 6.1, en-us) AppleWebKit/534.50 (KHTML, like Gecko) Version/5.1 Safari/534.50","Mozilla/5.0 (Macintosh, Intel Mac OS X 10_7_0) AppleWebKit/535.11 (KHTML, like Gecko) Chrome/17.0.963.56 Safari/535.11","Mozilla/5.0 (Macintosh, U, Intel Mac OS X 10_6_8, en-us) AppleWebKit/534.50 (KHTML, like Gecko) Version/5.1 Safari/534.50","Mozilla/5.0 (Linux, U, Android 3.0, en-us, Xoom Build/HRI39) AppleWebKit/534.13 (KHTML, like Gecko) Version/4.0 Safari/534.13","Mozilla/5.0 (iPad, U, CPU OS 4_3_3 like Mac OS X, en-us) AppleWebKit/533.17.9 (KHTML, like Gecko) Version/5.0.2 Mobile/8J2 Safari/6533.18.5","Mozilla/4.0 (compatible, MSIE 7.0, Windows NT 5.1, Trident/4.0, SE 2.X MetaSr 1.0, SE 2.X MetaSr 1.0, .NET CLR 2.0.50727, SE 2.X MetaSr 1.0)","Mozilla/5.0 (iPhone, U, CPU iPhone OS 4_3_3 like Mac OS X, en-us) AppleWebKit/533.17.9 (KHTML, like Gecko) Version/5.0.2 Mobile/8J2 Safari/6533.18.5","MQQBrowser/26 Mozilla/5.0 (Linux, U, Android 2.3.7, zh-cn, MB200 Build/GRJ22, CyanogenMod-7) AppleWebKit/533.1 (KHTML, like Gecko) Version/4.0 Mobile Safari/533.1"]return userAgent[randint(0,len(userAgent)-1)]@app.route("/<app>/", methods=["GET","POST"])def index(app):headers = {"User-Agent": getUserAgent()}code = request.args["code"]data = {}error = ""if app == "now":# 获取当前价格code = code.split(",")df = ts.get_realtime_quotes(code)ret = df.to_json()elif app == "stock":# 获取股票历史数据df = ts.get_hist_data(code)df = df.sort_index()df["date"] = df.indexdf.index = range(len(df.index))ret = df.to_json()elif app == "detail":# 获取股票基本数据# 公司名称# 所属地域# 公司简介# 经营范围ret = {}url = detailUrl % codepage = requests.get(url, headers=headers)soup = BeautifulSoup(page.content, "html.parser")name = soup.select("td span")[0].textbussines = soup.select("td span")[3].textregion = soup.select("td span")[1].textintro = soup.select("p.tip.lh24")[-2].text[:-3]ret["name"] = nameret["bussines"] = bussinesret["region"] = regionret["intro"] = introelif app == "bt":ret = [{"status":"ok"}]elif app == "news":# 反向代理今日头条catelog = request.args["catelog"]time = request.args["now"]url = toutiao % (catelog, time)page = requests.get(url, headers=headers)ret = [{"status":"ok"}]else:ret = ""error = "incorrect url"try:data["data"] = json.loads(ret)except Exception as e:data["data"] = retdata["error"] = error# print dataresp = Response(json.dumps(data))if error:abort(500)resp.headers["Content-Type"] = "application/json; charset=UTF-8"resp.headers["access-control-allow-origin"] = "*"return respif __name__ == "__main__":app.run(port=80,debug=True, host="0.0.0.0") |
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 | $http.get(surl).success(function(resp) {$scope.labelsline = Object.values(resp.data.date);$scope.seriesline = ["ma5", "ma10", "ma20", "close"];$scope.dataline = [Object.values(resp.data.ma5),Object.values(resp.data.ma10),Object.values(resp.data.ma20),Object.values(resp.data.close)];$scope.optionsline = {title: {display:true,text: "趋势图"},elements: {point:{radius: 0}},xAxis: {display:true,axisLabel: 'X Axis',rotateLabels: 90}}; |
本文出自 “又耳笔记” 博客










