分享 SEO、SEM、ASO 等网络营销推广知识,交流网络推广技术心得,偶尔聊聊 Python,C++ 等编程技术。

用 Python GUI 开发百度主动推送工具

Python Ginson 55℃

百度主动推送可以将站点的链接主动提交给百度抓取收录,可缩短搜索引擎发现新页面的时间,对中小站点来说是一个非常有用的功能。

百度站长平台提供了该功能的接口信息,但需要具备一定的编写代码能力才能很好地使用。为了降低使用门槛,做成一个独立的小软件是个不错的选择,目前百度站长平台已经有大神做了此类工具出来,不过我实际使用后感觉不太灵活,因此决定自己开发一个,顺便学习一下 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。

最终运行效果如图:
基于 Python GUI 的百度主动推送工具

TODO LIST
1. 增加读取文件中的 URL 并推送功能
2. 增加监控 sitemap 文件并推送功能
3. 增加手动配置站点及 token 功能

转载请注明:云深不知处 » 用 Python GUI 开发百度主动推送工具

喜欢 (0)