とあるIT企業のインフラエンジニア。プライベートでは開発もちょっとやります。
※本ブログの内容はすべて個人の見解であり、所属する企業とは関連ありません。
2023/09/30 暫く更新停止中m
生活・子育て(10)
FaaS(1)
働き方(2)
SaaS(2)
自作PC(6)
IT入門(1)
IaaS(13)
IDaaS(2)
ITIL(1)
PHP(2)
OS(6)
システム監視(1)
コミュニティ(1)
PCアプリ(10)
ストレージ(4)
ブログ(9)
ActiveDirectory(2)
デバイス(7)
旅行(10)
デザイン(3)
カンファレンス(5)
セキュリティ(9)
インフラ(19)
コーディング(11)
ゲーム(28)
インターネット(18)
未分類(8)
553 [今日]
437 [昨日]
【C#】マーケットニュース用RSSリーダーを作ってみた
2023/01/14
コーディング
お疲れ様です。
しらせです。
最近は企業や株式投資や投資信託などに興味が出てきました。
日経平均やTOPIXや企業の情報などを見ているだけでも面白いですし、株価の値動きを見ながらなぜ下がったのか?上がったのか?を想定するのも面白いです。
そこで今回は日本取引所グループ(以下、JPX)が公開している情報を取得するRSSリーダーをC#で自作してみたいと思います。
もくじ
やりたいこと
まずは何がやりたいのか?というところですが。
JPXさんは最近は毎日欠かさず見ていてお世話になってます。
ですが、マーケット情報は多岐にわたるうえに情報が流れるのも早くて追いつかないことが多いんですよね。
毎朝以下のURLから情報を見ていますが、1日経つとめちゃくちゃ増えるんですよね。
(参考)マーケットニュース | 日本取引所グループ
そこで、どんなアップデートが来たかをプッシュ通知の要領で知れれば楽だなと思ったのがきっかけです。
自宅のWindowsPC上で動くフォームアプリであれば行けそうな見立てです。
ただ、平日日中は仕事をしていて見れないので、通知を溜めておいて昼休みや業後にまとめて見れるのが良さそうです。
なのでRSSの更新を受け取ったらモードレスでウィンドウを表示しておくようなフォームアプリがいいなぁと思いました。
もちろん既製品のRSSリーダーアプリとかもあると思うんですが正直RSSってあんまり好きじゃないんですよね。
なので自分が欲しい機能に絞って実装できればそれに越したことはないですね。
ということで手っ取り早くC#で作っていきます。
JPXで公開されている情報
今回使うRSSは以下のページで公開されています。
(参考)RSS | 日本取引所グループ
- マーケットニュース
- JPXからのお知らせ
- 売買停止情報(株式関連)
- 売買停止情報(先物・オプション関連)
- 注意喚起
- サイト更新情報
RSSは6種類ありますが1つ目と3つ目は確実に見たい情報です。
更新情報はXMl形式になっていて以下のパターンで情報が記述されています。
要素名「item」で囲まれた1つ1つの情報にタイトルや詳細URL、更新日時やIDなどが含まれています。
<title><タイトル名></title>
<link><詳細ページへのURL></link>
<guid isPermaLink="false"><一意なID></guid>
<pubDate><更新日時></pubDate>
</item>
IDの情報をキーにして変更の有無をチェックするのが良さそうですね。
実装
RSSですので情報はフェッチする形になるのですが、サイトに負荷がかからないように注意もありますので秒や分で頻繁にチェックするような設計はNGです。
大まかな流れは以下のようなイメージです。
※それっぽい状態遷移図
実行中を管理するためのBoolean型の変数を1つ使ってループを回すチェック用の関数を1つ作ります。
チェック用の関数は「await」でバックグラウンドでの非同期処理を進めつつ、1秒間の待ち状態を差し込むことで、次回実行までに待ち時間を設けます。
待ち時間を経過したらチェック処理を実行するようなイメージです。
※それっぽいフローチャート
取得したXMLデータは、XmlDocumentに格納してChildNodesやFirstChildをコネコネしてパースします。
C#のXML処理に癖がありすぎて気持ち悪い。
出来上がったものがこちらになります。
10分~1時間のスパンでチェックを行えるようにしました。
通知のフォームはモードレスで開いているので更新があるとウィンドウが増えます。
C#の並列処理は以前は無限ループとDoEventsで無理やり実装していましたが、asyncとawaitでこんなに簡単にできちゃうんですね。
かなり満足です。
以上
おつかれさまでした。