Line botの導入の仕方
ここではrailsで実装したサーバーをHerokuで実行してLine botを作っています。
Gitのアカウントは持っている前提で進めます。持っていない人は以下のサイトが参考になると思います。
GitHubアカウント作成とリポジトリの作成手順 - Qiita
1. Developer用のLineアカウントをゲットする
2. Channel SecretとChannel Access Tokenをゲットする
以下サイトを参考にしてアカウント作成からChannel SecretとChannel Aceess Tokenをゲットしてみてくだい。
わずか5分。新LINE Messaging APIでbotを作ってみた手順全公開 - BITA デジマラボ
3. サーバープログラムの作成
今回はLineで呟いたものを返答してくれるbotを作成します。
まずはrailsの初期ファイル群を作成します。
rails new botApp
次にサーバープログラムを作成していきます。
公式サイトでも紹介されている以下のAPIを利用。
botApp/app/controllers/webhook_controller.rb
require 'line/bot' class WebhookController < ApplicationController protect_from_forgery with: :null_session # CSRF対策無効化 def client @client ||= Line::Bot::Client.new { |config| config.channel_secret = ENV["LINE_CHANNEL_SECRET"] config.channel_token = ENV["LINE_CHANNEL_TOKEN"] } end def callback body = request.body.read signature = request.env['HTTP_X_LINE_SIGNATURE'] # this statement maybe mistake. unless client.validate_signature(body, signature) error 400 do 'Bad Request' end end events = client.parse_events_from(body) events.each { |event| case event when Line::Bot::Event::Message case event.type when Line::Bot::Event::MessageType::Text message = { type: 'text', text: event.message['text'] } response = client.reply_message(event['replyToken'], message) when Line::Bot::Event::MessageType::Image, Line::Bot::Event::MessageType::Video response = client.get_message_content(event.message['id']) tf = Tempfile.open("content") tf.write(response.body) end end } render status: 200, json: { message: 'OK' } end end
次にGemfileを以下のように修正。
Gemfile
修正前
# Use sqlite3 as the database for Active Record get 'sqlite3'
修正後
gem 'sqlite3', group: :development # 本番ではpostgressを使用する gem 'pg', group: :production gem 'rails_12factor', group: :productio
また、
gem 'line-bot-api'
も追加。
*注意点
実はこれだけではForbidden 403というエラーが出たのであとで修正をします。
4. 作成したプログラムをgitにコミット
git init git add . git commit -m "initial commit"
5. Herokuへのデプロイ
まずはHerokuのアプリを登録するところを確保します。
heroku apps:create botAPPheroku
ここでbotAPPherokuは適当な名前で!他のひとが使っている名前は使えません。
次にこのスペースに先ほど作ったサーバープログラムを登録します。また、その際にLINE_CHANNEL_SECRETとLINE_CHANNEL_TOKENの変数も登録して下さい。
git push heroku master heroku config:set LINE_CHANNEL_SECRET="Lineのdeveloperアカウントで取得したchannel_secret" heroku config:set LINE_CHANNEL_TOKEN="Lineのdeveloperアカウントで取得したchannel_token"
git push heroku masterの時点でサーバーアプリは起動します。
6. Fixieアドオンを使う
このFixieアドオンを使うことでプロキシ経由の通信ができます。(Line botはHTTPSによる通信でないとできないためこのようなことをします。)
heroku addons:create fixie:tricycle
これによりherokuのアプリページにfixieアドオンが追加されています。
fixieアドオンのページに飛んでもらい右上のaccountをクリックするとプロキシURLとIPアドレスが作成されています。
これをメモしてください。
heroku config:set FIXIE_URL="example.com"
exmple.comにはプロキシURLを設定してください。
8. LineアカウントでコールバックURLとホワイトリストの設定
アカウントペーにcallback URLという欄があるので以下のように入力してください。隠れているところにはherokuに作ったアプリページ名を。
ホワイトリストは左のメニューバーに
「Server IP Whitelist」
があるので選択。
表示されるページにIPアドレスを入力できるスペースがあるので先ほどfixieで取得したIPアドレスを入力。
7. サーバーアプリのログを見る
heroku logs -t
ここで紐づけられたLineアカウントにコメントしてみましょー
おそらく何も返ってこないでしょう。
はい、足りないものがありました。
8. プログラムの修正
プロキシを通す際には設定がhttpクラスに設定が必要でした。
botApp/app/controllers/webhook_controller.rbに以下の行を追加。
module Line module Bot class HTTPClient def http(uri) proxy = URI(ENV["FIXIE_URL"]) http = Net::HTTP.new(uri.host, uri.port, proxy.host, proxy.port, proxy.user, proxy.password) if uri.scheme == "https" http.use_ssl = true end http end end end end ...
修正後、gitに追加、コミット、herokuへpushすると、、、
こんな感じでつぶやきが返ってきました。
次はこれをIFTTTとの連携に活かしてみます。
この記事は以下も参考にしました。
Hakell 導入
はじめまして、まだまだぴよぴよのエンジニアです。
経歴からいうと、大学では機械工学科で学び、材料力学を得意としてました。ただ画像処理をしてみたかったので、研究室では医療系の画像処理の研究に携わり、プログラマ人生がスタートしました!!!!現在は精密機械メーカーでプログラマをやってます。
主にC言語を業務では利用し、最近Haskellを勉強し始めました。
動機としては
からです。
ということで、まずは環境作りから始めました。
の順で説明します。OSはUbuntu14.04です。
1.Haskellのインストール
まずはHaskellをインストールします。
$ sudo apt-get install haskell-platform
このコマンドで以下を一括でインストールできます。
- GHC コンパイラ
- GHCi 対話的インタプリタ
- GHC ランタイム
- Cabal ライブラリ管理ツール
- Haddock ドキュメンテーション・ツール
- GHCi debugger
- Happy parser generator
- Alex lexer generator
- hsc2hs foreign language bindig tool
- GHC profiler
- Haskel Code Coverage
ghcはhakellで一番使われるコンパイラとインタプリタ(ghci)です。
2.パッケージ管理ツール(stack)のインストール
次にHaskellのパケージ管理ツールであるstackをインストールします。
sudo apt-key adv --keyserver keyserver.ubuntu.com --recv-keys 575159689BEFBh442
echo 'deb http://download.fpcomplete.com/ubuntu trusty main'|sudo tee /etc/apt/sources.list.d/fpco.list
sudo apt-get update && sudo apt-get install stack -y
stack setup
ubuntuでいうapt-getみたいなものなのかな?
stack path
でstackに関するPathが表示されます。
3.エディタ(vim)の導入
最後にエディタを導入します。僕は普段エディタはvimを使うので、vimをこれからもvimを使った説明をしていきます。vimをいれたい人は以下のコマンドでインストールしてください。
sudo apt-get install vim
これでhaskellを動かせます。試しに与えた引数の約数を求めるプログラムを動かしてみます。sample.hsと書いてみてください。
vim sample.hs
ここに約数を求めるfactors関数を記述していきます。vim初めての人は上のコマンドを実行した後,「i」を押して以下のソースを入力します。
factors :: Int -> [Int]
factors n = [x | x <- [1..n], n `mod` x == 0]
入力後、「Esc」→「:wq!」の順で入力していきます。vimについては後日書いていきたいと思います。
ghciを立ち上げて
ghci
以下のコマンドを実行します。
:l sample.hs
これで先ほどのfactorsがロードされました。
factors 10
とすると、[1,2,5,10]という結果が返ってきます。確かに、この4つの数字は10の約数ですね。
プログラムを動かすところまでできました。では、また!