IndexNow経由で検索エンジンへIndex登録依頼を送る

· ·

概要 🔗

サービスリリース当初は bing と yandex の 2 検索エンジンのみですが、新規 URL の Index 登録依頼を API 経由でリクエスト出来るようになったため、そのエンドポイントへ投げるプログラムを簡単に書いた

github 🔗

ソースコード

リクエスト 🔗

1
python main.py --host www.example.com --urls https://www.example.com/page1/ https://www.example.com/page2/ ...

ツリー構造 🔗

今回は単純に config.ini ファイルと main.py の 2 ファイルのみで構成

1
2
├── config.ini
└── main.py

config.ini 🔗

設定ファイル

  • 検索エンジンの host リスト
  • API キー
 1
 2
 3
 4
 5
 6
 7
 8
 9
10
[DEFAULT]
SEARCH_ENGINE_LIST = ["www.bing.com","yandex.com"]

[WEBSITE1]
DOMAIN = www.example.com
API_KEY = ***

[WEBSITE2]
DOMAIN = www2.example.com
API_KEY = ***

API キーが一つで足りるウェブサイトなどは、そのあたりの設定を変更してもらえれば良いかなと思います。

main.py 🔗

IndexNow へリクエストを送るためのプログラムコード。コードはもうちょっとスマートに書けるような気はしますが。

 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
import configparser, requests, json, argparse

# load config settings
config_ini = configparser.ConfigParser()
config_ini.read('config.ini', encoding='utf-8')

SEARCH_ENGINE_LIST = json.loads(config_ini.get('DEFAULT', 'SEARCH_ENGINE_LIST'))
DOMAIN = [config_ini['WEBSITE1']['DOMAIN'], config_ini['WEBSITE2']['DOMAIN']]
API_KEY = [config_ini['WEBSITE1']['API_KEY'], config_ini['WEBSITE2']['API_KEY']]

parser = argparse.ArgumentParser()
parser.add_argument('--host')
parser.add_argument('--urls', nargs='*')
args = parser.parse_args()

host = args.host
urls = args.urls

n = 0 if host == DOMAIN[0] else 1
api = API_KEY[n]
for engine in SEARCH_ENGINE_LIST:
    ENDPOINT = f"https://{engine}/indexnow"
    requests.post(
        ENDPOINT, data=json.dumps({
            "host" : host,
            "key" : api,
            "keyLocation" : f"https://{host}/{api}.txt",
            "urlList" : urls
        })
    )
comments powered by Disqus