Google網址收錄api Python示例

維護個人網站有一部分工作是讓搜索引擎快速收錄網頁內容,獲得自然搜索流量服務更多用戶。直接去 Google 等搜索引擎提交是一種方式,使用 API 直接提交是另外一種方式,當你一次想提交多個網址的時候,API 的方式更加方便。

1. 創建谷歌雲服務賬戶

Google index api 是和 google 雲平臺上管理的,這一步過程省略(網絡上有很多相關教程),設置成功後會下載一個 json 文件存到本地,文件裏面是一些密鑰信息,通過這個密鑰文件,才能獲得授權調用 Google 相關的 api

google cloud acount setting

2. 編寫 Python 程序調用 api

  • 準備環境,安裝依賴包

    1pip install --upgrade google-api-python-client oauth2client
    
  • 文件預覽

    1(.venv) ➜  google-api-python-client tree
    2.
    3├── google_batch.py
    4├── google_index.py
    5├── hugo-368210-30b9660ab8b3.json
    6├── readme.txt
    7└── urls.txt
    8
    90 directories, 5 files
    
    • google_batch.py 用於批量提交

      提交收錄一般爲URL_UPDATED,當然也可以刪除,有需要可查看對應的官方文檔。

      程序文件內容如下:

     1from oauth2client.service_account import ServiceAccountCredentials
     2from googleapiclient.discovery import build
     3from googleapiclient.http import BatchHttpRequest
     4import httplib2
     5
     6
     7with open("urls.txt") as f:
     8    new_urls = f.readlines()
     9
    10
    11JSON_KEY_FILE = "hugo-368210-30b9660ab8b3.json"
    12SCOPES = ["https://www.googleapis.com/auth/indexing"]
    13ENDPOINT = "https://indexing.googleapis.com/v3/urlNotifications:publish"
    14
    15# Authorize credentials
    16credentials = ServiceAccountCredentials.from_json_keyfile_name(
    17    JSON_KEY_FILE, scopes=SCOPES
    18)
    19http = credentials.authorize(httplib2.Http())
    20
    21# Build service
    22service = build("indexing", "v3", credentials=credentials)
    23
    24
    25def insert_event(request_id, response, exception):
    26    if exception is not None:
    27        print(exception)
    28    else:
    29        print(response)
    30
    31
    32batch = service.new_batch_http_request(callback=insert_event)
    33
    34# url updated
    35for url in new_urls:
    36    batch.add(
    37        service.urlNotifications().publish(body={"url": url, "type": "URL_UPDATED"})
    38    )
    39
    40batch.execute()
    
    • google_index.py 單個網址提交

      文件裏面的content部分就是你要提交的網址信息和操作類型。

      程序示例:

     1
     2from oauth2client.service_account import ServiceAccountCredentials
     3import httplib2
     4
     5SCOPES = ["https://www.googleapis.com/auth/indexing"]
     6ENDPOINT = "https://indexing.googleapis.com/v3/urlNotifications:publish"
     7
     8# service_account_file.json is the private key that you created for your service account.
     9JSON_KEY_FILE = "hugo-368210-30b9660ab8b3.json"
    10
    11credentials = ServiceAccountCredentials.from_json_keyfile_name(
    12    JSON_KEY_FILE, scopes=SCOPES
    13)
    14
    15http = credentials.authorize(httplib2.Http())
    16
    17# Define contents here as a JSON string.
    18# This example shows a simple update request.
    19# Other types of requests are described in the next step.
    20
    21content = """{
    22\"url\": \"http://mephisto.cc/zh-tw/tech/s2t/\",
    23\"type\": \"URL_UPDATED\"
    24}"""
    25
    26response, content = http.request(ENDPOINT, method="POST", body=content)
    27print("response:", response)
    28print("content:", content)
    
    • hugo-368210-30b9660ab8b3.json 密鑰文件

      這個是創建谷歌雲服務帳戶後下載到本地的,裏面有敏感信息,value 部分已經手動刪除了, 僅供參考。

      示例:

       1{
       2  "type": "service_account",
       3  "project_id": "",
       4  "private_key_id": "",
       5  "private_key": "",
       6  "client_email": "",
       7  "client_id": "",
       8  "auth_uri": "",
       9  "token_uri": "",
      10  "auth_provider_x509_cert_url": "",
      11  "client_x509_cert_url": ""
      12}
      
    • urls.txt 批量網址文件

      這個是我自己習慣的網址存放方式,一行一個網址,示例:

      1(.venv) ➜  google-api-python-client cat urls.txt
      2https://mephisto.cc//note/hero-chen/
      3https://mephisto.cc/zh-tw/note/hero-chen/
      

      上面就是一個文章的簡體地址和繁體地址,單文件更新的時候不需要這個文件,也可以改成自己需要組織格式,懂 python 的自己修改下 google_batch.py文件即可。

3. 多網址提交實際操作示例

  • 修改urls.txt,這一步可以自己通過程序自動生成

  • 運行程序

    1python google_batch.py
    
    • 示例
    1(.venv) ➜  google-api-python-client python google_batch.py
    2{'urlNotificationMetadata': {'url': 'https://mephisto.cc/tech/google-index-api-python/\n', 'latestUpdate': {'url': 'https://mephisto.cc/tech/google-index-api-python/\n', 'type': 'URL_UPDATED', 'notifyTime': '2023-04-10T01:48:20.759700010Z'}}}
    3{'urlNotificationMetadata': {'url': 'https://mephisto.cc/zh-tw/tech/google-index-api-python/\n', 'latestUpdate': {'url': 'https://mephisto.cc/zh-tw/tech/google-index-api-python/\n', 'type': 'URL_UPDATED', 'notifyTime': '2023-04-10T01:48:20.759685330Z'}}}
    

單文件提交就不操作了,當你提交收錄請求後,Google 會逐步處理,比百度快多了。

最後修改於: Monday, August 28, 2023

相關文章:

翻譯: