当前位置:论坛首页 > Linux面板 > 讨论

用宝塔面板创建bing搜索的indexnow

发表在 Linux面板2026-1-20 16:42 [复制链接] 0 46

本帖最后由 68087908 于 2026-1-22 15:21 编辑

一、安装Python项目依赖“requests”,命令如下:
  1. pip3 install requests
复制代码
演示如下:
360截图20260120162453479.png


二、创建Python文件到目录“/www/wwwroot/IndexNow”,并取名为“IndexNow.py”,文件内容如下

文件中21、23、24行,改为自己的,

  1. import requests
  2. import xml.etree.ElementTree as ET
  3. from datetime import datetime
  4. import time
  5. import logging
  6. from requests.adapters import HTTPAdapter
  7. from urllib3.util.retry import Retry

  8. # 配置日志
  9. logging.basicConfig(
  10.     level=logging.INFO,
  11.     format='%(asctime)s - %(levelname)s - %(message)s',
  12.     handlers=[
  13.         logging.FileHandler('indexnow.log'),
  14.         logging.StreamHandler()
  15.     ]
  16. )

  17. # 配置参数
  18. SITEMAP_URL = "你自己的SiteMap文件.xml(不带序号的那个索引文件)"
  19. INDEXNOW_API = "https://api.indexnow.org/indexnow"
  20. HOST = "你自己的网站域名"
  21. KEY = "你自己的IndexNow API Key"
  22. KEY_LOCATION = f"https://{HOST}/{KEY}.txt"

  23. def create_session_with_retries():
  24.     """创建带重试机制的session"""
  25.     session = requests.Session()
  26.    
  27.     # 配置重试策略
  28.     retry_strategy = Retry(
  29.         total=3,
  30.         backoff_factor=1,
  31.         status_forcelist=[429, 500, 502, 503, 504],
  32.     )
  33.    
  34.     adapter = HTTPAdapter(max_retries=retry_strategy)
  35.     session.mount("http://", adapter)
  36.     session.mount("https://", adapter)
  37.    
  38.     return session

  39. def fetch_and_submit_sitemap_urls(sitemap_url, is_root=True):
  40.     """读取并提交单个sitemap文件中的URL"""
  41.     try:
  42.         logging.info(f"正在处理网站地图: {sitemap_url}")
  43.         
  44.         # 创建带重试机制的session
  45.         session = create_session_with_retries()
  46.         
  47.         # 设置请求头
  48.         headers = {
  49.             'User-Agent': 'Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/91.0.4472.124 Safari/537.36',
  50.             'Accept': 'text/html,application/xhtml+xml,application/xml;q=0.9,image/webp,*/*;q=0.8',
  51.             'Accept-Language': 'zh-CN,zh;q=0.8,en-US;q=0.5,en;q=0.3',
  52.             'Accept-Encoding': 'gzip, deflate',
  53.             'Connection': 'keep-alive',
  54.         }
  55.         
  56.         response = session.get(sitemap_url, headers=headers, timeout=30)
  57.         response.raise_for_status()
  58.         
  59.         root = ET.fromstring(response.content)
  60.         namespace = {'ns': 'http://www.sitemaps.org/schemas/sitemap/0.9'}
  61.         
  62.         # 如果是sitemap索引文件
  63.         sitemaps = root.findall('ns:sitemap', namespace)
  64.         if sitemaps and is_root:
  65.             logging.info(f"发现 {len(sitemaps)} 个子sitemap文件")
  66.             for sitemap_elem in sitemaps:
  67.                 loc = sitemap_elem.find('ns:loc', namespace)
  68.                 if loc is not None:
  69.                     # 递归处理每个子sitemap,立即提交
  70.                     fetch_and_submit_sitemap_urls(loc.text, is_root=False)
  71.                     # 添加延迟避免请求过于频繁
  72.                     time.sleep(2)
  73.         else:
  74.             # 处理普通sitemap文件中的URL
  75.             urls = []
  76.             for url_elem in root.findall('ns:url', namespace):
  77.                 loc = url_elem.find('ns:loc', namespace)
  78.                 if loc is not None:
  79.                     urls.append(loc.text)
  80.             
  81.             if urls:
  82.                 logging.info(f"从 {sitemap_url} 获取到 {len(urls)} 个URL")
  83.                 # 立即提交这些URL
  84.                 submit_to_indexnow(urls)
  85.             else:
  86.                 logging.warning(f"从 {sitemap_url} 未获取到任何URL")
  87.                
  88.     except Exception as e:
  89.         logging.error(f"处理网站地图 {sitemap_url} 失败: {e}")

  90. def submit_to_indexnow(url_list, batch_size=100):
  91.     """分批提交URL到IndexNow"""
  92.     headers = {
  93.         'Content-Type': 'application/json; charset=utf-8'
  94.     }
  95.    
  96.     total_submitted = 0
  97.     for i in range(0, len(url_list), batch_size):
  98.         batch = url_list[i:i + batch_size]
  99.         
  100.         payload = {
  101.             "host": HOST,
  102.             "key": KEY,
  103.             "keyLocation": KEY_LOCATION,
  104.             "urlList": batch
  105.         }
  106.         
  107.         try:
  108.             # 创建带重试机制的session
  109.             session = create_session_with_retries()
  110.             
  111.             response = session.post(INDEXNOW_API, json=payload, headers=headers, timeout=30)
  112.             if response.status_code == 200:
  113.                 logging.info(f"成功提交 {len(batch)} 个URL")
  114.                 total_submitted += len(batch)
  115.             else:
  116.                 logging.warning(f"提交失败,状态码: {response.status_code}, 响应: {response.text}")
  117.         except Exception as e:
  118.             logging.error(f"提交过程中发生错误: {e}")
  119.         
  120.         # 添加延迟避免请求过于频繁
  121.         time.sleep(1)
  122.    
  123.     logging.info(f"从当前sitemap总共提交 {total_submitted} 个URL")

  124. def main():
  125.     logging.info("开始执行IndexNow提交任务")
  126.     start_time = datetime.now()
  127.    
  128.     try:
  129.         fetch_and_submit_sitemap_urls(SITEMAP_URL)
  130.         end_time = datetime.now()
  131.         duration = end_time - start_time
  132.         logging.info(f"IndexNow提交任务完成,总耗时: {duration}")
  133.     except Exception as e:
  134.         logging.error(f"任务执行失败: {e}")

  135. if __name__ == "__main__":
  136.     main()
复制代码

三、计划任务~添加任务,设置好自己想要重复执行的时间。脚本内容如下:
  1. python3 /www/wwwroot/IndexNow/IndexNow.py
复制代码

360截图20260120171644206.png

四、保存设置,执行查看日志


最下面的两张图片传错了,不知怎的,删不掉了,官方审核可以帮我删掉,如果图片可以删掉,这句话也一起删掉
360截图20260120155558815.png
360截图20260120164009414.png
使用道具 举报 只看该作者 回复
您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

普通问题处理

论坛响应时间:72小时

问题处理方式:排队(仅解答)

工作时间:白班:9:00 - 18:00

紧急运维服务

响应时间:3分钟

问题处理方式:宝塔专家1对1服务

工作时间:工作日:9:00 - 18:30

宝塔专业团队为您解决服务器疑难问题

点击联系技术分析

工作时间:09:00至18:30

快速回复 返回顶部 返回列表