PHPファイルを編集する上で、基本使いそうなPHP制御構造等はTwitter Bot関連リンクにお勧め解説サイトをリンクしています。
※wikiの編集が分からなくて、追加してほしい項目がある場合はページ下の「コメントを書く」から誰かに頼んで下さい。
※wikiの編集が分からなくて、追加してほしい項目がある場合はページ下の「コメントを書く」から誰かに頼んで下さい。
ver.1.42でOAuth認証するには
phaさんが開放して下さっているもの(EasyBotterから)を使う場合の解説です。
ファイルの用意
PHP+OAuthでTwitterさんで配布されているoauth_test.txtとTwitter API Wiki / OAuth Examplesで配布されているver0.2.0以上のzipファイルをDLして下さい。
zipは解凍して、OAuth.phpとtwitterOAuth.phpだけ使用します。~~oauth_test.txtはoauth_test.phpへ改名して下さい。
reply_random.php等を置いている同ディレクトリ内へアップロードして下さい。
zipは解凍して、OAuth.phpとtwitterOAuth.phpだけ使用します。~~oauth_test.txtはoauth_test.phpへ改名して下さい。
reply_random.php等を置いている同ディレクトリ内へアップロードして下さい。
Access Tokenの取得
- BOTアカウントでTwitterへログインする。
- こちらのページから"OAuth認証について"をクリック。
- アプリケーションを許可するか聞かれる→許可をクリック。
- その後、転送されたページに表示されている''Access Token/Access Token Secretの値2つをメモする。''
reply_random.phpの編集
reply_random.php内
//各種設定 chdir(dirname(__FILE__)); require_once("Services/Twitter.php"); require_once('Services/Twitter/Jsphon/Error.php'); require_once("Services/Twitter/Jsphon/Decoder.php");
の直後へ
require_once("twitterOAuth.php"); $consumer_key = "WtNt5W6js77cFHvKyVgf6Q"; // Consumer keyの値 $consumer_secret = "h3In28YiiRxtg4PTpkhPmrlJSGOCTG2oh3hslQ"; // Consumer secretの値 $access_token = ""; // Access Tokenの値 $access_token_secret = ""; // Access Token Secretの値 $to = new TwitterOAuth($consumer_key,$consumer_secret,$access_token,$access_token_secret); $replydata = $to->OAuthRequest('http://twitter.com/statuses/replies.json', array(), 'GET');
を記入する。
※↑に先ほど取得したAccess Token/Access Token Secretを記述する。''Consumer Key/Consumer Secretは弄らないで下さい。''
※↑に先ほど取得したAccess Token/Access Token Secretを記述する。''Consumer Key/Consumer Secretは弄らないで下さい。''
その付近にある
$st =& new Services_Twitter($username, $password); $replydata = $st->getReplies();
を代わりに削除して下さい。
次に
//投稿する $in_reply_to_status_id = $replies2[$i]["id"]; $result = $st->setUpdate(array('status'=>$message,'in_reply_to_status_id'=>$in_reply_to_status_id));
を探し、まるまる
//投稿する $in_reply_to_status_id = $replies2[$i]["id"]; $result = $to->OAuthRequest("https://twitter.com/statuses/update.xml",array("status"=>$message,'in_reply_to_status_id'=>$in_reply_to_status_id),"POST");
へ変更して下さい。
以上でreply_random.phpの編集は終わりです。
post_random.phpの編集
同じくpost_random.php内
//各種設定 chdir(dirname(__FILE__)); require_once("Services/Twitter.php"); require_once('Services/Twitter/Jsphon/Error.php'); require_once("Services/Twitter/Jsphon/Decoder.php");
の直後へ
require_once("twitterOAuth.php"); $consumer_key = "WtNt5W6js77cFHvKyVgf6Q"; // Consumer keyの値 $consumer_secret = "h3In28YiiRxtg4PTpkhPmrlJSGOCTG2oh3hslQ"; // Consumer secretの値 $access_token = ""; // Access Tokenの値 $access_token_secret = ""; // Access Token Secretの値 $to = new TwitterOAuth($consumer_key,$consumer_secret,$access_token,$access_token_secret);
を記入する。
その付近にある
$st =& new Services_Twitter($username, $password);
を代わりに削除して下さい。
次に
//twitterに投稿する $result = $st->setUpdate($message);
を探し、まるまる
//twitterに投稿する $result = $to->OAuthRequest("https://twitter.com/statuses/update.xml",array("status"=>$message),"POST");
へ変更して下さい。
以上でpost_random.phpの編集は終わりです。
from.phpの編集
ファイルの中身すべてを削除し
<html> <head> <meta http-equiv="content-type" content="text/html; charset=utf-8"> <title>Twitter手動投稿用フォーム</title> </head> <body> <center> <p>Twitter手動投稿用フォーム</p> <p>手動で何か投稿させたいときに使ってください。</p> <form action="form.php" method="POST"> 発言内容:<br /> <textarea name="message" cols="20" rows="4"></textarea><br /> <input type="submit" name="submit" value="post" /><br /> </form> <?php if(isset($_POST["submit"])){ chdir(dirname(__FILE__)); require_once("Services/Twitter.php"); require_once('Services/Twitter/Jsphon/Error.php'); require_once("Services/Twitter/Jsphon/Decoder.php"); require_once("twitterOAuth.php");
$username = ""; //userid $consumer_key = "WtNt5W6js77cFHvKyVgf6Q"; // Consumer keyの値 $consumer_secret = "h3In28YiiRxtg4PTpkhPmrlJSGOCTG2oh3hslQ"; // Consumer secretの値 $access_token = ""; // Access Tokenの値 $access_token_secret = ""; // Access Token Secretの値 $to = new TwitterOAuth($consumer_key,$consumer_secret,$access_token,$access_token_secret); $message = $_POST["message"];
$result = $to->OAuthRequest("https://twitter.com/statuses/update.xml",array("status"=>$message),"POST"); if($result){ echo "Twitterへのpostに成功しました。<br />"; echo "@<a href='http://twitter.com/{$username}' target='_blank'>{$username}</a>に投稿したメッセージ:{$message}"; }else{ echo "Twitterへの投稿に失敗しました。パスワードやユーザー名をもう一度チェックしてみてください。<br />"; echo "ユーザー名:@<a href='http://twitter.com/{$username}' target='_blank'>{$username}</a><br />"; echo "投稿しようとしたメッセージ:{$message}"; } } ?> </center> </body> </html>
と書き換えて下さい。
Access Token/Access Token Secretの記述も忘れずに!
Access Token/Access Token Secretの記述も忘れずに!
備考
このままだと{id}や{timeline_name}と言ったものが使えなくなっています。
reply_random.phpとpost_random.php内
reply_random.phpとpost_random.php内
if(preg_match("@{.+?}@",$message) == 1){ //時間などを変換する require_once("Services/convert_text.php"); $message = convert_text($message); //id、名前を変換する //タイムラインからランダムに最近発言した人のデータを取る if(preg_match("@{timeline_id}@",$message) === 1){ $randomTweet = $st->getRandomTweet(20); $message = preg_replace("@{timeline_id}@u",$randomTweet["user"]["screen_name"],$message); } if(preg_match("@{timeline_name}@",$message) === 1){ $randomTweet = $st->getRandomTweet(20); $message = preg_replace("@{timeline_name}@u",$randomTweet["user"]["name"],$message); } //ランダムな一人のfollowerデータを取る if(preg_match("@{id}@",$message) === 1){ $randomFollowersData = $st->getRandomfollowersData(); $message = preg_replace("@{id}@u",$randomFollowersData["screen_name"],$message); } if(preg_match("@{name}@",$message) === 1){ $randomFollowersData = $st->getRandomfollowersData(); $message = preg_replace("@{name}@u",$randomFollowersData["name"],$message); } if(preg_match("@{follower_id}@",$message) === 1){ $randomFollowersData = $st->getRandomfollowersData(); $message = preg_replace("@{follower_id}@u",$randomFollowersData["screen_name"],$message); } if(preg_match("@{follower_name}@",$message) === 1){ $randomFollowersData = $st->getRandomfollowersData(); $message = preg_replace("@{follower_name}@u",$randomFollowersData["name"],$message); } //ランダムな一人のfollowingデータを取る if(preg_match("@{following_id}@",$message) === 1){ $randomFollowingsData = $st->getRandomFollowingsData(); $message = preg_replace("@{following_id}@u",$randomFollowingsData["screen_name"],$message); } if(preg_match("@{following_name}@",$message) === 1){ $randomFollowingsData = $st->getRandomFollowingsData(); $message = preg_replace("@{following_name}@u",$randomFollowingsData["name"],$message); } }
をまるまる
if(preg_match("@{.+?}@",$message) == 1){ //時間などを変換する require_once("Services/convert_text.php"); $message = convert_text($message); //id、名前を変換する //タイムラインからランダムに最近発言した人のデータを取る if(preg_match("@{timeline_id}@",$message) === 1){ $timeline_id_result = $to->OAuthRequest("http://twitter.com/statuses/user_timeline.xml?count=20",array(),"GET"); preg_match_all("/.*?<screen_name>(.+?)<\/screen_name>/is",$timeline_id_result,$timeline_id_kekka,PREG_SET_ORDER); $message = preg_replace("@{timeline_id}@u",$timeline_id_kekka[array_rand($timeline_id_kekka)][1],$message); } if(preg_match("@{timeline_name}@",$message) === 1){ $timeline_name_result = $to->OAuthRequest("http://twitter.com/statuses/user_timeline.xml?count=20",array(),"GET"); preg_match_all("/.*?<name>(.+?)<\/name>/is",$timeline_name_result,$timeline_name_kekka,PREG_SET_ORDER); $message = preg_replace("@{timeline_name}@u",$timeline_name_kekka[array_rand($timeline_name_kekka)][1],$message); } //ランダムな一人のfollowerデータを取る if(preg_match("@{id}@",$message) === 1){ $follower_id_result = $to->OAuthRequest("http://twitter.com/statuses/followers.xml?screen_name=",array(),"GET"); preg_match_all("/.*?<screen_name>(.+?)<\/screen_name>/is",$follower_id_result,$follower_id_kekka,PREG_SET_ORDER); $message = preg_replace("@{id}@u",$follower_id_kekka[array_rand($follower_id_kekka)][1],$message); } if(preg_match("@{name}@",$message) === 1){ $follower_name_result = $to->OAuthRequest("http://twitter.com/statuses/followers.xml?screen_name=",array(),"GET"); preg_match_all("/.*?<name>(.+?)<\/name>/is",$follower_name_result,$follower_name_kekka,PREG_SET_ORDER); $message = preg_replace("@{name}@u",$follower_name_kekka[array_rand($follower_name_kekka)][1],$message); } if(preg_match("@{follower_id}@",$message) === 1){ $follower_id_result = $to->OAuthRequest("http://twitter.com/statuses/followers.xml?screen_name=",array(),"GET"); preg_match_all("/.*?<screen_name>(.+?)<\/screen_name>/is",$follower_id_result,$follower_id_kekka,PREG_SET_ORDER); $message = preg_replace("@{follower_id}@u",$follower_id_kekka[array_rand($follower_id_kekka)][1],$message); } if(preg_match("@{follower_name}@",$message) === 1){ $follower_name_result = $to->OAuthRequest("http://twitter.com/statuses/followers.xml?screen_name=",array(),"GET"); preg_match_all("/.*?<name>(.+?)<\/name>/is",$follower_name_result,$follower_name_kekka,PREG_SET_ORDER); $message = preg_replace("@{follower_name}@u",$follower_name_kekka[array_rand($follower_name_kekka)][1],$message); } //ランダムな一人のfollowingデータを取る if(preg_match("@{following_id}@",$message) === 1){ $friends_id_result = $to->OAuthRequest("http://twitter.com/statuses/friends.xml?screen_name=",array(),"GET"); preg_match_all("/.*?<screen_name>(.+?)<\/screen_name>/is",$friends_id_result,$friends_id_kekka,PREG_SET_ORDER); $message = preg_replace("@{following_id}@u",$friends_id_kekka[array_rand($friends_id_kekka)][1],$message); } if(preg_match("@{following_name}@",$message) === 1){ $friends_name_result = $to->OAuthRequest("http://twitter.com/statuses/friends.xml?screen_name=",array(),"GET"); preg_match_all("/.*?<name>(.+?)<\/name>/is",$friends_name_result,$friends_name_kekka,PREG_SET_ORDER); $message = preg_replace("@{following_name}@u",$friends_name_kekka[array_rand($friends_name_kekka)][1],$message); } }
へ書き換えて下さい。
これでOAuth認証への切り替えは終了です。お疲れ様でした。テストしてみましょう。
なお"EasyBotterから"の部分を変更したい場合はver.2.0のやり方と変わりませんので、wiki内をみて下さい。
なお"EasyBotterから"の部分を変更したい場合はver.2.0のやり方と変わりませんので、wiki内をみて下さい。