🚀 微信公众号自动化发布,用Python轻松搞定!

嘿,小伙伴们!👋

今天我要给大家分享一个超酷的Python技能:如何用代码把文章一键发布到微信公众号!是不是很神奇?别急,我会一步步带你搞懂,就算你是Python小白,也能轻松上手!🎉


🎯 一键发布文章到公众号?太酷了吧!

想象一下,你写了一篇超棒的文章,或者爬取了一些有趣的内容,想快速发布到公众号上。但手动排版、上传图片、发布……这些步骤是不是太麻烦了?别担心,Python来帮忙!今天,我给大家带来了一套完整的代码,可以实现文章的自动化发布。是不是很心动?快来看看是怎么做到的!


🧩 代码解析:一步步搞定公众号发布

1️⣧ to_wx_draft:把文章打包上传到草稿箱

def to_wx_draft(post_datas_list, access_token):
    # 图文少于5篇,分为一组
    if len(post_datas_list) < 5:
        data = {
            "articles": [pack_articles_list(post_details, access_token) for post_details in post_datas_list]
        }
        upd_post2cgx(data, access_token)
        print("公众号上传完成。")
    else:
    	# 当一次发布的图文多于5篇时,每5篇分为一组
        for i in range(0, len(post_datas_list), 5):
            data = {
                "articles": [pack_articles_list(post_details, access_token) for post_details in post_datas_list[i:i + 5]]
            }
            upd_post2cgx(data, access_token)
        print("公众号上传完成。")

这个函数的作用是把文章分组(最多5篇一组)并上传到公众号草稿箱。它会调用pack_articles_list来处理每篇文章,然后调用upd_post2cgx发送到公众号。

2️⣧ upd_post2cgx:发送文章到公众号

def upd_post2cgx(data, access_token):
    url = 'https://api.weixin.qq.com/cgi-bin/draft/add?access_token=' + access_token
    vx_res = requests.post(url=url, data=json.dumps(data, ensure_ascii=False).encode("utf-8"))
    obj = json.loads(vx_res.content)
    print(obj)
    return obj['media_id']

这个函数负责把文章数据发送到公众号的草稿箱。它会调用微信的API接口,返回一个media_id,这是文章的唯一标识。

3️⣧ pack_articles_list:处理文章内容

def pack_articles_list(post_details, access_token):
	# 标题
    wx_title = post_details[0].replace('高清下载', ' 高清已更新')
    # 正文
    intro = post_details[4]
    # 摘要
    digest = post_details[5]
    # 封面图片id和链接
    wx_fm_img_id, file_path = upd_fm_pic(base_folder, file_name, img_url, access_token)
    # 正文图片链接
    wx_all_imgs_url = upd_imgs(file_path, file_name, access_token)
    # 替换正文中的图片链接为上传后的图片链接
    wx_content = re.sub(img_url_pattern, wx_all_imgs_url, intro)
    # 构造一组图文文章的数据结构(字典)
    articles_dict = create_post_dict(wx_title, digest, wx_content, wx_fm_img_id)
    return articles_dict

这个函数的作用是处理文章的各个部分,包括标题、摘要、内容和图片。它会调用upd_fm_pic上传封面图片,调用upd_imgs上传正文图片,并最终调用create_post_dict构造文章的数据结构。

4️⣧ upd_fm_pic 和 upd_imgs:上传图片

# 上传封面图片到微信公众号,并返回封面图片id和本地图片绝对路径
def upd_fm_pic(base_folder, file_name, img_url, access_token):
    file_path = os.path.join(base_folder, file_name)
    res = requests.get(img_url, verify=False)
    with open(file_path, 'wb') as f:
        f.write(res.content)

    url = f'https://api.weixin.qq.com/cgi-bin/material/add_material?access_token={access_token}&type=image'
    request_file = {
        'media': (file_name, open(file_path, 'rb'), 'image/jpeg')}
    vx_res = requests.post(url=url, files=request_file)
    obj = json.loads(vx_res.content)
    # 返回file_path是为了处理自己服务器上已上传公众号后的图片,节省服务器空间
    return obj['media_id'], file_path


# 上传正文图片到微信公众号,并返回正文图片网址
def upd_imgs(file_path, file_name, access_token):
    vx_img_url = 'https://api.weixin.qq.com/cgi-bin/media/uploadimg'
    request_file = {
        'media': (file_name, open(file_path, 'rb'), 'image/jpeg')}
    data = {
        'access_token': access_token
    }
    vx_res = requests.post(url=vx_img_url, files=request_file, data=data)
    obj = json.loads(vx_res.content)
    print(obj)
    return obj['url']

这两个函数分别用于上传封面图片和正文图片到微信服务器,并返回图片的ID或URL。这是文章发布过程中非常关键的一步。

5️⣧ create_post_dict:构造文章数据结构

def create_post_dict(wx_title, digest, wx_content, wx_fm_img_id):
    articles_dict = {
        "title": wx_title,
        "author": '',
        "digest": digest,
        "content": wx_content,
        "show_cover_pic": 1,
        "need_open_comment": 0,
        "only_fans_can_comment": 1,
        "thumb_media_id": wx_fm_img_id
    }
    return articles_dict

这个函数的作用是把文章的各个部分组合成一个符合微信公众号要求的JSON格式,方便发送到公众号。


🎉 完整代码的应用场景

这套代码的核心功能是把文章自动化发布到公众号。它可以用于:

  1. 内容创作者:快速发布文章,节省手动排版的时间。
  2. 自媒体运营:批量发布文章,提高效率。
  3. 数据爬虫:把爬取的内容直接发布到公众号,实现自动化内容分发。

🚀 基于这个代码的扩展实现

示例 1:定时发布文章

我们可以结合schedule库,让文章在特定时间自动发布。比如每天早上8点发布一篇新文章。

import schedule
import time

def job():
    print("开始发布文章...")
    access_token = get_access_token()  # 获取access_token
    post_datas_list = get_articles()  # 获取文章数据
    to_wx_draft(post_datas_list, access_token)

schedule.every().day.at("08:00").do(job)

while True:
    schedule.run_pending()
    time.sleep(1)

示例 2:多账号发布

如果你有多个公众号,可以扩展代码,实现多账号同时发布文章。

def multi_account_post(post_datas_list, account_tokens):
    for access_token in account_tokens:
        to_wx_draft(post_datas_list, access_token)
        print(f"已发布到账号:{access_token}")

account_tokens = ["token1", "token2", "token3"]
post_datas_list = get_articles()
multi_account_post(post_datas_list, account_tokens)

🎁 总结

今天,我们用Python实现了一键发布文章到公众号的功能。是不是很酷?其实,只要掌握了这些函数的用法,你就可以轻松扩展出更多功能,比如定时发布、多账号发布等。

如果你是Python小白,也不用担心,这些代码都很简单,只要跟着一步步来,你也能轻松搞定!

快去试试吧,说不定你的公众号就能因为这个技能而更受欢迎呢!🎉


如果你对这个项目感兴趣,或者有任何问题,欢迎留言讨论哦!

需要完整代码或指导,请评论区留言。

更多推荐