curl을 이용해 복수의 URL을 해석【PageSpeed ​​Insights(페이지 스피드 인사이트)】

7005 단어 PageSpeedInsightscurl
모바일 퍼스트 인덱스, AMP, 구조화 데이터와 모바일 퍼스트인 시대가 오고 있습니다만, 공통되는 것이, 어떻게 모바일 유저에게 보다 좋은 체험을 받을 수 있을까 하는 것.

그 중에서도 Google과 같은 검색엔진은 휴대기기에서의 속도를 중시하고 있습니다. 이유로 모바일 단말은 PC 단말에 비해 회선 속도가 느려질 수 있기 때문입니다.
예를 들면, 마을의 중심부라면 4G나 LTE를 사용할 수 있는데 마을 밖으로 가면 3G밖에 사용할 수 없는 느낌입니다.

그러한 경위도 있어, Google이 제공하는 PageSpeed ​​Insights(페이지 속도 통계) 를 사용하고 있는 분은 많을까 생각합니다.

이런 식으로 데스크톱(PC)과 모바일에서의 페이지 속도가 100점 만점으로 표시됩니다.



점수를 함께 얻고 싶습니다.



그러나 PageSpeedInsights에서는 기본적으로 1개의 URL에 대해 스코어가 표시되는 형태로, 복수의 URL에는 대응하고 있지 않습니다.
뭐 확실히, 뉴스계의 사이트이면,
  • 톱 페이지
  • 카테고리 톱 페이지
  • 기사 상세 페이지

  • 의 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 기사 를 참고하게 했다.

    마지막으로



    위의 에러문에 대해서, 어떻게든 터미널상에서 file_get_contents를 이용할 수 없는지, 시행착오해 보았습니다만, 할 수 없었으므로, 또 시간이 있을 때에 생각해 보겠습니다.

    그래도 문제 해결이 좋았습니다.

    좋은 웹페이지 즐겨찾기