16
Help us understand the problem. What are the problem?

More than 3 years have passed since last update.

posted at

updated at

TwistOAuthを使ってユーザータイムラインを取得する

TwistOAuthは現在非推奨になっています。代わりに同じ作者のcowitterを使うようにしてください。

はじめに

PHPでTwitter連携のアプリをつくろうと思って調べてみるとTwistOAuthっていうのが便利そうだった。とりあえずこれを使ってタイムラインを取得出来るだけ取得してみる。

TwistOAuthは以下のURLで公開されてます。
https://github.com/mpyw/TwistOAuth

実装する

準備

あらかじめ、https://apps.twitter.com/からアプリケーション登録して、

  • CONSUMER KEY
  • CONSUMER SECRET
  • ACCESS TOKEN
  • ACCESS TOKEN SECRET

の4つを取得しておく。方法は色んなとこに載ってるので省略。

TwistOAuthライブラリはpharアーカイブにまとまってるのでダウンロード

wget https://github.com/mpyw/TwistOAuth/raw/master/build/TwistOAuth.phar

コード

ライブラリを読み込む

各種キーの設定もしてしまう


<?php

require_once 'TwistOAuth.phar';

define('CONSUMER_KEY', '取得したキー');
define('CONSUMER_SECRET', '取得したキー');
define('ACCESS_TOKEN', '取得したキー');
define('ACCESS_TOKEN_SECRET', '取得したキー');

$screen_name = '取得したいユーザのID(@なし)';

認証しよう

TwistOAuthクラスのコンストラクタで認証が行われるので。キーを渡してあげる。


try {
    $to = new TwistOAuth(CONSUMER_KEY, CONSUMER_SECRET, ACCESS_TOKEN, ACCESS_TOKEN_SECRET);//OAuth認証
} catch(TwistException $e) {
    $error = $e->getMessage();
}

ついーと取得

tweetはstatusと呼ぶそうです。一回のリクエストで最大200件しか取得できないので、forで回して取得できる最大数の3200件取得してみる。


$statuses = array(); //すべてのツイート用の配列

for($i = 0; $i < 3200; $i += 200) {

    $param = array('screen_name' => $screen_name, 'count' => '200'); //200件取得
    if(isset($max_id)) {
        $param['max_id'] = $max_id;
    }

    try {
        $tmp_statuses = $to->get('statuses/user_timeline', $param);
    } catch (TwistException $e) {
        $error = $e->getMessage();
    }

    if(count($tmp_statuses) == 0) { //取得件数0だったら終了
        break;
    } else { //取得したツイートがあった時
        $statuses =  array_merge($statuses, $tmp_statuses); //配列の最後に追加
        $max_id = $tmp_statuses[count($tmp_statuses)-1]->id - 1; //取得した最古のツイートのidを保存
    }
}

?>

これで$statusesには最大3200件(あれば)のツイートの配列が入ります。

表示

とりあえずリストで表示してみる

<!DOCTYPE html>
<html lang="ja">
<head>
    <meta charset="UTF-8">
    <title><?php echo htmlspecialchars($statuses[0]->user->name); ?>'s timeline</title>
</head>
<body>
    <?php if(isset($error)): echo $error; ?>
        <?php else: ?>
    <ul>
        <?php foreach ($statuses as $status): ?>
            <li><?php echo htmlspecialchars($status->text); ?> </li>
        <?php endforeach; ?>
    </ul>
        <?php endif; ?>
</body>
</html>

おわりに

アクセストークンが自分のものなので、基本的に鍵アカのツイートは取得できない。取得するには各ユーザにOAuth認証してもらう必要がある。

Why not register and get more from Qiita?
  1. We will deliver articles that match you
    By following users and tags, you can catch up information on technical fields that you are interested in as a whole
  2. you can read useful information later efficiently
    By "stocking" the articles you like, you can search right away
Sign upLogin
16
Help us understand the problem. What are the problem?