WEB

Typetalkに複数銘柄の株価を定期的に投稿するbotの作成方法


投稿日:2018年4月20日 更新日:

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の記事を見ながらやっていただければ良いかと思います。

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);
}

使うまでの手順

  1. Typetalkのトピックにbotを作る。
  2. 上記コードの2行目を自分の見たい銘柄に変更(forループにしてるので、適当に銘柄数は増やしたりしても大丈夫だと思います)。
  3. 24行目に、botのTypetalk Tokenを入力。
  4. 29行目に、TypetalkのトピックIDを入力。
  5. Google Apps Scriptに2)-4)の修正をいれたコードをコピペ。
  6. 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ファイナンスからのスクレイピングはどうも禁止されているようです。

なので、この手法はやっちゃだめなものですね。

代替手段考えます。

スクレイピング先を株探に変えればいけると思うので多分そうします。

Yahoo!ファイナンス掲載情報の自動取得(スクレイピング)は禁止しています

株価管理をしたいだけなら

将来的に株の成績管理をうまいことしたいなーという所からTypetalkとGASを色々いじくりはじめましたが、成績管理するだけならマイトレードというアプリで良いことに気づきました。

証券口座の情報を自動で取得してグラフ化できます。

便利すぎて自分は有料プランにしましたが、無料プランでも全然使えます。

スクリプトを組んでいる理由が自分の成績管理であり、目的さえ達成できれば手段は何でも良いよ、という人は、こちらのアプリで良いと思います。

参考【マイトレード】

-WEB

Copyright© ヨコログ , 2019 All Rights Reserved.