サイトの管理人やマーケティングの仕事をしている人は、
「世間はどの様な事に関心があるのか」調べる為、TwitterやFacebook等のSNSサービス、
その他にGoogleトレンドのサービスを使って世の中の関心を調査する機会も多い思います。
今回はLaravelのCollectionメソッドを使って、
Googleトレンドの急上昇ワードを取得する方法を説明します。
( *Laravel以外で もLumen、ComposerでIlluminateのパッケージを導入すれば素のPHPでも利用可能です )
GoogleトレンドAPI
Googleトレンドの急上昇ワードはAPIが公開されており、
以下のURLを叩くとXML形式で取得が出来るようになっています。
# 日本のGoogle急上昇ワードが取得出来るURL
http://www.google.co.jp/trends/hottrends/atom/hourly?pn=p4
取得コード
// googleトレンド急上昇ワードを取得
var_dump( getGoogleTrends() );
// google急上昇ワードを取得する関数
public function getGoogleTrends()
{
// Google Trend用のXMLファイル *日本用
$url = 'http://www.google.co.jp/trends/hottrends/atom/hourly?pn=p4';
// XMLの取得
$xml = simplexml_load_file($url);
// xmlをオブジェクトに変換
// * &文字を変換
$data = simplexml_load_string(str_replace(["&", "&"], ["&", "&"], $xml->entry->content));
return collect($data)
->flatten() //必要のないキーの削除
->map(function($item) {
// jsonに一度エンコードしたオブジェクトを配列に変換
return json_decode(json_encode($item->span), true);
})
->map(function($item) {
// link用のURLを発行する無名関数
$link = function($word) {
return "http://www.google.co.jp/trends/explore#q={$word}&date=now+7-d&geo=JP";
};
// リンク用のURLを配列に追加
return array_add($item, 'url' , $link($item['a'])
);
});
}
上記の関数は、以下の6ステップで構成されています
- googleからXMLを取得
- XMLをPHPのオブジェクト用に変換
- collectionを使い不要なキーの削除
- オブジェクトを配列に変換
- Googleトレンドのリンク用のURLを生成
- 発行
素のXMLでは加工し辛いので、配列に加工・発行しています。
JSON形式で出力したい場合は returnの最後の部分を
" ->toJSON() "にすればjson形式に変換出来ます。
また、変数URLの部分を配列にし、関数の引数で国を割り当てれば
日本以外の国のデータも取得可能。
Laravel Collectionのドキュメント
Summary
今回のコードは
このサイトの管理システム部分で使っているコードに少し変更を加えたものです。
Laravel ( illuminate ) のCollectionを使うと複雑な配列などの加工も
綺麗に行えるので、ぜひ×2参考にしてください。