Twitter APIでつぶやきを取得する

  • 199
    いいね
  • 0
    コメント

twitter API について検索しているとJSでの取得方法もちらほら見られるけれど、twitter API ver.1.1から認証が必須となったことで、JSだとアクセストークンがまる見えになってしまう。これは危険。
ということで、PHPでの実装手順。

アプリケーションの登録

twitter API を使ってつぶやきを取得したり投稿したりするために、はじめに絶対必要。
詳しくは以下のサイトを参考に。
「twitter アプリケーション登録」で参考サイトがいっぱい出てくる。
Twitter APIで、アプリケーションを登録する方法

↓ 完了するとこれが取得できる
consumer_key
consumer_secret

アクセストークンの取得

詳しくは以下のサイトを参考に。
Twitter APIでアクセストークンを取得する方法

↓ 完了するとこれが取得できる
access_token
access_token_secret

OAuth用ライブラリ「twistoauth」

Oauth認証用ライブラリの中では一番メジャーっぽい「twitteroauth」を使おうとしたらOauth認証通すまでにちょっとハマってしまい...
twitteroauthを元に改良した人がいたので、そちらのライブラリ「twistoauth」を使ってみた。
「twitteroauth」の使い方も備忘録としてこちらに記載

まずはライブラリをダウンロード。
twistoauth GitHub

ダウンロードしたファイルの中で使うのは TwistOAuth.phar のみ。

twistoauth を使って認証する

まずはtwistoauth の読み込み

php
require 'TwistOAuth.phar';

上の手順で取得したAPIキー、アクセストークンを設定して認証を通す。

php
$consumer_key = 'xxxxxxxxxxx';
$consumer_secret = 'xxxxxxxxxxx';
$access_token = 'xxxxxxxxxxx';
$access_token_secret = 'xxxxxxxxxxx';

$connection = new TwistOAuth($consumer_key, $consumer_secret, $access_token, $access_token_secret);

jsonの取得

REST APIsを参照すれば、いろんなツイートを取得できる。パラメータもいろいろ。

php
// キーワードによるツイート検索
$tweets_params = ['q' => '夜景,きれい OR キレイ OR 綺麗' ,'count' => '10'];
$tweets = $connection->get('search/tweets', $tweets_params)->statuses;

// ハッシュタグによるツイート検索
$hash_params = ['q' => '#html5,#css3' ,'count' => '10', 'lang'=>'ja'];
$hash = $connection->get('search/tweets', $hash_params)->statuses;

// 指定位置(geo情報)から投稿されたツイート検索
$geo_params = ['geocode' => '35.710063,139.8107,0.2km' ,'count' => '10'];
$geo = $connection->get('search/tweets', $geo_params)->statuses;

// 自分のタイムラインを取得
$home_params = ['count' => '10'];
$home = $connection->get('statuses/home_timeline', $home_params);

// 自分のツイートを取得
$user_params = ['count' => '10'];
$user = $connection->get('statuses/user_timeline', $user_params);

// ニックネームからユーザ情報を取得
$users_params = ['screen_name' => 'yokoh9'];
$users = $connection->get('users/show', $users_params);

※PHP ver.5.3以下の場合は配列の省略記述 ['xxx' => 'xxx', ...] が使えないので、array('xxx' => 'xxx', ...) とする。

JSONから表示する情報を抜き出す

キーワードやハッシュで検索したツイートでは、キーワードにマーキングをしたいのでその処理も含む。

php
foreach ($tweets as $value) {
    $text = htmlspecialchars($value->text, ENT_QUOTES, 'UTF-8', false);
    // 検索キーワードをマーキング
    $keywords = preg_split('/,|\sOR\s/', $tweets_params['q']); //配列化
    foreach ($keywords as $key) {
        $text = str_ireplace($key, '<span class="keyword">'.$key.'</span>', $text);
    }
    // ツイート表示のHTML生成
    disp_tweet($value, $text);
}

抜き出した情報をHTMLに流し込む。

php
function disp_tweet($value, $text){
    $icon_url = $value->user->profile_image_url;
    $screen_name = $value->user->screen_name;
    $updated = date('Y/m/d H:i', strtotime($value->created_at));
    $tweet_id = $value->id_str;
    $url = 'https://twitter.com/' . $screen_name . '/status/' . $tweet_id;

    echo '<div class="tweetbox">' . PHP_EOL;
    echo '<div class="thumb">' . '<img alt="" src="' . $icon_url . '">' . '</div>' . PHP_EOL;
    echo '<div class="meta"><a target="_blank" href="' . $url . '">' . $updated . '</a>' . '<br>@' . $screen_name .'</div>' . PHP_EOL;
    echo '<div class="tweet">' . $text . '</div>' . PHP_EOL;
    echo '</div>' . PHP_EOL;
}

おしまい。


以下はもう一つのライブラリ「twitteroauth」の場合

OAuth用ライブラリ「twitteroauth」の場合

まずはダウンロード。
twitteroauth · GitHub

twitteroauth ver.0.2.0 までの使い方は検索でいっぱい出てくるんだけど、現最新バージョンは ver.0.5.1。
0.2.1以降はcomposerからインストールするやり方に変わったらしい。
composerってなに? ⇒ PHPのパッケージ管理ツール
ということで、composerからインストールせねば。。
こちら「Composer に挑戦したよ深夜0時」を参考にさせていただいた。

composerに関するメモ

twitteroauthのインストール手順

  1. アプリのフォルダを作成
  2. 使いたいパッケージの定義ファイル(composer.json)を作成
  3. $ composer install のコマンド実行
  4. PHPのコーディング(autoloaderファイルの読み込み)

上記(2)の ↓ composer.jsonファイル(バージョンは最新にしてね)をアプリフォルダ内に入れる。

json
{
  "require": {
    "php": ">=5.4.0",
    "abraham/twitteroauth": "0.5.0"
  }
}
$ composer install

でインストール。

twitteroauth を使って認証する

twitteroauthは無事インストール完了。
次は認証。
本家の英語サイト
https://twitteroauth.com/
日本語サイトでは ↓ こちらがけっこう丁寧に解説してくれている。
abraham/twitteroauthを使う

php
<?php
// twitteroauth の読み込み
require_once 'vendor/autoload.php';
use Abraham\TwitterOAuth\TwitterOAuth;

// OAuth認証
$consumer_key = 'xxxxxxxx';
$consumer_secret = 'xxxxxxxx';
$access_token = 'xxxxxxxx';
$access_token_secret = 'xxxxxxxx';

$connection = new TwitterOAuth($consumer_key, $consumer_secret, $access_token, $access_token_secret);

ここまでがOAuth認証を通すところ。

ツイートを投稿したり取得したり

jsonの取得から表示までは twistoauth の場合とほぼ同じ。

php
// Timelineの取得
$home = $connection->get('statuses/home_timeline', array('count' => 5));

// キーワードによるツイート検索
$tweet = $connection->get("search/tweets", array("q" => "夜景 きれい", 'count' => 10));

// 認証が有効か+ユーザ情報取得
$user = $connection->get('account/verify_credentials');

// つぶやく
$status = $connection->post('statuses/update', ['status' =>'ツイート内容']);

// リツイート
$retweet = $connection->post('statuses/retweet/ツイートID');

// フォロワーを取得
$followers = $connection->get('followers/list');

// フォローしてる人を取得
$follows = $connection->get('friends/list');

// ユーザ名でユーザ情報を取得
$userinfo = $connection->get('users/show', ['screen_name'=> '@以降の表示名']);

// ユーザIDでフォローする
$follow = $connection->post('friendships/create', ['user_id'=> 'ユーザID']);