DAY35抜かしちゃったけどAPIの呼び出しの練習なので、
DAY36に飛んで実践。
後日やるけど試したかったのでスクレイピングもつけています。
今回はスクレイピング部分の説明はなしでやります。
米国株の値動きがわかるAPIから今日と昨日の価格を取得して、
暴落していたらその理由がないかニュースAPIでニュースを検索して表示する、
というようなツールを作ります。
暴落しても全体の地合いで個別でニュースがない場合もありますが。。。
では始めます。
from get_company_name import get_company_name
import requests
#dotenv-templete
import os
import datetime as dt
from dotenv import load_dotenv
from os.path import join, dirname
load_dotenv(verbose=True)
dotenv_path = join(dirname(__file__), '.env')
load_dotenv(dotenv_path)
#dotenv-templete
STOCK_NAME = input("Type Company Code eg.TSLA : ")
STOCK_API = os.getenv("STOCK_API")
STOCK_ENDPOINT = "https://www.alphavantage.co/query"
NEWS_API = os.getenv("NEWS_API")
NEWS_ENDPOINT = "https://newsapi.org/v2/everything"
today_news = dt.datetime.today()
today_news = today_news.strftime("%Y-%m-%d")
company_name = get_company_name(STOCK_NAME)
print(company_name)
最初の2行はAPIでjsonを取得するためのrequestsと、
yahooファイナンスから英語の企業名を取得するスクレイピングの自作コードをインポートしてます。
次はAPI関連の情報で、STOCK_NAMEはinputで自分が気になる会社コードを
入れられるようにしています。
today_news部分は今日の日付を取得してNEWS APIのパラメータに合わせたフォーマットに変換しています。
APIで株価データを取得するコーディング
def get_stock_price():
params = {
"function": "TIME_SERIES_DAILY",
"symbol": STOCK_NAME,
"apikey": STOCK_API,
}
url = STOCK_ENDPOINT
r = requests.get(url, params=params)
data = r.json()["Time Series (Daily)"]
data_list = [value for (key,value) in data.items()]
today_data = float(data_list[0]["4. close"])
yesterday_data = float(data_list[1]["4. close"])
if today_data <= yesterday_data * 0.9:
print("OMG! why?")
get_stock_news()
else:
print("Keep it!")
url=をエンドポイントとしてリクエストし、paramsに必要事項を入力して
データをもらっています。
パラーメーターはAPIのドキュメントに書いてあります。
とりあえずrequiredだけやっとけば最低限の価格は取得できます。
取得したjsonを内包記述でリスト変換し、今日と機能の終値だけを取得します。
ニュースを取得するという機能を実装しています。
ニュースを取得する機能の実装
def get_stock_news():
params = {
"q": company_name,
"from": today_news,
"apikey": NEWS_API,
"language": "en",
"searchIn": "title",
}
response = requests.get(NEWS_ENDPOINT, params=params)
response.raise_for_status()
data = response.json()
if data["articles"] == []:
print("no news...")
else:
article_source = data["articles"][0]["source"]["name"]
article_title = data["articles"][0]["title"]
article_url = data["articles"][0]["url"]
print(f"{article_source} : {article_title} - {article_url}")
get_stock_price()
こちらはNEWS APIを使います。
同じようにドキュメントを見てパラメータをparamsにいれていきます。
入力例を見た方がわかりやすいかと思います。
sourcesではニュースサイトの指定もできるので、たとえばCNNだけから取得するということも可能。
取得がもしできなかったり空の場合は no news...と表示し、
あった場合は取得したjsonからメディア名・ニュースタイトル・リンク先を
アウトプットするようにしています。
スクラッチにしてはちゃんと機能したものが作れたので気分がいいです笑
APIを使ったデータ解析になれてきたら、
yahooファイナンスの日本株のapiでfor で全部の株のデータ取得して
解析とかしてみたいな。
Gitはこちら。