3

ウェブサイトがモバイル フレンドリーかどうかをチェックするシェル/Python スクリプトを書きたかったのです。ブラウザを使用すると、これは次の場所にアクセスすることで簡単に実行できます-

https://www.google.com/webmasters/tools/mobile-friendly/?url=<website_addr>

例えば ​​-

https://www.google.com/webmasters/tools/mobile-friendly/?url=http://facebook.com

curl, wget,コマンドを使用してコンテンツを取得しようとしましたlynxが、うまくいきませんでした。

どうすればそうできますか?

4

5 に答える 5

5

サンチット、

URL を取得するには、リクエストライブラリを参照することをお勧めします。また、すでに述べたように (私はこの API の経験がありません)、代わりに「 https://www.googleapis.com/pagespeedonline/v3beta1/mobileReady?url=http://facebook.com 」を呼び出す必要があります。あなたが投稿したURLの。

次に例を示します。

import requests

r = requests.get('https://www.googleapis.com/pagespeedonline/v3beta1/mobileReady?url=http://facebook.com')

data = r.json()

これにより、投稿した Web サイトが使用するすべてのデータを含む json ファイルが得られます。

于 2015-02-19T21:19:11.973 に答える
2

このページは、まだ公開されていない Google PageSpeed API への JSONP リクエストを使用しています。Google はPageSpeeds Insights API v2を公開していますが、ページは v3beta1 エンドポイントを使用しているようです。

たとえば、ページに移動しhttps://www.google.com/webmasters/tools/mobile-friendly/?url=http://facebook.comてブラウザの開発者ツールのネットワーク タブを見ると、次の要求が表示されます。

https://www.googleapis.com/pagespeedonline/v3beta1/mobileReady?key=AIzaSyDkEX-f1JNLQLC164SZaobALqFv4PHV-kA&screenshot=true&snapshots=true&locale=en_US&url=http%3A%2F%2Ffacebook.com%2F&strategy=mobile&filter_third_party_resources=false&callback=_callbacks_._Ce2bYp0wchLY

このパラメーターは、ページに渡されurlたパラメーターから直接取得されます。このパラメーターは、JSONP 要求がコールバック ラッパーを提供するために存在します。urlcallback

Google がそこで使用されている API キーを交換する可能性がありますが、当面は Python コードを使用して、サイトのモバイル フレンドリーを検証できます。

import requests

url_to_test = 'http://facebook.com'

params = {
    'key': 'AIzaSyDkEX-f1JNLQLC164SZaobALqFv4PHV-kA',
    'url': url_to_test,
}
api_url = 'https://www.googleapis.com/pagespeedonline/v3beta1/mobileReady'
response = requests.get(api_url, params=params)
data = response.json()
passed = all(rule['pass'] for rule in data['ruleGroups'].values())

print('{} is {}'.format(url_to_test, 'mobile friendly' if passed else 'not mobile friendly'))
于 2015-02-20T08:16:25.267 に答える
1

@TimberlakeCoding と @MartijnPieters の助けを借りて、自分で解決しました。ここにあります-

$ wget -q -O - https://www.googleapis.com/pagespeedonline/v3beta1/mobileReady?url=http://facebo‌​ok.com | grep "\"pass\": true" 

終了ステータス コードが 0 の場合、それはウェブサイトがモバイル フレンドリーであることを意味します。

それが誰かを助けることを願っています! ありがとう

于 2015-02-19T23:43:01.577 に答える
0

複数のネットワーク リクエストを Google Mobile-Friendly Test API に送信し、「pass」およびその他のフィールドを mysql db に保存する、この同様のタスク用の簡単な Python スクリプトを作成しました。非常に高速で効率的です。

# download mysql connector for python 
# from: https://dev.mysql.com/downloads/connector/odbc/
# select your Platform from drop-down and install it

    from twisted.internet import reactor, threads
    from urlparse import urlparse
    import httplib
    import itertools
    import json
    import mysql.connector

    GOOGLE_API_KEY = 'YOUR GOOGLE API KEY HERE'

    db = mysql.connector.connect(user='root', password='root',
                                  host='127.0.0.1',
                                  database='mobiletracker', autocommit=True)


    cursor = db.cursor()

    concurrent = 10
    finished=itertools.count(1)
    reactor.suggestThreadPoolSize(concurrent)

    def getData(ourl):
        googleapiUrl = 'https://www.googleapis.com/pagespeedonline/v3beta1/mobileReady?url=' + ourl + '&key=' + GOOGLE_API_KEY
        print googleapiUrl
        url = urlparse(googleapiUrl)
        conn = httplib.HTTPSConnection(url.netloc)   
        conn.request("GET", url.path + '?' + url.query)
        res = conn.getresponse()
        return res.read()

    def processResponse(response,url):
        jsonData = json.loads(response)
        try:
          score = str(jsonData['ruleGroups']['USABILITY']['score'])
        except Exception, e:
          score = '0'
        try:
          pass_ = jsonData['ruleGroups']['USABILITY']['pass']  #Boolean
          if pass_:
            pass_ = '1'
          else:
            pass_ = '0'
        except Exception, e:
          pass_ = '0'
        try:
          cms = str(jsonData['pageStats']['cms'])
        except Exception, e:
          cms = ''

        cursor.execute("SELECT id FROM mobile WHERE url='" + url + "'")
        result = cursor.fetchone()
        try:
          id_ = str(result[0])
          query = "UPDATE mobile SET score='" + score + "', pass='" + pass_ + "', cms='" + cms + "' WHERE id = '" + id_ + "'"
          print query
          cursor.execute(query)
        except Exception, e:
          query = "INSERT INTO mobile SET url='" + url + "', score='" + score + "', pass='" + pass_ + "', cms='" + cms + "'"
          print query
          cursor.execute(query)
        processedOne()

    def processError(error,url):
        print "error", url, error
        processedOne()

    def processedOne():
        if finished.next()==added:
            reactor.stop()

    def addTask(url):
        req = threads.deferToThread(getData, url)
        req.addCallback(processResponse, url)
        req.addErrback(processError, url)   

    added=0
    for url in open('urllist.csv'):
        added+=1
        addTask(url.strip())

    try:
        reactor.run()
    except KeyboardInterrupt:
        reactor.stop()

https://github.com/abm-adnan/multiple-requestsでも入手可能

于 2015-05-05T05:49:28.853 に答える