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

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


#アプリケーションの登録

twitter API を使ってつぶやきを取得したり投稿したりするために、はじめに絶対必要。
詳しくは以下のサイトを参考に。
「twitter　アプリケーション登録」で参考サイトがいっぱい出てくる。
・[Twitter APIで、アプリケーションを登録する方法](http://syncer.jp/twitter-api-create-application)

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


#アクセストークンの取得
詳しくは以下のサイトを参考に。
・[Twitter APIでアクセストークンを取得する方法](http://syncer.jp/twitter-api-how-to-get-access-token)

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


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


まずはライブラリをダウンロード。
[twistoauth GitHub](https://github.com/mpyw/TwistOAuth)

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

##twistoauth を使って認証する
まずはtwistoauth の読み込み

```lang:php
require 'TwistOAuth.phar';
```

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

```lang: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](https://dev.twitter.com/rest/public)を参照すれば、いろんなツイートを取得できる。パラメータもいろいろ。

```lang: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から表示する情報を抜き出す
キーワードやハッシュで検索したツイートでは、キーワードにマーキングをしたいのでその処理も含む。


```lang: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に流し込む。

```lang: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」の場合

# <a name="twitteroauth"> OAuth用ライブラリ「twitteroauth」の場合
まずはダウンロード。
[twitteroauth · GitHub](https://github.com/abraham/twitteroauth)

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

##composerに関するメモ
* [Composerを使ってPHPのパッケージを簡単インストール](http://codezine.jp/article/detail/7827)
* [Composerのダウンロード](https://getcomposer.org/doc/00-intro.md#installation-windows)

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

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

```lang:json
{
  "require": {
    "php": ">=5.4.0",
    "abraham/twitteroauth": "0.5.0"
  }
}
```

```
$ composer install
```

でインストール。


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

```lang: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 の場合とほぼ同じ。

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

```