Skip to content

Commit

Permalink
添加港股日k线
Browse files Browse the repository at this point in the history
  • Loading branch information
wangyu190810 committed Oct 10, 2017
1 parent 23895fc commit 0262db5
Show file tree
Hide file tree
Showing 4 changed files with 139 additions and 4 deletions.
20 changes: 20 additions & 0 deletions README.md
Original file line number Diff line number Diff line change
Expand Up @@ -377,5 +377,25 @@ data = quotation.market_snapshot(prefix=True)
}
```

##### 港股日k线图
*[腾讯日k线图](http://web.ifzq.gtimg.cn/appstock/app/hkfqkline/get?_var=kline_dayqfq&param=hk00700,day,,,350,qfq&r=0.7773272375526847)*

```
import easyquotation
quotation = easyquotation.use("daykline")
data = quotation.get_stock_data(stock_list=['hk00001','hk00700'])
# data = quotation.get_stock_data(stock_list=['hk00700'])
print(data)
```
*return*
```
{
'hk00001': [
['2017-10-09', '352.00', '349.00', '353.00', '348.60', '13455864.00'], # [日期, 今开, 今收, 最高, 最低, 成交量 ]
['2017-10-10', '350.80', '351.20', '352.60', '349.80', '10088970.00'],
]
}
}
```

3 changes: 3 additions & 0 deletions easyquotation/api.py
Original file line number Diff line number Diff line change
Expand Up @@ -7,6 +7,7 @@
from .sina import Sina
from .tencent import Tencent
from .timekline import TimeKline
from .daykline import DayKline

PY_VERSION = sys.version_info[:2]
if PY_VERSION < (3, 5):
Expand All @@ -26,3 +27,5 @@ def use(source):
return Boc()
if source in ["timekline"]:
return TimeKline()
if source in ['daykline']:
return DayKline()
100 changes: 100 additions & 0 deletions easyquotation/daykline.py
Original file line number Diff line number Diff line change
@@ -0,0 +1,100 @@
# coding:utf8
import re
import time
import json

import aiohttp
import asyncio
import easyutils
import yarl
from .basequotation import BaseQuotation

"""
url = "http://web.ifzq.gtimg.cn/appstock/app/hkfqkline/get?_var=kline_dayqfq&param=hk00001,day,,,660,qfq&r=0.7773272375526847"
url 参数改动
股票代码 :hk00001
日k线天数:660
更改为需要获取的股票代码和天数例如:
url = "http://web.ifzq.gtimg.cn/appstock/app/hkfqkline/get?_var=kline_dayqfq&param=hk00700,day,,,350,qfq&r=0.7773272375526847"
"""


class DayKline(BaseQuotation):
"""腾讯免费行情获取"""
stock_api = "http://web.ifzq.gtimg.cn/appstock/app/hkfqkline/get?_var=kline_dayqfq&param=%s,day,,,%s,qfq&r=0.7773272375526847"
max_num = 1

def format_response_data(self, rep_data, prefix=False):
stocks_detail = ''.join(rep_data)
stock_detail_split = stocks_detail.split('kline_dayqfq=')
# print(stock_details)
stock_dict = dict()
for daykline in stock_detail_split:
# stock_detail_split = stocks_detail.split('kline_dayqfq=')
# if len(stock_detail_split) == 2:
# _,daykline = stock_detail_split
try:
daykline = json.loads(daykline)
except Exception as e:
print(e)
continue
# print(daykline)
daykline= daykline.get("data")
# print(daykline)
for key, value in daykline.items():
stock_code = key
_stmt = value['qfqday']
stock_dict[stock_code] = _stmt

return stock_dict

async def get_stocks_by_range(self, *params):
if self._session is None:
self._session = aiohttp.ClientSession()
headers = {
'Accept-Encoding': 'gzip, deflate, sdch',
'User-Agent': 'Mozilla/5.0 (X11; Linux x86_64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/54.0.2840.100 Safari/537.36'
}
print(params)
if len(params) > 1:
stock_code = params[0]
days = params[1]
else:
stock_code = params
days = 360
url = yarl.URL(self.stock_api %(stock_code,days), encoded=True)
print(url)
try:
async with self._session.get(url, timeout=10, headers=headers) as r:
asyncio.sleep(0.1)
response_text = await r.text()
# print(response_text)
return response_text
except asyncio.TimeoutError:
return ''

def get_stock_data(self, stock_list,days=360, **kwargs):
coroutines = []

for params in stock_list:
coroutine = self.get_stocks_by_range(params,days)
coroutines.append(coroutine)
# time.sleep(0.02)
# break
try:
loop = asyncio.get_event_loop()
except RuntimeError:
loop = asyncio.new_event_loop()
asyncio.set_event_loop(loop)
res = loop.run_until_complete(asyncio.gather(*coroutines))
print()
return self.format_response_data([x for x in res if x is not None], **kwargs)


if __name__ == "__main__":
pass

20 changes: 16 additions & 4 deletions example/example.py
Original file line number Diff line number Diff line change
@@ -1,4 +1,16 @@
import easyquotation
quotation = easyquotation.use("timekline")
data = quotation.market_snapshot(prefix=True)
print(data)
def test_timekline():
import easyquotation
quotation = easyquotation.use("timekline")
data = quotation.market_snapshot(prefix=True)
print(data)

def test_daykline():
import easyquotation
quotation = easyquotation.use("daykline")
data = quotation.get_stock_data(stock_list=['hk00001','hk00700'])
# data = quotation.get_stock_data(stock_list=['hk00700'])
print(data)

if __name__ == "__main__":
test_daykline()

0 comments on commit 0262db5

Please sign in to comment.