・Typetalkに証券コードを書いたら株価を返すbotを作ってみた
・Google Apps Script(GAS)でYahooファイナンスから前日比を取得する方法
のような、Typetalkのトピックに証券コードを書いたら銘柄名と株価情報を返すbotを先日作ってみました。
しかし、実際に運用してみたところ、別に自分はデイトレーダーな訳ではないので、自分から株価を能動的にとりにいく必要はなく「1日1回、自分の見たい銘柄の終値とかが投稿されるだけで十分なのでは」と思いました。
ということで、さっそくまた「1日1回、自分の見たい銘柄の株価を定期的に投稿するTypetalk bot」を作ってみました。
職業プログラマーではないので、適当なコードですが、とりあえず動いているので、参考までに公開してみたいと思います。
動作イメージ
銘柄は「こんな記事読む人はどうせIT系企業好きなんでしょ」という独断と偏見に基づいて入力しました。
鳥貴族は自分が好きなので宣伝がてら登場です。
参考にしたサイト
・typetalkのAPIとGoogle Apps Script(GAS)を利用して、定期投稿するtypetalk botを作ってみる
GASでTypetalkに定期投稿する部分は、基本上記記事を参考にしました。
株価取得の部分は、頑張って実装しました。
Google Apps Script(GAS)のコード
実装は、Google Apps Scriptを使ってやりました。
書いたコードだけ下記に置いておきます。
Typetalk側との連携などの設定は、上記Aの記事を見ながらやっていただければ良いかと思います。
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 |
function myFunction() { var stockCode = ["4689","6047","4751","3193","4776"]; //見たい銘柄の証券コードを入力 var text = ""; for (var i=0; i<stockCode.length; i++){ var response = UrlFetchApp.fetch("http://stocks.finance.yahoo.co.jp/stocks/detail/?code=" + stockCode[i]); var myRegexp = /<td class="stoksPrice">([\s\S]*?)<\/td>/i; //8-10行目 株価を取得 var match = myRegexp.exec(response.getContentText()); var amount = match[1]; var myRegexp = /<h1>([\s\S]*?)<\/h1>/i; //12-14行目 銘柄名を取得 var match = myRegexp.exec(response.getContentText()); var title = match[1]; var myRegexp = /<td class="change">([\s\S]*?)<\/td>/i; //16-19行目 前日比を取得 var match = myRegexp.exec(response.getContentText()); var str = match[1]; var change = str.replace(/<("[^"]*"|'[^']*'|[^'">])*>/g,'') //htmlタグを削除 var text = text + title + '(' + stockCode[i] + ')は' + amount + '円です。' + change + 'です。\n'; } var TOKEN = 'ここにbotのTypetalk Tokenを入力'; //ここにbotのTypetalk Tokenを入力 var data = { 'message' : text }; var topicId = 'ここにトピックIDを入力';//ここにTypetalkのトピックIDを入力。botがいるトピックのURL「https://typetalk.com/topics/hogehoge」のhogehogeに入ってる数字。 var options = { 'method' : 'post', 'contentType': 'application/x-www-form-urlencoded', 'payload' : data }; var url = 'https://typetalk.com' + '/api/v1/topics/' + topicId + '?typetalkToken=' + TOKEN; var res = UrlFetchApp.fetch(url, options); } |
使うまでの手順
- Typetalkのトピックにbotを作る。
- 上記コードの2行目を自分の見たい銘柄に変更(forループにしてるので、適当に銘柄数は増やしたりしても大丈夫だと思います)。
- 24行目に、botのTypetalk Tokenを入力。
- 29行目に、TypetalkのトピックIDを入力。
- Google Apps Scriptに2)-4)の修正をいれたコードをコピペ。
- Google Apps Scriptで定期投稿のトリガーを設定。
上記手順で、基本使えるかなと思います。
botのTypetalk Tokenの取り方はtypetalkのAPIとGoogle Apps Script(GAS)を利用して、定期投稿するtypetalk botを作ってみるの参考記事など読んで頑張ってください。
その他説明
株価情報は、基本Yahooファイナンスから取得(スクレイピング)してきています。
「Typetalkに証券コードを書いたら株価を返すbotを作ってみた」や「Google Apps Script(GAS)でYahooファイナンスから前日比を取得する方法」の記事と、まあやってることは同じですね。
最後に
21行目は「var text += title 」みたいな感じで「+=」を使ってみたかったのですが、なんかエラー出て動かなかったので諦めました。
今回はforループがうまく使えた気がしていて、素人プログラマー的には満足度高いです(良いコードかどうかは知りません)。
追記
Yahooファイナンスからのスクレイピングはどうも禁止されているようです。
なので、この手法はやっちゃだめなものですね。
代替手段考えます。
スクレイピング先を株探に変えればいけると思うので多分そうします。