Google モバイルフレンドリーテスト API を python から実行する


Google Search Console 上の左メニュー の、[検索トラフィック]>[モバイルユーザビリティ] から モバイルフレンドリーテストが実施できます。モバイルフレンドリーテスト用の WEB API も用意されており、定期的に実施する目的で、python で Web API を叩くスクリプトを作成してみました。
作ったものについて記載します。


作成したスクリプトについて

作成したスクリプトは以下2つになります。

  1. sitemap.xml から、チェックする対象の url の一覧を取得する

  2. 取得した url に対して、URL Testing Tools API を使って、モバイルフレンドリーテストを実行する


1. sitemap.xml から、チェックする対象の url の一覧を取得する

以下の python スクリプトを作成して、sitemap.xml から、url のみを抽出し、
console に出力するようにしました。

  • pip インストール
    実行には、requests と、beautifulsoup4 が必要になります。

    pip install requests
    pip install beautifulsoup4
    

  • get_url_from_sitemap.py

    # -*- coding: utf-8 -
    
    import requests
    import argparse
    from bs4 import BeautifulSoup
    
    
    def main():
        parser = argparse.ArgumentParser(description="description goes here")
        parser.add_argument(
            "-url", type=str, help="help text goes here. This option is required", required=True)
        command_arguments = parser.parse_args()
        soup = BeautifulSoup(requests.get(command_arguments.url).text, "xml")
        for loc in soup.find_all('loc'):
            print(loc.get_text())
    
    if __name__ == '__main__':
        main()
    

  • 実行コマンド
    以下、コマンド実行で、sitemap.xml に記載されている一覧が、プロンプトに出力されます。

    python get_url_from_sitemap.py -url https://www.monotalk.xyz/sitemap.xml
    

  • エラーになっているURLの一覧を取得したい場合
    Google Search Console の、モバイルユーザビリティのページから、
    CSVダウンロードできますので、エラーとなったURLのみ取得する場合は、それでいいかと思います。

2. 取得した url に対して、URL Testing Tools API を使って、モバイルフレンドリーテストを実行する

以下の python スクリプトを作成して、URL Testing Tools API を使用して、
モバイルフレンドリーテストを実行するようにしました。

  • API キーの発行
    実行には、Google Developer Console から API キーの発行が必要になります。
    API キーには、referer の設定を行ってください。

  • pip インストール
    実行には、requests が必要になります。

    pip install requests
    

  • validate_mobile_friendly.py

    # -*- coding: utf-8 -
    import requests
    import argparse
    
    API_URL = "https://searchconsole.googleapis.com/v1/urlTestingTools/mobileFriendlyTest:run"
    
    
    def main():
    
        parser = argparse.ArgumentParser(description="description goes here")
        parser.add_argument(
            "-key", type=str, help="help text goes here. This option is required", required=True)
        parser.add_argument(
            "-url", type=str, help="help text goes here. This option is required", required=True)
        parser.add_argument(
            "-referer", type=str, help="help text goes here. This option is optional", required=False)
        command_arguments = parser.parse_args()
        payload = {'url': command_arguments.url}
        headers = {'Content-Type': 'application/json'}
        if (command_arguments.referer):
            headers.update({'referer': command_arguments.referer})
        response = requests.post(
            API_URL + "?key=" + command_arguments.key, params=payload, headers=headers)
    
        print("URL=" + command_arguments.url)
        print("RESULT=" + response.text)
    
    
    if __name__ == '__main__':
        main()
    

  • 実行コマンド
    -key には、APIキーを、-referer には、APIキーに設定した リファラーを、-url には、チェック対象の URL を設定してください。

    python validate_mobile_friendly.py -key api_key -referer your_referer -url your_url
    

  • アウトプット
    以下のようなアウトプットが出力されます。

    URL=https://www.monotalk.xyz/blog/jackson-covertvalue-exclude-fields-no-annotation/
    RESULT={
      "testStatus": {
        "status": "COMPLETE"
      },
      "mobileFriendliness": "MOBILE_FRIENDLY",
      "resourceIssues": [
        {
          "blockedResource": {
            "url": "https://pagead2.googlesyndication.com/pagead/js/adsbygoogle.js"
          }
        }
      ]
    }
    
    テスト結果 NG の場合は、mobileFriendliness の戻り値が、NOT_MOBILE_FRIENDLY になります。


URL Testing Tools API の使用上限について

Usage Limits  |  URL Testing Tools API (Experimental)  |  Google Developers に記載がありますが、API の 使用上限は 1 QPS (1 秒間に 1 回) です。

Per-user limit (calls made by the same user): 1 QPS Per-project limit (calls made using the same Developer Console key): 1 QPS

実際、実行してみたところ、実質この制限よりも若干厳しいように思いました。API には、Experimental と記載があり、そのため厳しいのかもしれません。
実行間隔として、1秒以上(5秒、10秒とか) の間隔を空けて実行することをお勧めします。

スクリプトは当初 for loop で実装していましたが、 for loop で連続実行は、使用制限に引っかかり厳しかったので、URL 1件指定で使うようにしました。
当初作成したスクリプトは、URL Testing Tools API (Beta) を実行するpython スクリプト に UP しましたので、必要であればご確認ください。

以上です。

コメント

カテゴリー