【TwitterOauth】特定のつぶやきを取得してリツイート数順やランダム順にする【PHP】

公開日: : 最終更新日:2014/08/14 PHP, Twitter

スポンサーリンク

TwitterOauthを利用して特定のワードをつぶやいたデータを取得してそれをリツイート順なりに並び替えます。

つぶやき取得ソース

まずはつぶやきを取得するたたき台を紹介します。詳細はこちらの記事を参考にしてください。

<?php
//date関数を使う場合(設定していないとき書く)
date_default_timezone_set('Asia/Tokyo');
//twitteroauth.phpの読み込み
require_once dirname(__FILE__) . "/twitteroauth/twitteroauth.php";

// 「Consumer key」値
$ck = "**********";
// 「Consumer secret」値
$cs = "**********";
// 「Access Token」値
$at = "**********";
// 「Access Token Secret」値
$ats = "**********";


$to = new TwitterOAuth($ck, $cs, $at, $ats);

//検索ワード配列
$keyword_list = array("ジバニャン");
//最大検索数(100が最大値。デフォルトの15に加算される様子)
$countmax = 100;

//Twitterで検索するワード
//複数の場合はORかANDを使う
//「ポケモン OR パズドラ」のような形になればいい
$key = "";
$size = count($keyword_list);
for ($i = 0; $i < $size; $i++) {
    $keyword = $keyword_list[$i];
    $key .= $keyword;
    if ($i < $size - 1) {
        $key .= " AND ";
    }
}

//オプション設定
//countは最大検索数
$options = array(
    'q' => $key,
    'count' => $countmax, 
    'lang' => 'ja', 
    'result_type' => 'mixed'
    );

//検索
$json = $to->OAuthRequest(
        'https://api.twitter.com/1.1/search/tweets.json', 'GET', $options
);
$jset = json_decode($json, true);

//リツイートの多い順
function retweetsort($a, $b) {
    if ($a['retweet_count'] > $b['retweet_count']) {
        return false;
    }
    return true;
}
//お気に入り順
function favoritesort($a, $b) {
    if ($a['favorite_count'] > $b['favorite_count']) {
        return false;
    }
    return true;
}
//最新順
function timesort($a, $b) {
    if ($a['created_at'] > $b['created_at']) {
        return false;
    }
    return true;
}

//並び替え
//usort($jset['statuses'], "retweetsort");
//ランダム
//shuffle($jset['statuses']);


//tweetidを取得
foreach ($jset['statuses'] as $result) {
    //ローマ字の名前
    $screen_name = $result['user']['screen_name'];
    //ユーザーID(数字)
    $id = $result['user']['id'];
    //ユーザー名
    $name = $result['user']['name'];
    //ユーザーアイコン画像URL
    $link = $result['user']['profile_image_url'];
    //フォロワー数
    $follow = $result['user']['followers_count'];
    //フォロー数
    $follow = $result['user']['friends_count'];
    //ユーザーのお気に入り数
    $userfavoritecount = $result['user']['favourites_count'];    
    //お気に入り数
    $favoritecount = $result['favorite_count'];    
    //該当ツイート
    $content = $result['text'];
    //リツイート数
    $retweetcount = $result['retweet_count'];
    //更新日
    $updated = $result['created_at'];
    $time = date("Y-m-d H:i:s", strtotime($updated));

    //不明なものはvar_dumpで見ればいい
//    echo "<pre>";
//    var_dump($result);
//    echo "</pre>";
    
    echo "リツイート数:".$retweetcount." 時間:".$time."<br>";
    echo "<img src='" . $link . "''>" . " | " . $screen_name . " | " . $id . " | " . $name . " | " . $content . " | " . $time . " | リツイート数:" . $retweetcount . " | お気に入り数:".$favoritecount."<br>";
}
?>

この例では「ジバニャン」というワードについてつぶやき検索をかけています。
これをもとに並び替える方法について検討します。

並び替えたデータを取得する

並び替える方法としては元々取得するデータを並び替えられた状態でもってこれれば一番いいのですが、APIのドキュメント(https://dev.twitter.com/docs/api/1.1/get/search/tweets)によると、並び替えに関してはoptionのresult_type(途中の$optionsの配列の部分)をrecent変更すれば新着順はできるようですが、リツイート順などはちょっとわかりませんでした。(デフォルトではmixedになっており、人気順と新着順が混ざっているようでした)

result_type

* mixed: Include both popular and real time results in the response.
* recent: return only the most recent results in the response
* popular: return only the most popular results in the response.

「popular」が一番の人気順となっていてもっとも人気のツイート群のみを取得してくるので、取得件数は最大値よりも少なくなっている場合が多いと思います。その他の「recent」、「mixed」に関しては指定の件数だけ取得するようになっており、デフォルトでは「mixed」になっています。
単純に時間順で取得したい場合はここの値をrecentに変更します。

$options = array(
    'q' => $key,
    'count' => $countmax, 
    'lang' => 'ja', 
    'result_type' => 'recent' //←ここを変更する
    );

取得したデータをソートする

取得したつぶやきをソートするのが一番妥当なのではないかと思います。特定の要素を指定してソートさせたい場合にはusortを使います。

該当部分を抜粋すると次の部分になります

//リツイートの多い順
function retweetsort($a, $b) {
    if ($a['retweet_count'] > $b['retweet_count']) {
        return false;
    }
    return true;
}
//お気に入り順
function favoritesort($a, $b) {
    if ($a['favorite_count'] > $b['favorite_count']) {
        return false;
    }
    return true;
}
//最新順
function timesort($a, $b) {
    if ($a['created_at'] > $b['created_at']) {
        return false;
    }
    return true;
}

//並び替え
usort($jset['statuses'], "retweetsort");
//ランダム
//shuffle($jset['statuses']);

usortを使う場合引数としては並び替える配列と並び替えの方法を記述した関数を文字列としたものが入ります。なので今回に関しては、第一引数は「$jset['statuses']」となり、第2引数はここでは自分で書いた「"retweetsort"」や「"favoritesort"」、「"timesort"」という関数名の文字列となります。
このretweetsort関数ではリツイートの多い順にソートし、favoritesort関数はお気に入り数順、timesort関数では最新順にソートしています。

そして、次にランダム順ですがこれは単純に「shuffle」関数に配列を放り込むだけで実現できます。

デモ

$countmaxを10件にしてリツイート順にしてソートさせました。出力はリツイート数とお気に入り数とつぶやいた時間だけ表示させています。

リツイート数:1257 お気に入り数:645 時間:2014-07-19 10:40:49
リツイート数:1122 お気に入り数:493 時間:2014-07-18 12:01:38
リツイート数:527 お気に入り数:1038 時間:2014-07-22 09:35:55
リツイート数:520 お気に入り数:1055 時間:2014-07-22 14:28:04
リツイート数:200 お気に入り数:100 時間:2014-07-18 13:15:34
リツイート数:197 お気に入り数:483 時間:2014-07-19 01:09:46
リツイート数:185 お気に入り数:119 時間:2014-07-15 13:13:45
リツイート数:169 お気に入り数:168 時間:2014-07-20 09:41:56
リツイート数:136 お気に入り数:18 時間:2014-07-15 20:27:52
リツイート数:113 お気に入り数:200 時間:2014-07-19 11:14:39
リツイート数:102 お気に入り数:17 時間:2014-07-21 23:44:45
リツイート数:33 お気に入り数:11 時間:2014-07-21 00:02:29
リツイート数:30 お気に入り数:37 時間:2014-07-22 07:46:06
リツイート数:24 お気に入り数:0 時間:2014-07-22 17:19:00
リツイート数:24 お気に入り数:22 時間:2014-07-22 16:33:00
リツイート数:18 お気に入り数:10 時間:2014-07-22 11:36:10
リツイート数:8 お気に入り数:0 時間:2014-07-22 17:19:29
リツイート数:8 お気に入り数:0 時間:2014-07-22 17:19:57
リツイート数:1 お気に入り数:0 時間:2014-07-22 17:20:24
リツイート数:0 お気に入り数:0 時間:2014-07-22 17:19:24
リツイート数:0 お気に入り数:0 時間:2014-07-22 17:19:39
リツイート数:0 お気に入り数:0 時間:2014-07-22 17:19:44
リツイート数:0 お気に入り数:0 時間:2014-07-22 17:19:17
リツイート数:0 お気に入り数:0 時間:2014-07-22 17:20:37
リツイート数:0 お気に入り数:0 時間:2014-07-22 17:18:39

最後に

ソースはあくまで叩き台なので自由に関数化やクラス化して使ってください。

スポンサーリンク
Amazon
  • このエントリーをはてなブックマークに追加

関連記事

【PHP】file_get_contentsでリンク元などのヘッダ情報を変更する

file_get_contentsで他サイトの情報を読み取る際などでリンク元を明記したい場合は以下の

記事を読む

Twitterアカウントのアクセストークンを取得する方法

TwitterでBotなどを作るときアクセストークンとコンシューマキーが必要になります。 ざっくり

記事を読む

任意URLのTweetボタンを複数設置する

TwitterのTweetボタンをWebサイトやブログに複数設置する方法です。複数設置するということ

記事を読む

【PHP】Twitterのツイート数やはてぶ数を取得する

指定URLのTweet数の取得 Twitterでツイート数を取得するには指定のURLにアクセスする

記事を読む

【jQuery/javascript】Tweetボタンを動的に設置する

Twitterボタンをブログやサイトに設置するとき読み込みに時間がかかってしまって困るといったことや

記事を読む

【PHP】dateで指定日前の日付を出力する

指定日前の日付の取得方法 date_default_timezone_set('Asia/

記事を読む

TwitterAPIの仕様変更【2014年1月】

TwitterAPIの仕様が2014/1/15未明から変更されたようで一部のJanetter

記事を読む

TwitterAPIでデベロッパー登録しようとすると携帯情報を追加しろと出る件について

TwitterAPIのデベロッパー登録ページ(https://dev.twitter.com)でアプ

記事を読む

【PostgreSQL】psql version 8.4, server version 9.5

PostgreSQLを使おうとしたところ下記のような警告が出てきました。 -bash-4.1$

記事を読む

【PHP】ミリ秒を取得することで制限時間を設けて処理をする

PHPで時間制限を設けてタイマーのような処理をするときの制限の付け方として、処理のはじめの時刻と処理

記事を読む

NVIDIA DIGITSをSupervisorを使って自動起動する

はじめに 先日Ubuntu14.04にDIGITS 5をGPUなしP

【2017年度】GeForce 1080 Ti搭載BTOパソコン比較

はじめに 最近ディープラーニング用にGPUのないPCにDIGITSを

Windows用のシンプルなストップウォッチソフト紹介

Windows(10)でも使える使いやすいKAZAMITimerという

MNISTをDIGITS 5のCPUのみで試す(GPUなし)

はじめに DIGITSを使えばGUI操作で簡単にディープラーニングが

Windowsユーザが初めてMacBookを購入したときの注意点や感想

最近12インチのMacBookを購入しました。今までWindowsしか

Redmine3.2をUbuntu14.04にインストールして躓いた所についてメモ

はじめに Ubuntu14.04 ServerにRedmine3.2

UWSCを使ったソフト自動立ち上げ【SoftEther VPN Server】

やりたいこと 最近SoftEtherという筑波大学発のベンチャー企業

→もっと見る

  • Author : ががんぼ
    プログラミングやWeb関係で気付いたことについてメモしていく予定。だいたいが備忘録ですが、自分でサンプルを作って動かしてみたりしています。
PAGE TOP ↑