Pythonを用いて、銘柄の適時開示情報ページ(JSON形式)
(https://webapi.yanoshin.jp/webapi/tdnet/list/8818.json2?limit=100)
で、更新情報があれば、会社名とURLを出力したく、以下のコーディングを行いました。
この場合、一つの銘柄の場合には対応していますが、銘柄が複数の場合、最新の更新情報が無限に出力されてしまいます。
複数の銘柄の場合でも、一度出力した最新の更新情報は出力されないようにするにはどのようにすれば良いでしょうか。
Python
1import schedule 2import time 3import json 4import requests 5 6old_file="test.txt" 7 8def job(): 9 tr="" 10 resp = requests.get("https://webapi.yanoshin.jp/webapi/tdnet/list/8818.json2?limit=100") 11 data = resp.json() 12 result = [] 13 for item in data.get("items", []): 14 tdnet = item.get("Tdnet") 15 if tdnet is None: 16 break 17 published_at = tdnet.get("pubdate") 18 # 最新の日時の開示のみ取得する。 19 if tr == '': 20 tr = published_at 21 22 elif published_at != tr: 23 break 24 25 result.append( 26 dict( 27 name = tdnet.get("company_name"), 28 published_at = published_at, 29 title = tdnet.get("title"), 30 url = tdnet.get("document_url") 31 ) 32 ) 33 global old_file 34 if tr == '': 35 print("データを取得できませんでした") 36 elif tr == old_file: 37 pass 38 #print("更新なし。 直近の取得日時:", tr) 39 40 else: 41 print(f"日時: {tr}") 42 for r in result: 43 data=f"{r['name']} {r['title']} {r['url']}" 44 print(data) 45 46 old_file=tr 47 48schedule.every(1).seconds.do(job) 49while True: 50 schedule.run_pending() 51 time.sleep(1) 52 53job() 54
仕様を明確にしましょう。複数の銘柄の場合に一度出力した最新の更新情報は出力されない条件を考える必要があります。どのような条件になるとお考えですか?
一度出力した最新の情報を変数として保存し、2回目以降の処理で出力された情報と、保存した変数を比較して、同じ場合は出力しない、違う場合は出力するという条件になると考えます。
また、URLは"https://webapi.yanoshin.jp/webapi/tdnet/list/{コード番号-コード番号}.json?limit=20" のほうがいいかもしれません。
その仕様を満たすようにプログラミングをしたのにできないのか、仕様を満たすようにプログラムを記述できないのかどちらですか?
仕様を満たすようなプログラムを記述できません
複数の銘柄の場合に、「一度出力した最新の情報を変数として保存」ができないということでしょうか?
はい。複数の銘柄の場合は、変数を複数用意すればうまくいくと思うのですが、銘柄が増えたときにまた変数を増やすのは効率的でないと思いました。そもそも変数を複数用意しなくてもよい書き方があれば教えてください。