Blog の Mobile 用 page を AMP にしたのですが、
各ページ個別のエラーが出ます。
sitemap.xml に記載されている URL に対して、
validation を実施するようにしたかったため、調べたところ、
Cloudflare - Wikipediaが作成した。
Validation API についての記事を見つけましたので、python スクリプトを書いて、使ってみました。
使って見た結果を記載します。
前提
- python version
python -V ----------------------- Python 2.7.10 -----------------------
参考
使い方について
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 が出て、
考慮漏れや、文法ミスが見つかりました。
以上です。
コメント