windows环境基于python 实现微信公众号文章推送

news2024/11/28 16:33:54

材料:

 1、python 2.7 或者 python3.x 

 2、windows 可以通过 “python -m pip --version” 查看当前的pip 版本

E:\Downloads\newsInfo>python -m pip --version
pip 20.3.4 from C:\Python27\lib\site-packages\pip (python 2.7)

 3、windows 系统

制作:

1、安装python

打开 WEB 浏览器访问Python Releases for Windows | Python.org

下载后,双击下载包,进入 Python 安装向导,安装非常简单,你只需要使用默认的设置一直点击"下一步"直到安装完成即可

注意:部分电脑环境可能需要配置环境变量,参考Python 环境搭建 | 菜鸟教程

2、安装 pip

下载与自己python版本对应的get-pip.py 且切换到该文件目录后执行如下命令

python get-pip.py

测试安装是否成功(注:未配置环境变量的情况,若已配置环境变量,使用pip -version)

python -m pip --version

验证: 

   

3、安装 flask(用于简单的服务发布测试)

通过 python -m pip install flask 安装flask框架 

4、程序目录结构

 5、编写main.py 

#!/usr/bin/python
# -*- coding: UTF-8 -*-

from flask import Flask,render_template,request,jsonify
import requests
import json
import chardet
 
app = Flask(__name__)


@app.route('/',methods=['POST'])
def start():
    data = request.get_json()
    file_path = data.get('file_path')
    #print("file_path",file_path)
    mediaInfo = data.get('mediaInfo')
    #mediaInfos = json.dumps(mediaInfo, ensure_ascii=False)
    print("mediaInfo",mediaInfo)
    #mediaInfo =  chardet.detect(str(json.dumps(mediaInfo)).encode())
    #mediaInfo = json.dumps(mediaInfo,ensure ascii-False)
    
    #file_path = 'C:\Users\mpf\Desktop/20240819172400.png'
    
         
    wxpublish(file_path,mediaInfo)

    return "s"

def wxpublish(file_path,mediaInfo):
    access_token = getWX_token()
    print(access_token)
    media_id = upload_material(access_token,file_path)
    print("media_id",media_id)
    mediaInfo.update({'thumb_media_id': media_id})
    list_data = [mediaInfo]
    media_id = save_draft(access_token,list_data)
    print("save_media_id",media_id)
    freepublish(access_token,media_id)

def getWX_token():
    url = 'https://api.weixin.qq.com/cgi-bin/token?grant_type=client_credential&appid=(变量APPID)&secret=(变量SECRETID)'
    resp = requests.get(url)
    if resp.status_code == 200:
        data =  resp.json()
        tokenjson = data.get('access_token','N/A')
        return tokenjson
    else:
        print('Failed',resp.status_code)


def upload_material(access_token,file_path):
    url = 'https://api.weixin.qq.com/cgi-bin/material/add_material'
    if is_empty_string(file_path):
        file_path = '/20240819172400.png'   
    files = {'media': open(file_path, 'rb')}
    data = {
        "access_token" : access_token,
        "type" : "image"
    }
    try:
        resp = requests.post(url, files=files, data=data)
        resp.raise_for_status()
        data =  resp.json()
        media_id = data.get('media_id','N/A')
        return str(media_id)
    except requests.exceptions.RequestException as e:
        print("bpf",e)
    except requests.exceptions.HTTPError as e:
        print("efg",e)
    except Exception as e:
        print("upload_materialabcd:",e)
    finally:
        for key, value in files.items():
            if value:
                value.close()

def save_draft(access_token,media_mode):

    url = 'https://api.weixin.qq.com/cgi-bin/draft/add'
    data = {
        "articles": media_mode
    }

    params = {
        "access_token" : access_token
    }
    headers = {
        "User-Agent" :'Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/120.0.0.0 Safari/537.36',
        "Accept":'text/html,application/xhtml+xml,application/xml;q=0.9,image/avif,image/webp,image/apng,*/*;q=0.8,application/signed-exchange;v=b3;q=0.7',
        "Accept-Encoding":'gzip, deflate, br',
        "Connection":'keep-alive',
        "Content-Type":'application/json;charset=utf-8',
        "Cache-Control":'max-age=0'
    }
    try:
        data = json.dumps(data,ensure_ascii=False)
        print("***",data)
        resp = requests.post(url,params=params,json=data,headers=headers)
        resp.raise_for_status()
        data =  resp.json()
        media_id = data.get('media_id','N/A')
        return media_id
    except Exception as e:
        print("save_draftabcd:",e)
    finally:
        print("access_token")


def freepublish(access_token,media_id):
    url = 'https://api.weixin.qq.com/cgi-bin/freepublish/submit'
    params = {
        "access_token" : access_token
    }
    data = {
        "media_id": media_id
    }
    headers = {
        "User-Agent" :'Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/120.0.0.0 Safari/537.36',
        "Accept":'text/html,application/xhtml+xml,application/xml;q=0.9,image/avif,image/webp,image/apng,*/*;q=0.8,application/signed-exchange;v=b3;q=0.7',
        "Accept-Encoding":'gzip, deflate, br',
        "Connection":'keep-alive',
        "Content-Type":'application/json;charset=utf-8',
        "Cache-Control":'max-age=0'
    }
    try:
        data = json.dumps(data,ensure_ascii=False)
        resp = requests.post(url,params=params,data=data,headers=headers)
        resp.raise_for_status()
        data =  resp.json()
        print(data)
    except Exception as e:
        print("freepublishabcd:",e)
    finally:
        return


def getHtml_Of_articles():
    return

def is_empty_string(text):
    if text.strip() == "":
        return True
    else:
        return False


 
if __name__ == '__main__':
    app.run(debug=True,port=8080)

上述代码片段中有2个关键变量必须是自己的微信公众号APPID和密码 ,分别是(变量APPID)、(变量SECRETID)。

上述代码中包含了获取微信授权token、提交图片素材到微信公众号永久素材库、创建微信公众号素材草稿、发布微信公众号文章几个步骤

6、获取微信公众平台的APPID和密码及设置白名单

公众号平台:https://mp.weixin.qq.com/cgi-bin/frame?t=notification/index_frame

切换菜单到“设置与开发”-->"基础设置",如下图

注:这里的 AppSecret ID生成后需要自己记住,也就是上面代码片段中的(变量SECRETID),这里的APPID就是上面代码片段中的(变量APPID)

7、设置白名单

接第六部白名单设置,公众号开发必须设置白名单。

开发环境:由于我们研发环境基本很难有固定的IP,使用ipconfig/ifconfig都是内网IP(如:192.168.0.X),这种内网IP无法穿透。如何获得自己的临时公网IP呢?

简单:我们只需要打开百度搜索栏输入“IP”即可获得,只是这个地址不定期会变,研发使用已经足够。

8、 添加webhtml模板

   在main.py 同层创建文件夹并命名templates

    在templates目录下新建form.html,index.html 

   index.html 如下

<!DOCTYPE html>
<html>
<head>
    <title>AI发文章</title>
</head>
<body>
    <h1>提交<h1>
    <form action="/start">
        <input type = "text" name="name" >
        <input type = "submit" value = "start">
    </form>
</body>
</html>

 form.html

<!DOCTYPE html>
<html>
<head>
    <title>AI发文章</title>
</head>
<body>
    <h1>成功实现<h1>
    
</body>
</html>

9、windows+R 打开,输入"cmd",并切换目录到 main.py 所在目录后执行 "python main.py" 即可

10、postman 请求

 

11、页面请求

12、微信公众号

 

分享

python 2.7 与python 3.x间存在编码不统一问题,可能会在提交草稿步揍出现44003异常。

乱码问题:

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/2062431.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

基于STM32开发的智能家居安防系统

目录 引言环境准备工作 硬件准备软件安装与配置系统设计 系统架构硬件连接代码实现 系统初始化传感器数据采集与处理安防控制与报警机制Wi-Fi通信与远程监控应用场景 家庭安防系统办公室与商铺的安全监控常见问题及解决方案 常见问题解决方案结论 1. 引言 随着智能家居技术的…

【Hot100】LeetCode—226. 翻转二叉树

目录 1- 思路Queue 队列实现层序遍历 交换左右 2- 实现⭐226. 翻转二叉树——题解思路 3- ACM 实现 原题连接&#xff1a;226. 翻转二叉树 1- 思路 Queue 队列实现层序遍历 交换左右 1- 借助 Queue 实现层序遍历2- 实现左右交换方式 2- 实现 ⭐226. 翻转二叉树——题解思…

带你玩转小程序推广,实现短链接一键跳转

不知道各位有没有想过&#xff0c;短链接直接跳转到微信小程序到底该怎么操作呢&#xff1f;掌握这个小技能&#xff0c;能让你的推广效率大幅提升哦。今天就给大家分享一个全新方法&#xff0c;教你如何从短链接直接跳转到微信小程序&#xff0c;实现高效的一键式跨越。 一、…

源代码怎么进行加密?2024年10款源代码加密软件推荐

在软件开发中&#xff0c;源代码是企业的核心资产&#xff0c;其安全性直接关系到企业的竞争力和商业机密。为了防止源代码被未授权访问、复制或篡改&#xff0c;源代码加密成为了一种常见的安全措施。2024年&#xff0c;随着技术的发展&#xff0c;市场上出现了多种源代码加密…

笔记-系统规划与管理师-案例题-2023年-服务运营管理

【说明】 小李是跨国公司新任命的IT服务经理&#xff0c;帮助提升中国区总部的IT服务管理水平。中国区总部的运维管理体系运营了近三年&#xff0c;内外部环境发生了很多变化&#xff0c;其中: &#xff08;1&#xff09;内部变化包括团队组织结构调整、部分团队精简改为外包支…

纯前端导出excel插件pikaz-excel-js使用小结

最近项目有多个报表开发并前端导出为excel的需求&#xff0c;第一张报表用的是pikaz-excel-js插件&#xff0c;git地址为https://github.com/pikaz-18/pikaz-excel-js&#xff0c;网上文档虽然多&#xff0c;但很多都很基础&#xff0c;官方文档介绍也很简单&#xff0c;没有很…

搜维尔科技:‌Manus VR手套通过触觉反馈技术与机器人进行互动

‌Manus VR手套通过触觉反馈技术与机器人进行互动。‌这种技术允许用户通过手套与机器人进行复杂的动作遥操作和训练&#xff0c;使得用户能够通过手套的动作来控制机器人的运动&#xff0c;同时机器人执行的动作也可以通过手套的触觉反馈功能传达给用户&#xff0c;使用户能够…

线索分析2个要点分析:营销归因与市场ROI转化效果评估

1、营销归因 在复杂的大数据时代&#xff0c;消费者能接触的渠道、设备越来越多&#xff0c;营销活动分析也变得越来越复杂。 在当前的营销环境中&#xff0c;了解并优化营销策略是至关重要的。一个关键的部分是通过分析不同营销活动如何促成商机并赢得订单。而要实现这一目标…

秸秆焚烧自动监测摄像机

秸秆焚烧是一种常见的农业废弃物处理方式&#xff0c;但同时也会产生大量的空气污染物&#xff0c;对环境和人类健康造成威胁。为了监测和控制秸秆焚烧的情况&#xff0c;可以使用秸秆焚烧自动监测摄像机。秸秆焚烧自动监测摄像机 是一种结合了人工智能和机器视觉技术的智能设备…

Linux入门——04 gbd git

gbd命令行调试 默认情况下&#xff0c;GDB无法对现在发布的程序进行调试 debug&#xff08;能调试&#xff09;&&release&#xff08;不能调试&#xff09; linux下GCC或G生成软件默认是release的&#xff01; 1.debug模式 gcc -o mytest mytest.c -g 文件的体积不…

STM32学习记录-04-EXTI外部中断

1 中断系统 &#xff08;1&#xff09;中断&#xff1a;在主程序运行过程中&#xff0c;出现了特定的中断触发条件&#xff08;中断源&#xff09;&#xff0c;使得CPU暂停当前正在运行的程序&#xff0c;转而去处理中断程序&#xff0c;处理完成后又返回原来被暂停的位置继续…

在尝试了市面上90%的报表工具后,终于找到了这款免费万能的报表工具!

经常有朋友私信问我有“哪个报表工具好用易上手&#xff1f;”或者是“有哪些适合绝大多数普通职场人的万能报表工具&#xff1f;”等问题。 在这里我总结出大家在报表选择时最在意的三个要点。 一、挑选报表工具的重点 1&#xff09;低门槛上手难度&#xff1a;理想中的报表…

解密《黑神话:悟空》脚本

本文部分参考来自于&#xff1a;john 《黑神话&#xff1a;悟空》这游戏昨天上线了&#xff0c;我第一时间就下载玩了。玩的时候我就挺好奇他们是怎么写的程序&#xff0c;毕竟这么大的游戏项目肯定不会只用C一种语言来写。所以我解压了游戏文件&#xff0c;看看里面有…

开学季必备物品有什么?收下这份高三党开学必备清单!

随着新学期的脚步越来越近&#xff0c;高三的同学们即将迎来人生中至关重要的一年。这一年里&#xff0c;你们将面临无数挑战&#xff0c;同时也将迎来成长的机遇。为了帮助大家更好地准备&#xff0c;我们特别整理了这份“高三党开学必备清单”。这里不仅涵盖了高效学习所需的…

用博达网站群管理平台设计网站时如何引用组件

1 介绍 开发网站时&#xff0c;通常会遇到一种情况&#xff0c;就是在多个页面上需显示相同的内容&#xff0c;例如树状导航&#xff0c;网站导航等。这种情况下可以用博达网站群管理平台中的引用组件功能。引用组件就是与原组件相关联&#xff0c;修改任何一个&#xff0c;其…

书画家•郭晋山•系列作品•赏析之三十三•甲辰龙年第二十九版

[个人简介]&#xff1a; 郭晋山&#xff0c;男&#xff0c;1964年生&#xff0c;祖籍山西繁峙人。 经常欣赏书画名家大作&#xff0c;仔细研究作品之中蕴含的深情厚谊及大自然的美&#xff0c;与作者是如何将内心所想&#xff0c;淋漓尽致地表达在作品之中的&#xff01; [艺术…

我知道要学GIS开发哪些内容,也已经按照框架全部学完了,为什么还是不会开发?还是没有公司要?

大家都知道GIS行业前景和待遇最好的是GIS开发&#xff0c;但是在学校学不到什么核心技能&#xff0c;所以很多同学都想自学。 动手能力强一点的小伙伴们&#xff0c;会自己去找一些GIS开发教程、开源资料库等等来展开自学。这些资料百度上一搜一大把&#xff0c;加个QQ群、微信…

iTOP-3562开发板/核心板应用于人脸跟踪、身体跟踪、视频监控、自动语音识别(ASR)、图像分类驾驶员辅助系统(ADAS)、车牌识别、物体识别等

可应用于人脸跟踪、身体跟踪、视频监控、自动语音识别(ASR)、图像分类驾驶员辅助系统(ADAS)、车牌识别、物体识别等。 iTOP-3562开发板/核心板采用瑞芯微RK3562处理器&#xff0c;内部集成了四核A53Mali G52架构&#xff0c;主频2GHZ&#xff0c;内置1TOPSNPU算力&#xff0c;R…

二叉树剪枝

1、题目解析 2、算法解析 本题使用二叉树的后序遍历&#xff0c;通过递归函数将左右子树进行处理&#xff0c;得到处理结果后&#xff0c;判断左右结果以及自身的val判断是否需要剪枝。 3、代码编写 class Solution { public:TreeNode* pruneTree(TreeNode* root) {if(root …

Ollama 使用指南:Linux、Windows 和 macOS

Ollama 是一个开源平台&#xff0c;用于部署和运行大型语言模型。它提供了一种在本地环境中运行语言模型的能力&#xff0c;使得用户可以在本地安全地与这些模型进行交互&#xff0c;而无需将数据发送到云端。 安装 Ollama 确保您已经安装了 Ollama。如果还没有安装&#xf…