Edited at

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

More than 1 year has passed since last update.

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']);