百度主动推送可以将站点的链接主动提交给百度抓取收录,可缩短搜索引擎发现新页面的时间,对中小站点来说是一个非常有用的功能。
百度站长平台提供了该功能的接口信息,但需要具备一定的编写代码能力才能很好地使用。为了降低使用门槛,做成一个独立的小软件是个不错的选择,目前百度站长平台已经有大神做了此类工具出来,不过我实际使用后感觉不太灵活,因此决定自己开发一个,顺便学习一下 Python 的 GUI 库 tkinter。
话不多说,上代码:
import tkinter as tk import tld from urllib.parse import urlparse import requests TOKENS = { } window = tk.Tk() window.title('百度主动推送工具') window.geometry('500x500') label = tk.Label(window, text='输入需要推送的链接,链接必须以 http 开头', height=2, font=('Arial', 12)) label.pack() urls_text = tk.Text(window, height=15, width=67) urls_text.place(x=10, y=30, anchor='nw') log_area = tk.Text(window, height=16, width=67, bg='lightgray') log_area.place(x=10, y=270, anchor='nw') log_area.config(state='disabled') def get_push_token(domain): for k, v in TOKENS.items(): if domain in v: return k return '' def push(): """ 将输入的 URL 按站点合并推送 :return: None """ urls = urls_text.get('1.0', 'end-1c').split('\n') sites = [] for url in urls: parsed_url = list(urlparse(url))[:2] parsed_url.append(tld.get_fld(url)) # parsed_url 结构为 [协议, 全限定域名, 主域名] # 如 ['http', 'www.020fdc.cn', '020fdc.cn'] if parsed_url not in sites: sites.append(parsed_url) for site in sites: site_urls = '' for u in urls: if site[1] in u: site_urls += u + '\n' base_api = 'http://data.zz.baidu.com/urls' site_token = get_push_token(site[2]) if site_token == '': log_area.insert('end', '%s,推送失败,token 为空' % site[1]) continue site_api = '%s?site=%s://%s&token=%s' \ % (base_api, site[0], site[1], site_token) req = requests.post(site_api, data=site_urls) if 'success' in req.text: log_area.insert('end', '%s,%s\n' % (site[1], req.text)) else: log_area.insert('end', '%s,%s\n' % (site[1], req.text)) btn = tk.Button(window, text='推送', command=push) btn.place(x=230, y=230, anchor='nw') window.mainloop()
现实中有多个站点共用一个推送接口 token 的情况,为了存储方便,全局变量 TOKEN 是一个字典,以 token 为键,以对应的网站域名列表为值。
另外主域名和多个子域名的 token 也是相同的,所以还引入了 tld 库对用户输入的网址做了解析,方便取对应的 token。
最终运行效果如图:
TODO LIST
1. 增加读取文件中的 URL 并推送功能
2. 增加监控 sitemap 文件并推送功能
3. 增加手动配置站点及 token 功能
转载请注明:云深不知处 » 用 Python GUI 开发百度主动推送工具