curlを用いて複数のURLを解析【PageSpeed Insights(ページスピードインサイト)】


モバイルファーストインデックス、AMP、構造化データとモバイルファーストな時代がやってきていますが、共通するのが、いかにモバイルユーザーによりよい体験をしてもらえるかということ。

その中でも、グーグルなどの検索エンジンはモバイル端末での速度を重視しています。理由として、モバイル端末はPC端末に比べると回線速度が遅くなることがあるからです。
例としては、町の中心部だと4GやLTEが使えるのに町外れに行くと3Gしか使えない感じです。

そういった経緯もあり、Googleが提供するPageSpeed Insights(ページスピードインサイト)を使っている方は多いかと思います。

こんな感じで、デスクトップ(PC)とモバイルでのページ速度が100点満点で表示されます。

スコアをまとめて取得したい。

しかし、PageSpeedInsightsでは、基本的に1個のURLに対してスコアが表示される形で、複数のURLには対応していません。
まぁ確かに、ニュース系のサイトであれば、

  1. トップページ
  2. カテゴリートップページ
  3. 記事詳細ページ

の3パターンのスピードをチェックすればほぼ、サイトは網羅できます。

ですが、

  • 全ページローラー作戦的にページスピードのスコアを取得したい。
  • 複数ドメインでページスピードのスコアを取得したい。

といった時に、URLの数が10個や20個となると1つ1つ取得するのは大変面倒です。
そこで今回はAPIを利用してまとめて取得する方法を紹介します。

APIを利用して一括取得する方法

その1. PageSpeed Insights API の API キーを発行

Google Cloud PlatformにログインしてAPIキーを発行します。

その2. 解析したいURLを「url.txt」などとして作成しておく。

url.txt
http://www.yahoo.co.jp/
https://www.google.co.jp/
https://www.amazon.co.jp/
http://www.rakuten.co.jp/
http://ameblo.jp/
http://zozo.jp/

その3. PHPスクリプトを作成してAPIキーを入れる。

mobile.php
<?php
// APIキー
$key = "Your API KEY";
// mobile or desktop
$strategy = "mobile";
// URLリスト読み込み
$lines = file('url.txt', FILE_IGNORE_NEW_LINES);
// URLの分だけAPIリクエストして解析

foreach ($lines as $url) {
    $api = "https://www.googleapis.com/pagespeedonline/v2/runPagespeed?url=".$url."&strategy=".$strategy."&key=".$key;
    $ch = curl_init(); // 1. curl 初期化
    curl_setopt( $ch, CURLOPT_URL, $api ); // 2. curl オプションを設定
    curl_setopt( $ch, CURLOPT_RETURNTRANSFER, true );
    $json = curl_exec($ch); // 3. curl 実行してデータを得る
    curl_close($ch); // 4. curl 終了
    $data = json_decode($json);
    if ($data->responseCode == 200) {
        $score = $data->ruleGroups->SPEED->score;
    } else {
        $score = "error";
    }
    echo $url.",".$score."\n";
}

その4. ターミナルで実行する。

$ php mobile.php
http://www.yahoo.co.jp/,61
https://www.google.co.jp/,100
https://www.amazon.co.jp/,62
http://www.rakuten.co.jp/,75
http://ameblo.jp/,56
http://zozo.jp/,49

個人的にはamazon、楽天があれだけの情報量にもかかわらず、60点以上というのは、非常に高いのかなと思います。
あとgoogleのトップページは検索窓だけなので、やはり100点ですね笑

参考サイトについて

この記事を投稿する前までは、@ko31さんの記事のまま使わせてもらっていたのですが、ある時から、


Warning: file_get_contents(): SSL operation failed with code 1. OpenSSL Error messages:
error:14090086:SSL routines:SSL3_GET_SERVER_CERTIFICATE:certificate verify failed

と表示され、file_get_contentsにおいてエラーが発生してしまい使えなくなってしまったので、file_get_contentsの代替にcURLを使うという方法でコードを書き直したのが今回になります。

なので、ベースのコードである@ko31さんとcURLの記事を参考させてもらった@mach3ssさんには感謝です。

最後に

上のエラー文について、なんとかターミナル上でfile_get_contentsが利用できないか、試行錯誤してみたのですが、できなかったので、また時間がある時に考えてみます。

それでもトラブル解決できてよかったです。