yahoo apiを使って株のデータを収集する方法を紹介します。
色々な収集方法があると思いますが自分はphythonというプログラム言語を使って収集してみました。
データを収集する方法
データを収集する方法はyahooapiに限らず、海外のよくわからないapiやウェブスクレイピング等で収集できるようです。
一番検索で引っかかったのは、ウェブスクレイピングだったのですが、スクレイピングは違法ではないとはいえ、場合によっては法に触れる可能性もありそうなグレーゾーンの手法なような気がしたので(現に、yahooファイナンスのウェブスクレイピングは規約上禁止されているようです。)、正式に許可が出ているyahooapiを利用することにしました。
yahooapiから株の情報を取得してCSVに吐き出すソースコード
import csv
import time
from datetime import datetime
import sys
from yahoo_finance_api2 import share
from yahoo_finance_api2.exceptions import YahooFinanceError
count = 1
csvfile = "input.csv"
def get_data():
global old_time, now_time, old_price, now_price, change_rate, data_volume,old_opprice,now_opprice,old_low,old_high,afday_opprice,afday_clprice
my_share = share.Share(row_str + '.T')
symbol_data = None
try:
symbol_data = my_share.get_historical(share.PERIOD_TYPE_YEAR, 10, share.FREQUENCY_TYPE_DAY, 1)
date = symbol_data["timestamp"]
old_date = date[0]
now_date = date[-1]
old_time = datetime.utcfromtimestamp(int(old_date/1000))
now_time = datetime.utcfromtimestamp(int(now_date/1000))
price = symbol_data["close"]
old_price = price[0]
now_price = price[-1]
opprice = symbol_data["open"]
old_opprice = opprice[0]
now_opprice = opprice[-1]
data_volume = len(date)
except YahooFinanceError as e:
print(e.message)
old_price = int(0)
now_price = int(0)
old_opprice = int(0)
now_opprice = 0
old_time = 0
now_time = 0
old_date = 0
now_date = 0
afday_clprice=0
afday_opprice=0
pass
writer = csv.writer(csvFile)
writer.writerow([row_str, data_volume, old_time,old_opprice,old_price,old_high,old_low,afday_opprice,afday_clprice, now_time, now_price])
with open(csvfile,"r") as f:
rows = csv.reader(f)
for row in rows:
print("ループ回数: " + str(count))
row_str = str("".join(row))
get_data()
write_csv()
count = count + 1
少し変えましたがほとんど以下サイトのソースコードを参考にさせていただきました。
調べると大抵のソースコードが出てくるのは非常に助かります。。