ガチホコBotつくったでや

ガチホコBot

一時間に一回、ガチホコバトルのステージと統計をツイートしてくれるBotです。

統計は「このカウントでリードした状態で延長に入った場合の勝率」と「このカウントを五分間リードできる確率」を表示しています。当然、五分間リードを保つよりも延長で一回だけ相手の進軍を止めるほうが楽なので基本的にはブルーの確率(防衛率)がオレンジの確率(勝率)よりも高いです。

防衛率が高い箇所はその周辺でホコを止めやすいということを意味するので、そのカウントがいったいステージ上のどのあたりなのかを事前に知っておくと良いかもしれません。

仕組み

ツイートをするためにはツイートする権限を持ったキーを手に入れなければいけません。これはアカウントごとに割り当てられているので、デベロッパーアカウント以外のアカウントでツイートしたければ別途取得する必要があるわけですね。

今回のケースの場合、つぶやきたいのは@Gra1nmakerなのですが、デベロッパーアカウントなのは@tkglingなので、ウェブからAPIキーを取得した場合には@tkglingでしかつぶやくことができません。

ほしいのは@Gra1nmakerのAPIキーなので、それをどうやって取得するかという問題なわけですね。

以下、APIキーが欲しいアカウントでログインしていることを前提に話を進めます。

twitteroauth

なぜかcompserから導入しないとちゃんと動かない、なんで?

composerの導入方法は多分以下のリンクで大丈夫、多分。

login.php

<?php
require "vendor/autoload.php";
use Abraham\TwitterOAuth\TwitterOAuth;

session_start();
define("TWITTER_API_KEY", TWITTER_API_KEY);
define("TWITTER_API_SECRET", TWITTER_API_SECRET);
define("CALLBACK_URL", "https://salmonia.mydns.jp/callback.php");

$connection = new TwitterOAuth(TWITTER_API_KEY, TWITTER_API_SECRET);
$request = $connection->oauth("oauth/request_token", array("oauth_callback" => CALLBACK_URL));
 
$_SESSION["oauth_token"] = $request["oauth_token"];
$_SESSION["oauth_token_secret"] = $request["oauth_token_secret"];
 
$url = $connection->url("oauth/authorize", array("oauth_token" => $request["oauth_token"]));
header("Location: ".$url);
exit;

このlogin.phpにアクセスするとTWITTER_API_KEYとTWITTER_API_SECRETから認証用のURLを生成します。ここにアクセスして連携を選択するとCALLBACK_URLにジャンプするという仕組みです。

callback.php

<?php
require "vendor/autoload.php";
use Abraham\TwitterOAuth\TwitterOAuth;

session_start();
define("TWITTER_API_KEY", TWITTER_API_KEY);
define("TWITTER_API_SECRET", TWITTER_API_SECRET);

$connection = new TwitterOAuth(TWITTER_API_KEY, TWITTER_API_SECRET, $_SESSION['oauth_token'], $_SESSION['oauth_token_secret']);
$token = $connection->oauth('oauth/access_token', array('oauth_verifier' => $_GET['oauth_verifier'], 'oauth_token'=> $_GET['oauth_token']));
var_dump($token);
?>

CALLBACK_URLで指定されたURLでは正しいURLから遷移されてきたかどうかをチェックし、それが正しい場合には認証用のキーを発行します。

その値はそのままでは見れないので、var_dump($token)で中身を表示します。

この値をメモすれば好きなアカウントでBotとしてつぶやくことができます。

この値が洩れると誰でもあなたのアカウントで好き勝手にツイートできてしまいます。よくあるスパムアプリというのはこの権限を悪用したものですね。

今回はテスト用なのでキーを直接PHPファイルに書いてしまっていますが、セキュリティ面を考えるのであればパーミッションを読み取り専用にしたconfig.phpなどのファイルに書いておくほうが安全だと思います。というか、それが推奨かもしれない。

まとめ

いつも毎回忘れるのでメモしたけど、また忘れそうな気がします。