WEB

Typetalkに証券コードを書いたら株価を返すbotを作ってみた

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

Typetalkに証券コードを書くと、Yahooファイナンスから株価を取得(スクレイピング)してきて、トピック内に返してくれるbotをGoogle Apps Script(GAS)で作ってみました。

職業プログラマーではないので、適当なコードですがとりあえず動いているので、参考までに公開してみたいと思います。

動作イメージ

下記のように、証券コード書くと株価を返してくれます。

証券コード覚えてないと使えないやん、という感じではありますが、まあいいでしょう笑。




↑クリックで別窓で拡大。

参考にしたサイト

A:キーワードに反応するTypetalkボットの作り方(総務・人事の活用例)
B:Google Apps Scriptでスクレイピングする方法

チャットワーク内のトピックに書かれたキーワードを拾うところ、トピック内にメッセージを返す所はAの記事を参考。

Yahooファイナンスからスクレイピングしてくるところは、Bの記事を参考にしました。

Google Apps Script(GAS)のコード

実装は、Google Apps Scriptを使ってやりました。

書いたコードだけ下記に置いておきます。

Typetalk側との連携などの設定は、上記Aの記事を見ながらやっていただければ良いかと思います。

[javascript]
function createReplyMessage(message) {
var stockCode = message;
var response = UrlFetchApp.fetch("http://stocks.finance.yahoo.co.jp/stocks/detail/?code=" + stockCode);
var myRegexp = /<td class="stoksPrice">([\s\S]*?)<\/td>/i;
var match = myRegexp.exec(response.getContentText());
var amount = match[1];
var myRegexp = /<h1>([\s\S]*?)<\/h1>/i;
var match = myRegexp.exec(response.getContentText());
var title = match[1];
var rtn = title + '(' + stockCode + ')は' + amount + '円です。\n';
return rtn;
}

var Typetalk = {
getMessage: function (e) {
var data = e.postData && JSON.parse(e.postData.getDataAsString());
return data && data.post;
},
composeReplyMessage: function (message, postId) {
var response = {
"message" : message,
"replyTo" : postId
};
return ContentService.createTextOutput(JSON.stringify(response))
.setMimeType(ContentService.MimeType.JSON);
}
}

function doPost(e) {
try {
var post = Typetalk.getMessage(e);
if (post) {
var message = createReplyMessage(post.message);
if (message) {
return Typetalk.composeReplyMessage(message, post.id);
}
}
} catch(ex) {
return Typetalk.composeReplyMessage(ex.toString(), null);
}
}
[/javascript]

ざっくり説明すると「3行目がスクレイピングするURLの設定」「4-6行目が該当URLからの株価の取得」「7-9行目が銘柄名の取得」ですね。この辺りをいじくったりすることで、他の目的に応用することもできそうです。

最後に

YahooファイナンスのサイトのURLやhtmlの構造が変更されたら、コードも変更しないといけないですが、まあそんな頻繁には変わらないでしょうし、まずはこれで良いかと思っています。

Google Apps Scriptと連携して、いろいろ便利なbotが作れそうな気がするので、気が向いて何か作ったらまたメモ的に書いておこうかなと思います。

追記

2018年4月18日:
前日比も出た方が良いと思ったので、上記コードをさらに修正しました。
Google Apps ScriptでYahooファイナンスから前日比を取得する方法

追記2

Yahooファイナンスからのスクレイピングはどうも禁止されているようです。

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

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

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

-WEB

© 2020 ヨコログ