「ver.1.42*よくある質問*OAuth」の編集履歴(バックアップ)一覧に戻る

ver.1.42*よくある質問*OAuth - (2010/06/24 (木) 19:00:57) のソース

PHPファイルを編集する上で、基本使いそうなPHP制御構造等は[[Twitter Bot関連リンク]]にお勧め解説サイトをリンクしています。
※wikiの編集が分からなくて、追加してほしい項目がある場合はページ下の「コメントを書く」から誰かに頼んで下さい。
#contents
*ver.1.42でOAuth認証するには
phaさんが開放して下さっているもの(EasyBotterから)を使う場合の解説です。
**ファイルの用意
[[PHP+OAuthでTwitter>>http://wolf.silk.to/labo/oauth.html]]さんで配布されている''oauth_test.txt''と[[Twitter API Wiki / OAuth Examples>>http://github.com/abraham/twitteroauth/downloads]]で配布されているver0.2.0以上のzipファイルをDLして下さい。
zipは解凍して、''OAuth.php''と''twitterOAuth.php''だけ使用します。~~oauth_test.txtは''oauth_test.php''へ改名して下さい。
reply_random.php等を置いている同ディレクトリ内へアップロードして下さい。
**Access Tokenの取得
+BOTアカウントでTwitterへログインする。
+[[こちらのページ>http://pha22.net/twitterbot/2.0/setting.php]]から"OAuth認証について"をクリック。
+アプリケーションを許可するか聞かれる→許可をクリック。
+その後、転送されたページに表示されている&color(red){''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は弄らないで下さい。''

その付近にある

 $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の記述も忘れずに!
**備考
このままだと{id}や{timeline_name}と言ったものが使えなくなっています。
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内をみて下さい。
目安箱バナー