|
|
|
|
@ -1,21 +1,55 @@
|
|
|
|
|
import logging
|
|
|
|
|
|
|
|
|
|
import requests
|
|
|
|
|
from django.conf import settings
|
|
|
|
|
|
|
|
|
|
# 获取当前模块的日志记录器,用于记录日志信息
|
|
|
|
|
logger = logging.getLogger(__name__)
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
class SpiderNotify():
|
|
|
|
|
"""蜘蛛通知类,用于向搜索引擎推送URL,帮助搜索引擎发现和收录网站内容"""
|
|
|
|
|
|
|
|
|
|
@staticmethod
|
|
|
|
|
def baidu_notify(urls):
|
|
|
|
|
"""
|
|
|
|
|
向百度搜索引擎推送URL,促进网站收录
|
|
|
|
|
|
|
|
|
|
Args:
|
|
|
|
|
urls (list): 需要推送的URL列表,通常为新发布或更新的文章链接
|
|
|
|
|
|
|
|
|
|
Note:
|
|
|
|
|
使用百度站长平台的API接口进行URL推送
|
|
|
|
|
推送格式为每行一个URL的纯文本数据
|
|
|
|
|
"""
|
|
|
|
|
try:
|
|
|
|
|
# 将URL列表转换为百度API要求的格式:每行一个URL的字符串
|
|
|
|
|
# 例如:['http://example.com/1', 'http://example.com/2'] -> "http://example.com/1\nhttp://example.com/2"
|
|
|
|
|
data = '\n'.join(urls)
|
|
|
|
|
|
|
|
|
|
# 发送POST请求到百度推送接口[8,9](@ref)
|
|
|
|
|
# 使用Django设置中配置的百度推送URL,避免硬编码
|
|
|
|
|
result = requests.post(settings.BAIDU_NOTIFY_URL, data=data)
|
|
|
|
|
|
|
|
|
|
# 记录推送结果到日志,便于监控和调试[6,7](@ref)
|
|
|
|
|
logger.info(result.text)
|
|
|
|
|
|
|
|
|
|
except Exception as e:
|
|
|
|
|
# 捕获并记录所有可能的异常,如网络错误、配置错误等
|
|
|
|
|
# 使用错误级别日志记录异常信息[6](@ref)
|
|
|
|
|
logger.error(e)
|
|
|
|
|
|
|
|
|
|
@staticmethod
|
|
|
|
|
def notify(url):
|
|
|
|
|
SpiderNotify.baidu_notify(url)
|
|
|
|
|
"""
|
|
|
|
|
推送URL的便捷方法,可以扩展支持多个搜索引擎
|
|
|
|
|
|
|
|
|
|
Args:
|
|
|
|
|
url (str or list): 单个URL字符串或URL列表
|
|
|
|
|
"""
|
|
|
|
|
# 如果传入的是单个URL,转换为列表形式
|
|
|
|
|
if isinstance(url, str):
|
|
|
|
|
url = [url]
|
|
|
|
|
|
|
|
|
|
# 调用百度推送方法
|
|
|
|
|
# 这里的设计便于未来扩展其他搜索引擎的推送功能
|
|
|
|
|
SpiderNotify.baidu_notify(url)
|