自動ツイートのTwitter Botを自作してみた | オッズハック / oddsHack

オッズハック / oddsHack

荒れるレースはオッズがすべて教えてくれる!

またまた競馬には関係ない事ですが、お気づきの方もいるかも知れないけど、「twiiteroauth」を使って自動ツイートするTwitter Botを作ってみました。

参考にしたサイト

とりあえずトークン取得

とりあえず、Twitter Developers から各種トークンを取得
・Consumer key
・Consumer secret
・Acces token
・Access token secret

参考サイトでは少し記事が古いので、Developersサイトは新しくなってましたが、基本的な部分は同じなので参考サイトに書かれてある通りに各種トークンを取得します。

TwitterOAuthライブラリ

ここが一番困ったところ。各種参考サイトでは、twitteroauth.phpというライブラリが必要で、このライブラリを読み込むわけですが、twitteroauthが新しくなっていて、参考サイトに書かれてある方法だと動かなかったんですよ。奥さん。

とりあえず、GitHubへアクセスして「twitteroauth」のZIPファイルをダウンロードしましょう。
https://github.com/abrraham/twitteroauth

で、参考サイトでは、twitteroauth.phpを読み込みましょう

// OAuthライブラリの読み込み
require_once('twitteroauth/twitteroauth.php');

と、書いてあるんだけど、これだけではどうやら動かない。何をやっても動かない。なんでだろう~?なんでだろう~?って、頭の中でテツ&トモと一緒に踊りながら色々調べてみても同じ事しか書いてなくて、非常にハマっちゃいました。

でどうしようもないので、中学生よりも劣る英語の知識をひっさげて、twitteroauthの取説ページ へ。
すると、なんかそれっぽい事が・・・

entry0206-1

とりあえずよく分からないので、ダウンロードしたファイル「twitteroauth-master」は、フォルダ名が長ったらしいので「twitteroauth」とリネームして、フォルダごとそのままサーバにアップしてやる。

で、そこに色々書いてあるけど、import the TwitterOAuth classが、なんかそれっぽいので、

// OAuthライブラリの読み込み
require_once('twitteroauth/twitteroauth.php');

の代わりに、

// OAuthライブラリの読み込み
require "twitteroauth/autoload.php"
use Abraham\TwitterOAuth\TwitterOAuth;

と書いてやると、、、お!動いたじゃない!
PHPファイルを実行してやると、ちゃんとツイートされてるw

ツイートするには

entry0206-2

ツイートするのは、このように、このまま書けばいいだけで非常に簡単です。
ただ、それだと味気ないので色々カスタマイズしていきたいと思います。

とりあえず、ツイートする言葉はせっかくなので既にリスト化してある「オッズハック活用方法 」などの記事タイトル+リンク+概要をランダムに選んで読み込んでツイートって感じで作りたいと思います。

lastHttpCode

そして、なんだかんだでPHPスクリプトも出来て、CRON制御で自動ツイートが完成したわけですが、せっかくならちゃんとツイートされてるかログも取ってやろうと思ったわけですが、おそらく以前のバージョンなら、[http-info]で、色々な情報が帰ってきて、その中に["http_code"]というのがあって、その値が"200"なら正常に動いたよって事らしい・・・らしい・・・のですが、この[http-info]で値が取得出来ない・・・ぐぬぬ・・・なんでだr・・出てくんじゃね~テツ&トモっ!

entry0206-4

ふむふむ。取説では、lastHttpCode()で値が取得と。
なるほど。やっぱり仕様が変わってるのね。はいはい。

//同じように書いて試してみる
$status = $connection->post("statuses/update",array("status" => "hello world"));
if ($connection -> lastHttpCode() == 200) {
//Tweet posted succecfully
} else {
// Handle error case
}

ん?動かないんですけど~~~。取得出来ないんですけど~~~~。
んもうっ!なんでだよっ!!!
テツ&トモが踊ってる間にグーグル先生に聞いてみても教えてくれないし。もう訳分かんないし面倒だからいいかと、諦めかけた時に「そういえば、LastHttpCode()って「()」があるから関数だよな・・・って事は・・・」と、最後にTwitterOAuth.phpの中身を確認してみると・・・

//70行目ぐらいに
/** * @return int */ public function getLastHttpCode() { return $this->response->getHttpCode(); }

やっぱりあった!あったよお母さんっ!
lastHttpCode()じゃなくて、getLastHttpCode()かよっ!ふざけんなよっ!取説間違ってんじゃねーよっ!ボケっ!っと心の中で叫びながら、ようやく思うように動いてくれました。

最終的にこんな感じ

<?php 
#OAuthライブラリの読み込み
require_once('twitteroauth/autoloader.php');
use Abraham\TwitterOAuth\TwitterOAuth;

#トークンの読み込み
require_once('apiconfig.php');

#0か1かランダムに取得
$flag = mt_rand(0,1);

if($flag === 0) {
#画像なし
require_once('リスト化ファイル.php');#リスト化されているPHPファイルを読み込む
if(shuffle($list)) {
$message = $list[0];
}
} else {
#画像付きテキスト用
$text = array();
$text[0] = "画像用テキスト1";
$text[1] = "画像用テキスト2";
$text[2] = "画像用テキスト3";

if(shuffle($text)) {
$message = $text[0];

}
}

$connection = new TwitterOAuth($consumerKey,$consumerSecret,$accessToken,$accessTokenSecret);
$content = $connection->get("account/verify_credentials");
$media = $connection->upload("media/upload",array('media' => "画像"));

if($connection) {
if($flag === 0) {
#つぶやく(テキストのみ)
$result = $connection->post("statuses/update",["status" => $message]);
$flag_text = "text";
} else {
//つぶやく(画像有り)
$parameters = array(
'media_ids' => implode("," , array($media -> media_id_string)),
'status' => $message
);
$result = $connection->post("statuses/update",$parameters);
$flag_text = "image";
}

#戻り値取得
$http_code = $connection->getLastHttpCode();

if($http_code == "200" && !empty($result)) {
#つぶやき成功
Logput("Tweet ".$flag_text.": success");
} else {
#つぶやき失敗
Logput("Tweet ".$flag_text.": faile");
}
}

#Log取り、参考サイトを参照
function Logput($log) {
#現在時刻を付加
$date = date('Y/m/d(D) H:i',time());
$log = $date." ".$log;

#標準出力に出力
echo mb_convert_encoding($log."<br>","SJIS","UTF-8");

#ログファイルに出力
$fp = fopen("./tweetlog.log","a+");
fputs($fp,$log."\n");
fclose($fp);
}
?>

プログラムの書き方うんぬんは突っ込まないでくださいw

最近画像付きつぶやきが流行っているのかどうかしれないけど、オッズハックでもやってみたかったので、「画像付きテキスト」と「テキストのみ」をランダムにツイートするようにしてます。えへw
後はこのファイルをCRON設定してやれば無事自動ツイート出来ましたw

画像ツイート

entry0206-3

ちなみに画像をつぶやくのは、取説どおりに記述してやれば動きましたw

こんな感じで自動つぶやきBot完成

というわけで、先週あたりからツイッターで販促の意味も兼ねて、自動つぶやきしています。で、ツイートBotを改造する時の為の備忘録的な意味合いも兼ねて競馬には関係ないですが、記事にした次第です。はい。

でも、このBotってなかなか便利ですね。Botでリスト化された記事つぶやく事で、古い記事にも再度フォーカスを当てれるしね。はい。

そして、この記事を書きたいが為に、アメブロにシンタックスハイライト を導入した事は内緒です。