LaravelでGoogleトレンドを取得する【PHP】



サイトの管理人やマーケティングの仕事をしている人は、
世間はどの様な事に関心があるのか」調べる為、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ステップで構成されています

  1. googleからXMLを取得
  2. XMLをPHPのオブジェクト用に変換
  3. collectionを使い不要なキーの削除
  4. オブジェクトを配列に変換
  5. Googleトレンドのリンク用のURLを生成
  6. 発行


素のXMLでは加工し辛いので、配列に加工・発行しています。

JSON形式で出力したい場合は returnの最後の部分を
" ->toJSON() "にすればjson形式に変換出来ます。

また、変数URLの部分を配列にし、関数の引数で国を割り当てれば
日本以外の国のデータも取得可能。

Laravel Collectionのドキュメント
 

Summary 

今回のコードは
このサイトの管理システム部分で使っているコードに少し変更を加えたものです。

Laravel ( illuminate ) のCollectionを使うと複雑な配列などの加工も
綺麗に行えるので、ぜひ×2参考にしてください。

 

この記事のカテゴリ
プログラミング

この記事に付けられているタグ



その他の運営サービス

最新の記事