2011年9月28日星期三

Google Finance

多謝這篇文章,方知道Google Finance可以經JSON query。Yahoo也有提供類似服務,Yahoo Finance,但若在Python使用,需要安裝YQL,然後用類似SQL syntax的command查詢,並不容易,

import yql

if __name__ == '__main__':
    y = yql.Public()
    r=y.execute('select * from yahoo.finance.quotes where symbol in ("AAPL","MSFT")', env="http://datatables.org/alltables.env")
    for i in r.rows:
        print("%s %s %s %s" % (i['Symbol'], i['MarketCapitalization'], i['Ask'],
            i['LastTradeTime']))

像Google般用JSON便方便得多。只可惜Google Finance沒有港股即時報價(美股是即時的),延遲15分鐘或以上,作用不大。只好概念炒作,文章提供的是Python 2,改作Python 3和read JSON format stock list。如果要check香港股票,要在number前加HKG:。

Sample stock list file:

{"stock_list": ["INDEXHANGSENG:HSI", "HKG:0005", "HKG:0762"]}

import sys
import json
import urllib.request


def get_stock_quote(ticker_symbol):
    url = 'http://finance.google.com/finance/info?q=%s' % ticker_symbol
    with urllib.request.urlopen(url) as r:
        s = r.read().decode("utf8")
    return json.loads(s[s.index('{'):s.index('}')+1])

if __name__ == '__main__':
    with open(sys.argv[1], 'r') as f:
        stock_list = json.load(f)

    for i in stock_list['stock_list']:
        q = get_stock_quote(i)
        print('{:4} {:>9} {:>8} {:>6}% {}'.format(q['t'], q['l'], q['c'], q['cp'], q['lt']))

執行結果如下:

$python3.2 gf.py stock_list.json
HSI  17,871.29  -259.26  -1.43% Sep 28, 1:55PM HKT
0005     61.60    -0.10  -0.16% Sep 28, 1:55PM HKT
0762     16.60    +0.24   1.47% Sep 28, 1:54PM HKT

本人沒有持有以上股票。

沒有留言:

發佈留言