Як надсилати публікації Hugo до Bing IndexNow API
Наступний скрипт можна використовувати для автоматичного визначення 50 найновіших публікацій та надсилання їх до Bing IndexNow API.
Він залежить від: а) попереднього запуску hugo -F (збірки) та б) того, що файли в каталозі public мають такий формат імені:
example_post_path.txt
public/2019/12/26/how-to-remove-all-event-listeners-from-a-dom-element-in-javascript/index.htmlТакож переконайтеся, що ви створили static/BING_INDEXNOW_API_KEY.txt із вашим ключем Bing IndexNow API як вмістом. Це необхідно для автентифікації запитів до Bing.
Переконайтеся, що ви змінили параметри на початку скрипта (# Конфігурація) відповідно до вашого налаштування.
bing_indexnow_submit.py
#!/usr/bin/env python3
import os
import requests
from datetime import datetime
# Конфігурація
base_url = 'https://mydomain.com'
public_dir = 'public'
indexnow_api_url = 'https://www.bing.com/indexnow'
api_key = 'YOUR_BING_INDEXNOW_API_KEY' # Замініть вашим ключем IndexNow API
def get_recent_posts(public_dir, limit=50):
post_dates = []
for root, dirs, files in os.walk(public_dir):
for file in files:
if file.endswith('.html'):
# Витягніть дату зі структури каталогів
parts = root.split(os.sep)
print(parts)
if len(parts) > 2:
try:
date_str = '/'.join(parts[-4:-1])
post_date = datetime.strptime(date_str, '%Y/%m/%d')
post_dates.append((post_date, os.path.join(root, file)))
except ValueError as ex:
continue
# Сортуйте публікації за датою у порядку спадання та візьміть 'limit' найновіших публікацій
post_dates.sort(reverse=True, key=lambda x: x[0])
recent_posts = post_dates[:limit]
return recent_posts
def submit_to_indexnow(urls, api_key):
payload = {
'host': 'techoverflow.net',
'key': api_key,
'urlList': '\n'.join(urls),
}
response = requests.post(indexnow_api_url, data=payload)
if response.status_code == 200:
print("Успішно надіслано URL-адреси до Bing IndexNow API")
else:
print(f"Не вдалося надіслати URL-адреси: {response.status_code} {response.text}")
def main():
recent_posts = get_recent_posts(public_dir)
urls = [f"{base_url}/{os.path.relpath(file_path, public_dir).replace(os.sep, '/')}" for _, file_path in recent_posts]
if urls:
print("Надсилання:")
for url in urls:
print(" ", url)
submit_to_indexnow(urls, api_key)
if __name__ == '__main__':
main()Дивіться схожі статті за категоріями:
Hugo
Якщо ця стаття допомогла вам, будь ласка, подумайте про те, щоб купити мені каву або зробити пожертву через PayPal на підтримку досліджень та публікації нових статей на TechOverflow