2015.
07.
08
20:53:10
■2015年9月5日追記
本ページ記載のサンプルプログラムは自動投稿部分の内容が陳腐化しています。
新しく書き直した
PHP、Twitterへの自動投稿機能を作成(2015年9月版)。
の記事を併せてご覧ください。
本ページ記載のサンプルプログラムは自動投稿部分の内容が陳腐化しています。
新しく書き直した
PHP、Twitterへの自動投稿機能を作成(2015年9月版)。
の記事を併せてご覧ください。
ステマになっていない気がしなくもないステマのつもりの宣伝ですが、
わわわIT用語辞典の掲載内容をTwitterへ自動投稿しています。
投稿先は以下のアカウントです。
https://twitter.com/wa3_pcs
システム側で実際にどんな処理をしているかは
(多少端折っていますが)以下の記事をご覧いただければ分かるはずです。
1.PHP、Twitterへの自動投稿機能を作成。
2.PHP、Twitterへの自動投稿APIをversion1.0→1.1へ変更。
3.PHP、Twitterへの自動投稿APIがAPIの仕様変更?で動かなくなっていた。
さて、実はこれらの記事(というかTwitter自動投稿機能)で
意図的に見ない振りをしている部分がありましてね。
そうです。
投稿結果の判定です。
だって、面倒くさかったんだもん(-ε-)
cronに登録しているので投稿結果自体はメールで送られてきていますからね。
今までは、それを定期的に見て「エラーになっていないなー」と判断していました。
でも、それすら面倒くさくなりました。
ということで、エラー発生時は個別にメールを飛ばすことにしたのです。
これで、エラーメールが飛んでこない限りは確認不要になります。
やったー。
また一つ、手抜きができるわぁ(人´∀`)
手抜きの為なら手間を惜しまないのがエンジニアという人種です。
早速、自動投稿機能を改造しましょう。
今回追加した処理は
1.JSON形式の投稿結果を連想配列に分解
2.連想配列のキーに「errors」があるか判定(※1)
3.エラーがあったらメール送信
※1:2015年7月現在、投稿に失敗すると多分「errors」という項目があるはずです。
技術資料を読んで確認したりしたわけではありませんが、
トークンを適当な値に変えて実行したところ、以下の結果が返ってきました。
{"errors":[{"code":32,"message":"Could not authenticate you."}]}
の3つの処理です。
これを、あーだこーだして……実際のコードを見た方が手っ取り早いですよね(^^ゞ
こんな感じのコードになりましたφ(--)
<?php
//「twitteroauth.php」読み込み
//「OAuth.php」は「twitteroauth.php」と同じ場所に配置します
//サンプルでは両ファイルとも「./../inc/」配下においてありますよ
require_once dirname(__FILE__) . '/../inc/twitteroauth.php';
// 「Consumer key」値
$ck = さっきメモった「Consumer key」の値;
// 「Consumer secret」値
$cs = さっきメモった「Consumer secret」の値;
// 「Access Token」値
$at = さっきメモった「Access Token」の値;
// 「Access Token Secret」値
$ats = さっきメモった「Access Token Secret」の値;
//リクエストを投げる先(固定値)
// $url = "http://api.twitter.com/1.1/statuses/update.json";
$url = "https://api.twitter.com/1.1/statuses/update.json";
$method = "POST";
//投稿する文言
$postMsg = "投稿メッセージだよー";
// OAuthオブジェクト生成
$toa = new TwitterOAuth($ck,$cs,$at,$ats);
//投稿
$res = $toa->OAuthRequest($url,$method,array("status"=>"$postMsg"));
// レスポンス表示
header("Content-Type: application/json");
echo $res;
//JSON形式のデータを連想配列に変換
$res_array = json_decode($res, true);
//結果判定
if(array_key_exists("errors", $res_array)){
//エラー:メール送信
//メール送信ここから---------------------
$tmp_mie = mb_internal_encoding();
mb_internal_encoding("ISO-2022-JP");
mb_language("ja");
//差出人
$from = "From: from@example.com"; //From
//宛先
$to = "to@example.com"; //To
//件名
$sb = "twitter post error";
$sb = mb_convert_encoding($sb, "ISO-2022-JP", "UTF-8");
//本文
$msg = $res;
$msg = mb_convert_encoding($msg, "ISO-2022-JP", "UTF-8");
if (!(mb_send_mail($to, $sb, $msg,$from))) {
throw new Exception("メールの送信に失敗しました。" . ":" . __FILE__ . ":" . __LINE__);
}
mb_internal_encoding($tmp_mie);
//メール送信ここまで---------------------
}else{
//正常
//なんか処理があれば追加
}
?>
//「twitteroauth.php」読み込み
//「OAuth.php」は「twitteroauth.php」と同じ場所に配置します
//サンプルでは両ファイルとも「./../inc/」配下においてありますよ
require_once dirname(__FILE__) . '/../inc/twitteroauth.php';
// 「Consumer key」値
$ck = さっきメモった「Consumer key」の値;
// 「Consumer secret」値
$cs = さっきメモった「Consumer secret」の値;
// 「Access Token」値
$at = さっきメモった「Access Token」の値;
// 「Access Token Secret」値
$ats = さっきメモった「Access Token Secret」の値;
//リクエストを投げる先(固定値)
// $url = "http://api.twitter.com/1.1/statuses/update.json";
$url = "https://api.twitter.com/1.1/statuses/update.json";
$method = "POST";
//投稿する文言
$postMsg = "投稿メッセージだよー";
// OAuthオブジェクト生成
$toa = new TwitterOAuth($ck,$cs,$at,$ats);
//投稿
$res = $toa->OAuthRequest($url,$method,array("status"=>"$postMsg"));
// レスポンス表示
header("Content-Type: application/json");
echo $res;
//JSON形式のデータを連想配列に変換
$res_array = json_decode($res, true);
//結果判定
if(array_key_exists("errors", $res_array)){
//エラー:メール送信
//メール送信ここから---------------------
$tmp_mie = mb_internal_encoding();
mb_internal_encoding("ISO-2022-JP");
mb_language("ja");
//差出人
$from = "From: from@example.com"; //From
//宛先
$to = "to@example.com"; //To
//件名
$sb = "twitter post error";
$sb = mb_convert_encoding($sb, "ISO-2022-JP", "UTF-8");
//本文
$msg = $res;
$msg = mb_convert_encoding($msg, "ISO-2022-JP", "UTF-8");
if (!(mb_send_mail($to, $sb, $msg,$from))) {
throw new Exception("メールの送信に失敗しました。" . ":" . __FILE__ . ":" . __LINE__);
}
mb_internal_encoding($tmp_mie);
//メール送信ここまで---------------------
}else{
//正常
//なんか処理があれば追加
}
?>
赤字の部分が、今回追加した処理です。
メール送信部分は面倒くさかったので直に埋めていますが、
こだわり派な人は関数化するなり何なりしてください。
逆に言うと、赤字の部分以外は過去の記事で(ある程度)説明しています。
1.PHP、Twitterへの自動投稿機能を作成。
2.PHP、Twitterへの自動投稿APIをversion1.0→1.1へ変更。
3.PHP、Twitterへの自動投稿APIがAPIの仕様変更?で動かなくなっていた。
「1.」の記事で処理の大枠を説明しています。
「2.」「3.」は、その後の仕様変更に対応したものです。
時系列順に並んでいるので「3.」のサンプルコードが、今回のひとつ前の物です。
必要に応じて、適当にご参照ください。
そんな感じ\(--)/