Skip to content

Instantly share code, notes, and snippets.

@S-Shimotori
Last active August 19, 2016 05:26
Show Gist options
  • Star 0 You must be signed in to star a gist
  • Fork 0 You must be signed in to fork a gist
  • Save S-Shimotori/649952428253368238ff69ad8eaec6e9 to your computer and use it in GitHub Desktop.
Save S-Shimotori/649952428253368238ff69ad8eaec6e9 to your computer and use it in GitHub Desktop.

日経電子版のbotサービス作成のヒント

  • LINEのbotをHeroku+Pythonで動かす
  • 各社の公開APIを使う

LINEのbotをHeroku+Pythonで動かす

Herokuの準備

アカウント作成:
https://signup.heroku.com/dc

Herokuの使い方がわからない場合や初めてで環境が整っていない場合は、
https://devcenter.heroku.com/categories/application-architecture
の左メニューから好きな言語を選び、Getting Started on Herokuで勉強する。
Python版: https://devcenter.heroku.com/articles/getting-started-with-python#introduction

ファイル構成について

プロジェクトのファイルの構成は https://github.com/heroku/python-getting-started ほか既存のものなどを参考にすると良い。 https://github.com/heroku に各言語の例がいくつかある。

Procfileは web: に続けて起動するときのコマンドを書く。
単純には web: python main.py など。
https://github.com/heroku/python-sample

フレームワーク使用時のProcfileの例:
https://github.com/heroku/python-django-sample
Python+Flask: http://qiita.com/sqrtxx/items/2ae41d5685e07c16eda5
Python+Falcon: http://qiita.com/shiraco/items/58a33b878fa5f1180d75

依存パッケージがある場合は、requirements.txtやbuild.gradleやcomposer.jsonなどに書く

LINEのServer IP Whitelistに登録するIPについて

LINEのwhitelist機能を使用したい場合はFixie(無料のアドオン)が使えるが、クレジットカードの登録が必要であり、動かすだけなら設定しなくても問題ない。
登録する場合はFixieのOutbound IPsを使用する。

http://qiita.com/yuya_takeyama/items/0660a59d13e2cd0b2516

LINE bot他各種サービスのsecret keyなど公開してはいけないものについて

SettingsのConfig Variablesから環境変数として登録して使うとソースコードに直書きしなくてよくて便利。
Pythonなら os.environ['Config Varsに書いたKEY'] で取れる。

LINEの準備

普段使いのLINEアカウントを元にして、BOT API Trial Accountを作成する。
必要事項を入力すると、運用に必要な

  • Channel ID
  • Channel Secret
  • MID

が発行される。また、QRコードも発行されて作成したアカウントと友達になれる。

http://qiita.com/Yuki_BB3/items/5c18073181b5eea94164

Callback URLにはHerokuで作ったアプリを設定する。
たとえば /callback で受け付けるように作ったなら https://あああああ.herokuapp.com:443/callback 。設定反映まで時間がそこそこかかる(403が返るなど)。気長に待つ。

LINEにリクエストを投げる

https://developers.line.me/bot-api/api-reference

上記3つのID&Secretをheaderに、投稿や取得に必要な情報をjsonにして投げる。

各社の公開APIを使う

Google Cloud Vision API

無料かつ普段使ってる@gmail.comでログインが済む。が、無料の範囲で使うとしてもクレカ登録が必要。
使用時の認証にはいろいろな方法があり、おなじみのAPIキーを発行して必要なデータと同時に投げる方法など。

ラベル付けや顔認識やいろいろあるので好きなものを使う。
https://cloud.google.com/vision/docs/

Microsoft Computer Vision

無料かつ普段使ってるMicrosoftアカウントでOK。Googleとの違いは、自然言語で画像に説明をつけてもらえる。
アカウント画面にあるkeyをheaderに入れて投げる。

https://www.microsoft.com/cognitive-services/en-us/computer-vision-api

Microsoft Translator

Googleは有料なので、無料を使いたい場合はMicrosoftのものが良い。
Computer Visionと違い、

  1. Azure MarketplaceにAPIを使う側のアプリを登録し(client secretが発行される)
  1. client secretを使ってトークンを取るAPIでトークンを取って
  1. トークンを翻訳APIのheaderに使う

https://www.microsoft.com/en-us/translator

docomo 雑談対話API

http://qiita.com/shanonim/items/f90ee13180ee70a1903d

日経の記事

/oauth2/tokenでトークンをとってきて各種APIのheaderに使う。

/oauth2/token

お手持ちの日経IDを使うには、

  • grant_type : password
  • username : 自分の
  • password : 自分の

でOK。headerの Authorization にはテスト用のものをとりあえず書いておけばよい。

/search/v1/article

検索。GET版のほうに細かく書いてあるが、POST版も同じ。
レスポンスのフィールドについては「レスポンスフィールド詳細」からGoogleのシートを読むとわかる。fieldstitle を指定するとタイトルが返ってくるなど。

kiji_id を取れば http://www.nikkei.com/article/記事ID でアクセスできる。

別タイトル同記事やほぼ同じ内容の別記事が検索にかかってしまう場合は、

  • keyword のAND検索として original:true を付け足す
  • service_categorypaper を指定しない( news だけ指定する)

で対策できる。

/recommend/v1/articles もsearchと同じような使い方でOK。

/text-analysis/v1/parse?sentence=

MeCab利用の形態素解析。 parse?sentence=解析したい文章 と他のAPI同様headerに Bearer トークン でOK。

https://github.com/Nikkei/text-analysis-api/

株価や指数

API
/market/v1/search 銘柄コードを取れる
/market/v1/price/銘柄コード 株価を取れる
/market/v1/summary 為替やマーケット指標を取れる

/market/v1/summary はトークン不要で https://apigw.n8s.jp/market/v1/summary だけでも見られる

YQL(例: yahoo.finance.exchange)

SQLのものに似たクエリを送ることでリクエストとなる。

エンドポイント: https://query.yahooapis.com/v1/yql

為替を取る場合、対象のテーブルは yahoo.finance.exchange であり、これは pair の絞り込みをする where が必須で、しかもcommunity tableなるもののimportが必要になる。つまり、パラメータは

パラメータ
q pair に関する where を含むクエリ
env store://datatables.org/alltableswithkeys

を指定しなければならない。例えば
http://query.yahooapis.com/v1/public/yql?env=store%3A%2F%2Fdatatables.org%2Falltableswithkeys&format=json&q=select+%2A+from+yahoo.finance.xchange+where+pair+in+%28%22USDJPY%2CEURJPY%2CJPYJPY%22%29
( format=json を指定するとjsonで返る)

http://qiita.com/masato/items/6f81bdc89f81a7b6cc3a

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment