stefafafan の fa は3つです

"すてにゃん" こと id:stefafafan のブログです

第22羽 君のためならBing Search APIを叩く

この記事はごちうさ Advent Calendar 2015の12月22日の記事です。昨日の担当はid:kivantiumさんでした。
gochiusa.connpass.com
kivantium.hateblo.jp

今回はチノちゃん回です。


僕はご注文はうさぎですか??ではチノちゃんがとても好きなのですが、チノちゃんの画像を実はあまり持っていないのです。というわけで今回はチノちゃんの画像を勝手にSlackに投稿してくれるbotを作りました。

検索API

チノちゃんの画像をどこから取ろう?と思って最初に思いついたのはやっぱりGoogleですね。そこでGoogleの検索APIについて調べると…

the API provides 100 search queries per day for free

Custom Search JSON/Atom API
とのことです。つまり1日に無料で100回しか検索できない!ぽよい。

ってことで色々考えましたが結局BingのAPIを使うことになりました。無料で1ヶ月に5000検索できるっぽい。

Bing Search API を使うまで

基本的にここを参考にしました。
qiita.com

アカウントを作り、プランにサインアップして、検索条件を検討した結果、以下のURLを使うことにしました。
https://api.datamarket.azure.com/Bing/Search/v1/Image?Query=%27%E3%83%81%E3%83%8E%E3%81%A1%E3%82%83%E3%82%93%27&$top=1&$skip=0&$format=json

Query=の部分を「チノちゃん」
$topは何個分取得するかなので1に、
$skipは始点を決めるのに使うのでここを変更すれば画像が変わります、
最後にformatはjsonにしときました。

サイトにログインしてればマイアカウントからアカウントキーが取得できるのでそれを利用してBASIC認証で↑のJSON取得します。

Slackに投稿するまで

今回はPythonで書きました。↑で決めたURLにBasic認証JSONを取得すればいいので、requestsっていう便利ライブラリ使いました。

Requests: HTTP for Humans

このおかげで以下の行で1発で取得できました。ちなみにURLの$skipの値を乱数で毎回別のやつにしてるので毎回違った画像が投稿されます。

requests.get("上記のURL", auth=('', 'あなたのアカウントキー')).json()

画像の場合JSONのMediaUrlっていうキーが画像のURLになっているのでそれをSlackに投稿すればおk(Slackではデフォルトで画像が展開されるので)。

Slackへの投稿はincoming webhookの連携を使えばよいです。最後に雑にHerokuにでもデプロイして完成!
Incoming Webhooks | Slack
devcenter.heroku.com

Slackについてはこの記事にもうちょっと詳しく書いてます。
stefafafan.hatenablog.com


これにて完成です!

f:id:stefafafan:20151222084419p:plain
これでチノちゃんの画像が沢山流れてくるよ!やったねココアさん!
さ〜て、明日の担当はgomi_ningenさんです。お楽しみに!
じゃんけんぽん!(パー)