Blog の Mobile 用 page を AMP にしたのですが、
各ページ個別のエラーが出ます。

sitemap.xml に記載されている URL に対して、
validation を実施するようにしたかったため、調べたところ、
Cloudflare - Wikipedia作成した。
Validation API についての記事を見つけましたので、python スクリプトを書いて、使ってみました。
使って見た結果を記載します。


前提

  • python version
    python -V
    -----------------------
    Python 2.7.10
    -----------------------
    

参考

An AMP validator you can cURL

使い方について

API の URL は https://amp.cloudflare.com/q/ です。
検証したい URL が、https://www.monotalk.xyz であるとしたら、
https://amp.cloudflare.com/q/www.monotalk.xyzリクエストを送信すると、
妥当性の検証結果を JSON 形式で返してくれます。
上記URLに リクエスト を投げた際の、response は以下の通りです。
{"version":"1498686280171","source":"http://www.monotalk.xyz","valid":true}


python スクリプト

sitemap.xml に記載されている全url に対して、
検証リクエストを送信します。
SITEMAP_URL変更してもらえれば、どのサイトでも動作するかと思います。
200記事URLを送信する分には、リクエスト制限等はかかりませんでしたが、
あまりに大量に送信するのはNGかと思います。

  • 依存ライブラリのインストール
    libxml と、BeautifulSoup4を使います。

    pip install lxml  
    pip install beautifulsoup4
    

  • validate_amp.py

    # -*- coding: utf-8 -
    
    import requests
    from simplejson import JSONDecodeError
    from bs4 import BeautifulSoup
    
    SITEMAP_URL = "https://www.monotalk.xyz/sitemap.xml"
    VALIDATE_API_URL = "https://amp.cloudflare.com/q/"
    
    
    def execute():
        soup = BeautifulSoup(requests.get(SITEMAP_URL).text, "xml")
        for loc in soup.find_all('loc'):
            url = VALIDATE_API_URL + loc.get_text().replace('https://', '').replace('http://', '')
            result = None
            try:
                json_o = requests.get(url).json()
                if True is json_o.get("valid"):
                    result = "OK"
                else:
                    result = "NG"
            except JSONDecodeError:
                result = "ERROR"
    
            print("URL:" + loc.get_text() + "|||RESULT:" + result)
    
    
    if __name__ == '__main__':
        execute()
    

  • OUTPUT 以下のような出力をコンソールに行います。
    RESULT:OK検証OK、 RESULT:NG検証NG、 対象のURLがInternal Server ERROR となった際に、JSONDecodeError が発生するため、 RESULT:ERRORしています。

    URL:https://www.monotalk.xyz/blog/execute_redpen_on_wercker/|||RESULT:NG
    URL:https://www.monotalk.xyz/blog/WARNING-Since-version-6.0.0-Wicket-uses-JavaScript-event-onblur-on-wicket/|||RESULT:OK
    URL:https://www.monotalk.xyz/blog/How-to-redirect-to-external-site-on-Wicket/|||RESULT:NG
    URL:https://www.monotalk.xyz/blog/pip-install-mock-on-el-capitan/|||RESULT:NG
    

実際これで、幾つかのページで NG が出て、
考慮漏れや、文法ミスが見つかりました。

以上です。

コメント