ietty TECH blog

LINE BOT API と Riot API で遊んでみた

先着10,000名限定で公開された『BOT API Trial Account』ですが、研究開発の時間を頂けたので少し触ってみました。

そのままテストしてもつまらないので、偶然持っていたLeague of LegendsのProduction APIを使って戦績を返すBOTを作ってみました。

とりあえず準備

LINE BOT API

アカウントの取得方法やAPIの使い方などは、この記事が分かりやすかったので見てください。 qiita.com

Callback先にはSSL証明書(Let's Encrypt以外の)が必須らしいので、とりあえず僕の開発用のサーバをCallback URLに指定。

Riot API

Development APIはRiot Games APIからすぐ作れます。

僕の持ってるProduction APIは申請から承認まで3週間ほどかかるのですが、日本サーバにアカウントを移動させたタイミングで使えなくなってたので問い合わせたらすぐに対応してくれました。 f:id:tioken12:20160415194358p:plain

サーバ

ずっと昔に作って放置してたCodeigniterの環境にLINE BOT用のコントローラーを設置し、さきほどのQiitaの投稿をベースに書いてきます。

<?php
public function index() {
  // アカウント情報設定
  $this->channel_id = "[チャンネルID]";
  $this->channel_secret = "[チャンネルシークレット]";
  $this->mid = "[MID]";

  // メッセージ受信
  $json_string = file_get_contents('php://input');
  $json_object = json_decode($json_string);
  $this->content = $json_object->result{0}->content;

  $event_type = "138311608800106203";

  $this->_api_post_request("/v1/events", $event_type, json_encode($this->_create_text($this->_get_summoner_data($this->content->text))));
}

private function _create_text($text) {
  $text = array(
    'toType' => 1,
    'contentType' => 1,
    'text' => $text,
  );

  return $text;
}

private function _api_post_request($path, $event_type, $content) {
  $url = "https://trialbot-api.line.me{$path}";
  $headers = array(
    "Content-Type: application/json",
    "X-Line-ChannelID: {$this->channel_id}",
    "X-Line-ChannelSecret: {$this->channel_secret}",
    "X-Line-Trusted-User-With-ACL: {$this->mid}"
  );

  $post = <<< EOM
{
"to":["{$this->content->from}"],
"toChannel":1383378250,
"eventType":"{$event_type}",
"content":{$content}
}
EOM;

  $curl = curl_init($url);
  curl_setopt($curl, CURLOPT_POST, true);
  curl_setopt($curl, CURLOPT_HTTPHEADER, $headers);
  curl_setopt($curl, CURLOPT_POSTFIELDS, $post);
  curl_setopt($curl, CURLOPT_RETURNTRANSFER, true);
   $output = curl_exec($curl);
}

$this->content->text にチャットの内容が入ってくるので、それをサモナー検索用のメソッドに投げて、返ってきた値をcreate_textメソッドに投げることでcallback用の配列に格納し、api_post_requestで $this->content->from に入っているチャットルームIDに向けてメッセージを送信しています。

できたのがこれ

LOL Summoner Info

f:id:tioken12:20160415201310p:plain

チャットで入力したサモナーの戦績をRiot APIから取得して返してくれます!

まだLINE BOT APIがトライアルということもあり、50人までしかフレンドに登録できませんがもしよかったら追加して遊んでみてください。 f:id:tioken12:20160415202007p:plain