【ツイッターの連携】複数ユーザーを操る #PHP #Netbeans | 乖離のぶろぐ(*´∀`)吸い込んで応援
(゚ω゚) まず、ツイッターのユーザーを作り、1つのAppを作ります。
https://apps.twitter.com/





(゚ω゚) ここのYourとは、このAppの作者です。
(゚ω゚) このApp連携(アプリ連携)を受け入れる他のユーザーのアクセストークンは、
(゚ω゚)「連携アプリを認証」ボタンを押した後に、api.twitter.com から取得できます。



(゚ω゚) トークンってなに?
http://e-words.jp/w/E38388E383BCE382AFE383B3.html
>トークン 【 token 】
>証拠、記念品、代用貨幣、引換券、商品券などの意味を持つ英単語。
>プログラミングでは、ソースコードを解析する際にそれ以上細かい単位に分解できない文字列の並びの最小単位(要素名や演算子など)のことをトークンという。
>ネットワーク制御で、ネットワーク上を周回する送信権を意味する特殊な信号やデータをトークンということがある。
>セキュリティ分野では、ユーザ認証のためにコンピュータのUSBコネクタなどに物理的に接続する小型の装置(セキュリティトークン)のことを略してトークン(あるいはUSBトークンなど)と呼ぶことがある。

(゚ω゚)トークンとは自動車のナンバープレートみたいなモノだと分かった。
(゚ω゚)次は、このアプリを使うためのアクセストークンを取得してみよう。

(゚ω゚)動作環境は、LubuntuとApache2を使います。
root@ubuntu-VirtualBox:/var/www/html# uname -a
Linux ubuntu-VirtualBox 3.13.0-36-generic #63-Ubuntu SMP Wed Sep 3 21:30:07 UTC 2014 x86_64 x86_64 x86_64 GNU/Linux
root@ubuntu-VirtualBox:/var/www/html# ls -la
合計 32
drwxr-xr-x 2 root root 4096 10月 4 06:20 .
drwxr-xr-x 3 root root 4096 4月 19 23:19 ..
-rw-rw-r-- 1 ubuntu ubuntu 2070 10月 5 00:36 callback.php
-rwxr--r-- 1 ubuntu ubuntu 1523 10月 4 20:53 index.php
-rw-rw-r-- 1 ubuntu ubuntu 720 10月 4 20:54 util.php
root@ubuntu-VirtualBox:/var/www/html#

index.php の内容
<html>
<head>
<meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
</head>
<body>
<?php
// 参考にしたサイト
// http://d.hatena.ne.jp/yk5656/20140609/1404014640
// 192.168.1.3とは、このphpファイルを置いているサーバーのIPアドレス
require_once(dirname(__FILE__)."/util.php");
define('CALLBACK_URL', 'http://192.168.1.3/callback.php');
// URL
define('RTOKEN_URL', 'https://api.twitter.com/oauth/request_token');
define('AUTH_URL', 'https://api.twitter.com/oauth/authenticate');

//--------------------------------------
// リクエストトークンの取得
//--------------------------------------
$params = array(
"oauth_callback" => CALLBACK_URL,
"oauth_consumer_key" => CONSUMER_KEY,
"oauth_nonce" => md5(microtime() . mt_rand()),
"oauth_timestamp" => time(),
"oauth_version" => "1.0",
"oauth_signature_method" => "HMAC-SHA1",
);

// 署名作成
$params['oauth_signature'] = build_signature('GET', RTOKEN_URL, $params, CONSUMER_SECRET);

// GET送信
//echo RTOKEN_URL . '?' . http_build_query($params)."<BR>\n";
$res = file_get_contents(RTOKEN_URL . '?' . http_build_query($params));
// レスポンス取得
parse_str($res, $token);
if(!isset($token['oauth_token'])){
echo "エラー発生</body></html>";
exit;
}
$request_token = $token['oauth_token'];

//--------------------------------------
// 認証ページにリダイレクト
//--------------------------------------
$params = array(
'oauth_token' => $request_token,
);

// リダイレクト
header("Location: " . AUTH_URL . '?' . http_build_query($params));
?>
</body>
</html>


util.php の内容
<?php
// 参考にしたサイト
// http://d.hatena.ne.jp/yk5656/20140609/1404014640
//

// アプリケーション設定
define('CONSUMER_KEY', 'ここにAPIキーをコピペ'); // API Key
define('CONSUMER_SECRET', 'ここにAPIシークレットをコピペ'); // API secret
/*
* 署名の作成
*/
function build_signature($method, $url, $params, $consumer_secret, $token_secret = '') {

ksort($params);
$base = rawurlencode($method)."&".rawurlencode($url)."&".rawurlencode(http_build_query($params));

$key = rawurlencode($consumer_secret)."&".rawurlencode($token_secret);

$ret=base64_encode(hash_hmac('sha1', $base, $key, true));
echo "ulit.php: build_signature ".$ret."<br>\n";
return $ret;
}
?>


callback.php の内容
<html>
<head>
<meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
</head>
<body>
<?php
// 参考にしたサイト
// http://d.hatena.ne.jp/yk5656/20140609/1404014640
//
require_once(dirname(__FILE__)."/util.php");
// URL
define('TOKEN_URL', 'https://api.twitter.com/oauth/access_token');
define('INFO_URL', 'https://api.twitter.com/1.1/account/settings.json');

//--------------------------------------
// アクセストークンの取得
//--------------------------------------
$params = array(
"oauth_consumer_key" => CONSUMER_KEY,
"oauth_nonce" => md5(microtime() . mt_rand()),
"oauth_timestamp" => time(),
"oauth_verifier" => $_GET['oauth_verifier'],
"oauth_version" => "1.0",
"oauth_signature_method" => "HMAC-SHA1",
"oauth_token" => $_GET['oauth_token'],
);

// 署名作成
$params['oauth_signature'] = build_signature('POST', TOKEN_URL, $params, CONSUMER_SECRET);

// POST送信
$options = array('http' => array(
'method' => 'POST',
'content' => http_build_query($params)
));
$res = file_get_contents(TOKEN_URL, false, stream_context_create($options));

// レスポンス取得。
// 他のユーザーのアクセストークンを取得できます。
parse_str($res, $token);
$access_token = $token['oauth_token'];
$access_token_secret = $token['oauth_token_secret'];
echo "<pre>"."access_token= ".$access_token."</pre>";
echo "<pre>"."access_token_secret= ".$access_token_secret."</pre>";

//--------------------------------------
// ユーザーの設定情報を取得してみる
//--------------------------------------
$params = array(
"oauth_consumer_key" => CONSUMER_KEY,
"oauth_nonce" => md5(microtime() . mt_rand()),
"oauth_timestamp" => time(),
"oauth_verifier" => $_GET['oauth_verifier'],
"oauth_version" => "1.0",
"oauth_signature_method" => "HMAC-SHA1",
"oauth_token" => $access_token,
);

// GET送信
$params['oauth_signature'] = build_signature('GET', INFO_URL, $params, CONSUMER_SECRET, $access_token_secret);
$res = file_get_contents(INFO_URL . '?' . http_build_query($params));

// 表示
echo "<pre>" . print_r(json_decode($res, true), true) . "</pre>";
?>
</body>
</html>


(゚ω゚) 操られるユーザーを作って、連携!



(゚ω゚) 連携を行うと、そのトークンでアクセスすることになる。
(゚ω゚) 以前の連携時の古いトークンは使えなくなるという事。

(゚ω゚) これでコンシューマーキーと、ユーザーを操るためのアクセストークンが取得できた。
(゚ω゚) 複数ユーザーの操りは、簡単な呟きを行ってみよう。
http://ameblo.jp/pochifx/entry-11913850059.html
>2.addUser2List.phpの作成
(゚ω゚) が、参考になると思う。
(゚ω゚)PHPで書いたが、こんな感じ。すべてをコピペすると長いから、貼らないでおく。

require_once(dirname(__FILE__)."/twitteroauth/twitteroauth.php");

$arOAuth = array();
$arStatus = array();

$consumerKey = 'ここにAPIキーをコピペ';
$consumerSecret = 'ここにAPIシークレットをコピペ';
$accessToken = 'ユーザー毎にアクセストークンは異なります。';
$accessTokenSecret = 'ユーザー毎にアクセストークンシークレットは異なります。';

$arOAuth[0] = new TwitterOAuth($consumerKey, $consumerSecret, $accessToken, $accessTokenSecret);

// 何件か呟き内容を記述して・・・
$arStatus[14] = $msg1."http://twitpic.com/ece6xz \n";

//最後はデータ終了という意味でゼロをセット。
$arOAuth[15] = 0; // DATA END

$method = 'POST';
for ($i=0;;$i++) {
/* oAuth認証を利用しUpdate */
if ($arOAuth[ $i ] === 0) {
$i = 0;
}
$statusStr = $arStatus[ $i ] .date(DATE_RFC2822);
$response = $arOAuth[$i]->post('statuses/update', array('status' => $statusStr) );
var_dump($response);
sleep(秒);
}


(゚ω゚)次は誰をフォローしてるのか調べてみるか・・
follow2List.php の内容

<?php
// developer info
$consumerKey = 'ここにAPIキーをコピペ';
$consumerSecret = 'ここにAPIシークレットをコピペ';
$accessToken = 'ユーザー毎にアクセストークンは異なります。';
$accessTokenSecret = 'ユーザー毎にアクセストークンシークレットは異なります。';

require_once(dirname(__FILE__)."/twitteroauth/twitteroauth.php");

/* @ユーザー名を表示 */
function echo_friends_list_screen_name(TwitterOAuth $oA, $res){
$num = count($res->users);
if( $num === 0 ) return;
for ( $i=0; $i < $num ; $i++){
echo("@". $res->users[ $i ]->screen_name ."\n");
}
return ;
}

/* フォローしているユーザーのオブジェクト配列usersを取得
* https://dev.twitter.com/rest/reference/get/friends/list
**/
$oAuth = new TwitterOAuth($consumerKey, $consumerSecret, $accessToken, $accessTokenSecret);
$response = $oAuth->get('friends/list', array('cursor' => -1, 'count' => 128));
echo_friends_list_screen_name($oAuth, $response);
// var_dump($response);
for(; $response->next_cursor != 0 ;){
$response = $oAuth->get('friends/list', array(
'cursor' => $response->next_cursor, 'count' => 128));
echo_friends_list_screen_name($oAuth, $response);
}
exit(1);
?>

(゚ω゚) 知らないAPI使ってるからデバッグしながら作ります。