【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

最後に

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

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

関連記事

WordPressサイトのSSL対応(HTTPS化)手順のまとめ【さくらサーバー】

先週頃にこのサイトをSSL対応しましたのでその流れについてまとめておき

【Google Charts】動的にグラフを更新する方法

はじめに Webサイト上でグラフを描こうと思った場合、いくつかのJa

体重変化量計算シミュレータ【ダイエット/肥満】

ツール本体 入力 カロリー入力 1日の余剰摂取/消費カロリー

おサイフケータイ対応ストレージ32GBのSIMフリースマホまとめ【2017年秋版】

はじめに SIMフリーの格安スマホのおサイフケータイ機能付きのもので

リクルート期間限定ポイントの有効な使い道

はじめに  先日クレジットカードの見直し活動の一環でポイント還元率の

初心者がお金を貯めるための節約・財テク手法まとめ【ポイント還元・投資・税金対策】

はじめに  最近なるべく節約しようと思い、お金周りに関して色々調べて

動画講座を効率的にキャプチャして復習する方法

はじめに  最近、動画媒体の講座などをたまに視聴しています。独学だと

→もっと見る

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