見出し画像

e支店APIでニュースを取得

仕事に区切りが付き、これまでの会社から離れました。
いろいろルール的に面倒なことがあり、e支店APIの記事を書く時に
「e支店」の名前を出すのは避けた方が良かったのですが、
これでe支店の名前を出して記事を書ける様になりました。


ところで標題のニュースの取得ですが、
いよいよe支店APIで90日分のニュースを取得できるようになりました。

仕様書

仕様書は、
立花証券・e支店・API専用ページ
https://www.e-shiten.jp/e_api/mfds_json_api_menu.html

5.マニュアル
1.共通説明
(3)ブラウザからの利用方法
別紙「e支店・API、ブラウザからの利用方法」
のリンクをクリックしてください。

ファイル、api_web_access.xlsx をダウンロードできます。

エクセルファイルなのですが、
シート「ニュース」が、ニュース問合せ取得の仕様書になります。

APIのニュース機能で出来ること

90日分のニュースを取得できます。
主な機能は2つで、
1 CLMMfdsGetNewsHead
ニュースヘッダー問合取得I/F
機能: ニュースのタイトルだけを取得できます。これでニュースの一覧を(ニュースを取得した)降順に取得できます。

2 CLMMfdsGetNewsBody
ニュースボディー問合取得I/F
機能: 個別のニュース内容を取得します。ニュース本文の取得です。

ニュース取得の接続先

ニュース取得は、ログイン時に返される仮想URL master に接続して取得します。
ニュースは、件数が多く、中には非常に重いものもあるのでmasterの仮想URLを利用することになったようです。

ニュース取得の手順

まず、1のCLMMfdsGetNewsHeadコマンドでニュースのヘッダー(タイトル)を取得します。

応答データに、レコード毎にユニークな p_ID(ニュースID)が付いているので、必要な本文はこのp_ID(ニュースID)を指定して取得します。

本文を取得するCLMMfdsGetNewsBodyコマンドは、
p_ID(ニュースID)を1つだけしか指定できません。

ニュース本文は、とんでもなく長い文章の場合があるため、1問い合わせ、1指定のみになっています。

ニュース取得(検索)条件

項目p_CGで、取得したいカテゴリコードを1つ指定します。未指定時は全て対象です。
コード 説明
100 ニュース
110 AI市況状況速報
120 AI開示速報(決算関連)
129 AI開示速報(その他)

ちなみに「AI開示速報(決算関連)」「AI開示速報(その他)」は、
配信元システムの仕様の制限により、API取得で期待されるほど速くはありません。
残念ですが、配信元も「世の中、お金ですね。」という話です(笑

その他は、銘柄コード指定、開始日指定、終了日指定、レコード取得位置指定、レコード件数指定などが出来ます。
詳しくは仕様書を参照ください。

ニュース利用時の注意点

ニュースは蓄積、編集、加工出来ませんので、注意して取り扱ってください。もちろんユーザー自身の証券投資のための個人利用のみで、外部配信などは出来ません。

ニュースは配信元からの制限が非常にキツイです。
「APIで簡単に自動でニュースが取れるから、SNSでbotに喋らせよう。」なんて考え、実行すると大騒ぎになります。
ニュースの配信機能の廃止、配信元からの情報提供契約の解除、訴訟、損害賠償請求まで簡単に行ってしまう話になりますので、慎重な取扱いでお願い致します。

もちろん、自分自身の証券投資、分析のために使う分には全く問題ありません。どんどん使い倒してください(笑

サンプルプログラム

取り敢えず離れてしまったので、
後任の方が担当するのだと思うのですが、
・・・もしかしてボランティアで私が?(笑

追記

サンプルプログラムで色々難航しました。
なかなか分からなかった点は、コメントに書いておきました。

# 備考:
# p_HDL、p_TXは、
# 元の文字列はshiftjisで、それをパーセントエンコード(URLエンコード)して、
# base64変換されている。
# 元の文字列に戻すためには、base64でデコードしてから、
# パーセントエンコードのデコードを行う。
#
# base64のデコード(base64.b64decode)は、引数の文字列をバイト型にしてから実行する。
# パーセントエンコード(URLエンコード)のデコード(urllib.parse.unquote)は、
# string型にしてから実行する。
# 
# デコードは、次の手順で行なう。
# string型で取得 →
#   byte型に変換 →
#       base64デコード: base64.b64decode() →
#           string型に変換 →
#               パーセントエンコードのデコード: urllib.parse.unquote()

この部分だけを気を付ければ簡単に取得できます。

・・・というか何でサンプルを作ることになったんでしょ(笑

この記事が気に入ったらサポートをしてみませんか?