Twitter APIの使い方シリーズも、いよいよ第9回目を迎えました。今回は、自分(アクセストークンの主)がしたつぶやきの中から、リツイートされたものだけに絞ったリスト、「リツイーツ・オブ・ミー」を取得してみましょう。

目次

  1. リクエスト方法(2件)
    1. リクエストURL(メソッド)
    2. パラメータ
  2. リツイーツ・オブ・ミーを取得する手順(3件)
    1. 単体で動作するプログラム
    2. 外部ライブラリを利用するプログラム
    3. デモを確認する
  3. 取得できるJSONデータ(2件)
    1. つぶやきのサンプル
    2. JSONデータの解説
  4. つぶやきを出力する(3件)
    1. [entities]の処理方法
    2. つぶやきの整形処理
    3. デモを確認する
  5. 完成版プログラムの配布(3件)
    1. リツイーツ・オブ・ミーの取得(PHP)
    2. 関数ライブラリ:twoh10_en_scr()
    3. 関数ライブラリ:twoh10_scr()
  6. 今回のまとめ

1リクエスト方法

「リツイーツ・オブ・ミー」とは、リツイートされたことがあるつぶやきリストです。取得に関する公式の解説(英語)は、下記ページにあります。

GET statuses/retweets_of_me Twitter Developer Center

1-1リクエストURL(メソッド)

GETメソッドで、下記URLにリクエストを送ります。

1-2パラメータ

データ取得用のパラメータ(OAuth1.0認証を除く)は下記の通りです。全てオプショナル(任意)なので、指定しても、しなくてもどちらでもかまいません。

項目 解説 初期値
count 取得する件数。最大値は200。 20
since_id つぶやきIDを指定すると、このIDより未来のデータのみを取得する(このIDを含めて取得する)。詳しくは当ブログの過去記事、「[max_id][since_id]の使い方」で解説している。 -
max_id つぶやきIDを指定すると、このIDより過去のデータのみを取得する(このIDを含めて取得する)。詳しくは当ブログの過去記事、「[max_id][since_id]の使い方」で解説している。 -
include_entities [false]にすると、[entities]を含めない。「[include_entities]とは?」で解説している。 true
include_user_entities [false]にすると、ユーザーオブジェクトにある[entities]を含めない。[entities]については、「[include_entities]とは?」を参照。 true

は「指定必須」、は「どちらか指定必須」のパラメータです。

[include_user_entities]とは

今回、新しく登場したinclude_user_entitiesというパラメータがあります。これは、つぶやきオブジェクトではなく、「ユーザーオブジェクト」の中にあるエンティティ("entities": {〜})をJSONデータに含めるか、含めないかを選択できるものです。

2リツイーツ・オブ・ミーを取得する手順

「リツイーツ・オブ・ミー」を取得してみましょう。このシリーズではお馴染みですが、2パターン用意しています。単体バージョンと、外部ライブラリを利用するバージョンです。

2-1単体で動作するプログラム

こちらは単体版です。外部ライブラリを利用せず、このファイルだけで動作します。この記事から読み始めた人、OAuth1.0認証を通した一連の流れを把握したい人は、こちらをご利用下さい。

<?php
	//[API Key]と[API Secret] ([API Secret]はついでにURLエンコード)
	$api_key = '';
	$api_secret = rawurlencode('');
  
	//[アクセストークン]と[アクセストークンシークレット] ([アクセストークンシークレット]はついでにURLエンコード)
	$access_token = '';
	$access_token_secret = '';

	//リクエストURLとリクエストメソッド
	$request_method = 'GET';
	$request_url = 'https://api.twitter.com/1.1/statuses/retweets_of_me.json';

	//データ取得用のパラメータ(連想配列形式)
	$params_a = array(
		'count' => 10,
	);

	//キーを作成する
	$signature_key = "{$api_secret}&{$access_token_secret}";

	//OAuth1.0認証用のパラメータ(連想配列形式)
	$params_b = array(
		'oauth_consumer_key' => $api_key,
		'oauth_token' => $access_token,
		'oauth_nonce' => microtime(),
		'oauth_signature_method' => 'HMAC-SHA1',
		'oauth_timestamp' => time(),
		'oauth_version' => '1.0'
	);

	//データを作成する
	$params_c = array_merge($params_a,$params_b);
	ksort($params_c);
	$signature_params = http_build_query($params_c,'','&',PHP_QUERY_RFC3986);
	$signature_params = rawurlencode($signature_params);
	$encoded_request_method = rawurlencode($request_method);
	$encoded_request_url = rawurlencode($request_url);
	$signature_data = "{$encoded_request_method}&{$encoded_request_url}&{$signature_params}";

	//署名を作成する
	$hash = hash_hmac('sha1',$signature_data,$signature_key,TRUE);
	$signature = base64_encode($hash);

	//GETリクエストの準備
	$params_c['oauth_signature'] = $signature;
	$header_params = http_build_query($params_c,'',',',PHP_QUERY_RFC3986);
	$tail = '?'.http_build_query($params_a,'','&',PHP_QUERY_RFC3986);
 
	//リクエストを実行する
	$response = @file_get_contents(
		$request_url.$tail,         //[第1引数:リクエストURL($request_url)とクエリー($tail)を合体]
		false,                      //[第2引数:リクエストURLは相対パスか?(違うのでfalse)]
		stream_context_create(      //[第3引数:stream_context_create()でメソッドとヘッダーを指定]
			array(
				'http' => array(
					'method' => $request_method, //リクエストメソッド
					'header' => array(          //カスタムヘッダー
						'Authorization: OAuth '.$header_params,
					),
				)
			)
		)
	);

	//配列[$data]を作成する
	$data = array();
	$data[0] = $response;							//JSONデータ
	$data[1] = $http_response_header;	//レスポンスヘッダー

	//JSONデータを出力する(確認のため)
	echo $data[0];

2-2外部ライブラリを利用するプログラム

こちらはこの連載シリーズの過去記事、「OAUth認証用のライブラリを作ろう」で作成したOAuth1.0認証用ライブラリ(twoh10_scr)を利用するタイプです。まだ入手してない人は、下記からダウンロードして下さい。

[twoh10_scr()]をダウンロードする

<?php
	//ライブラリを読み込む(ファイルの相対パスを指定)
	require_once './twoh10_scr.php';

	//引数の指定
	$url = 'https://api.twitter.com/1.1/statuses/retweets_of_me.json';
	$method = 'GET';
	$params = array(
		'count' => 10,
	);

	//リクエスト実行
	$data = twoh10_scr($url,$method,$params);

	//取得したJSONデータの出力(確認のため)
	echo $data[0];

2-3デモを確認する

プログラムを起動すると、Twitterにリクエストを送り、その返り値としてJSONデータを取得することができますね。それをブラウザに出力します。デモを確認したい場合は次のページにアクセスして下さい。

デモを見る

3取得できるJSONデータ

それでは、取得したJSONデータを見ていきましょう。これまでの「ホームタイムライン」「ユーザータイムライン」「メンションタイムライン」と内容は変わりません。1点だけ、今回新しく登場した[include_user_entities]というパラメータがどの部分に影響を及ぼすのかを意識しておいて下さいね。

3-1つぶやきのサンプル

アクセストークンの主は@SyncerJPで、取り上げるのが次のつぶやきです。リツイートされていることを確認して下さい。

3-2JSONデータの解説

下記がJSONデータの内、上記サンプルの箇所を取り上げたものです。ユーザーオブジェクト内のエンティティが、[include_user_entities]で除外できるデータです。

4つぶやきを出力する

この章では、JSONデータを取り扱って、「リツイーツ・オブ・ミー(リツイートされたつぶやき)」の一覧を出力していきます。

4-1[entities]の処理方法

「Twitter APIの使い方」を読んできた人は、この説明にも飽きてきたかもしれません。JSON内のつぶやきデータ("text": "〜")は、リンクタグが付いていないプレーンテキストになっています。リンクを反映するにはエンティティオブジェクトを利用するんでしたね。

具体的な処理方法については、過去記事の「ホームタイムラインを取得する」で解説し、処理用の関数ライブラリ(twoh10_en_scr)も作成しています。この後利用するので、まだの人は下記から入手して下さい。

[twoh10_en_scr()]をダウンロードする

4-2つぶやきの整形処理

用意ができたら、早速、ブラウザに出力する処理を記述していきましょう。といっても、過去に取り扱ってきた「つぶやきオブジェクト」と構造が変わらないので、今までのプログラムをそのまま利用することが可能です。

なお、今回はリツイートされたつぶやきのリストなので、27〜28行目に、「リツイートされた回数」を赤文字で表示する処理を加えてみました。

  //ライブラリ[twoh10_en_scr()]の読み込み
  require_once './twoh10_en_scr.php';

  //取得したJSONデータ[$data[0]]をオブジェクト形式に変換
  $object = json_decode($data[0]);
  
  //HTMLのヘッダーを出力
  echo '<meta name="charset" content="utf-8"><h1>リツイーツ・オブ・ミー</h1>';

  //つぶやきデータの配列をループ処理
  foreach($object as $item){
 
    //通常のつぶやきか、公式リツイートで取り扱うデータなどを振り分ける
    if(isset($item->retweeted_status) && !empty($item->retweeted_status)){
      $obj = $item->retweeted_status;
      $head = '[@'.$obj->user->screen_name.'さんがRT] ';
    }else{
      $obj = $item;
      $head = '';
    }

    //返信の場合、冒頭に元記事へのリンクを付ける
    if(isset($obj->in_reply_to_status_id) && !empty($obj->in_reply_to_status_id) && isset($obj->in_reply_to_screen_name) && !empty($obj->in_reply_to_screen_name)){
      $head .= ' [<a href="https://twitter.com/'.$item->in_reply_to_screen_name.'/status/'.$item->in_reply_to_status_id.'" target="_blank">@'.$item->in_reply_to_screen_name.'さんへの返信</a>] ';
    }

    //何回リツイートされたかを表示
	$head .= '<span style="color:#f00;">['.$obj->retweet_count.'RT]</span> ';

    //名前・スクリーンネーム・アイコン画像
    $name = $obj->user->name;
    $screen_name = $obj->user->screen_name;
    $icon = $obj->user->profile_image_url;

    //つぶやき・投稿日時(整形)
    $text = $head.twoh10_en_scr($obj->text,$obj->entities);
    $date = date('Y/m/d H:i:s',(strtotime($obj->created_at)));

    //位置情報を付けている場合、リンクを追加
    if(isset($obj->place->full_name) && !empty($obj->place->full_name)){
      //場所名
      $place_name = $obj->place->full_name;
 
      //座標情報があればGoogle Mapsへのリンクを付ける
      if(isset($obj->geo->coordinates[1]) && !empty($obj->geo->coordinates[1])){
        $place_name = '<a href="https://www.google.co.jp/maps/place/'.$obj->geo->coordinates[0].','.$obj->geo->coordinates[1].'" target="_blank">'.$place_name.'</a>';
      }
  
      //つぶやきに追加
      $text .= ' ['.$place_name.']';
    }
  
    //添付ファイルがある時はサムネイル画像を表示させる
    if(isset($obj->extended_entities->media) && !empty($obj->extended_entities->media)){
      $text .= '<br>';
      foreach($obj->extended_entities->media as $media){
        $text .= '<a href="'.$media->media_url.'" target="_blank"><img src="'.$media->media_url.':thumb" width="150" height="150"></a>';
      }
    }
 
  //出力
  echo '<img src="'.$icon.'" width="50" height="50"> @'.$screen_name.'('.$name.') '.$text.' ('.$date.')<hr>';

  }

4-3デモを確認する

出力すると、自分(アクセストークンの主)のつぶやきの中から、リツイートされたものだけが表示され、さらにそれぞれの「リツイートされた回数」も赤文字で確認することができます。デモを見たい人は下記ページよりどうぞ。

デモを見る

5完成版プログラムの配布

お疲れ様でした。この記事で作成した、「リツイーツ・オブ・ミー」の取得から出力までを取り扱ったサンプルプログラムを配布しているので、確認用にお使い下さい。

5-1リツイーツ・オブ・ミーの取得(PHP)

「リツイーツ・オブ・ミー」を取得、出力するプログラム(PHP)です。単体動作版と、外部ライブラリ利用版を用意しているので、お好きな方をダウンロードして下さい。

単体動作版をダウンロードする

外部ライブラリ利用版をダウンロードする

5-2関数ライブラリ:twoh10_en_scr()

「外部ライブラリ利用版」に必要です。プレーンテキストのつぶやきデータを、[entities]を利用してリッチテキストに変換する関数ライブラリです。過去記事の「ホームタイムラインを取得する」で、仕組みと使い方を解説しています。

[twoh10_en_scr()]をダウンロードする

5-3関数ライブラリ:twoh10_scr()

「外部ライブラリ利用版」に必要です。Twitter APIで必要なOAuth1.0認証を処理し、「JSONデータ」と「レスポンスヘッダー」の情報を返却する関数ライブラリです。過去記事の「OAUth認証用のライブラリを作ろう」で仕組みと使い方を解説しています。

[twoh10_scr()]をダウンロードする

6今回のまとめ

いかがでしたか?連載を順番に読み進めてきた人にとっては、今までの応用、というよりほぼ今まで通りの内容だったので、難しいことはなかったと思います。今回で「つぶやきリスト」を取得、整形して出力するタイプのリクエストは終了です。次回からは、他の様々なリクエストを見ていきましょう。それでは!