文章详情

短信预约-IT技能 免费直播动态提醒

请输入下面的图形验证码

提交验证

短信预约提醒成功

用Python写一个简单公众号

2023-01-31 06:26

关注

  前言:虽然简单,但是稍稍还是有点可取的地方的,终于可以有一个可以作为项目放在自己的github上了T_T,一个好项目一定是可拔插好扩展的,离好项目至少60%吧,以后再进一步完善了。

   说实话,有一个微信公众号还是蛮方便的,可以将一些自己常用的功能(当然了,这些功能也可以包括工作相关的,不过现在没上班ing)全部集成在公众号里面,这样输入关键字就可以让一些自己总是重复的事情交给自己的代码实现了,其实本来也是想给自己父母集成的微信公众号。

    首先瞧瞧效果图。

    ps:争取以后做成H5网站的只要点击就可以了,而不是关键字,因为输入关键字对于老一辈还是会太麻烦,再者这些功能也好不够贴近痛点。

wKioL1dczj_hwpFBAABfAnxu_HQ188.png-wh_50wKioL1dczkCih6x5AACBwYAxuC4766.png-wh_50wKiom1dczTKzwmlYAAB-aa26nOQ991.png-wh_50


    好吧,进入主题。

    首先简单说明一下步骤,做一个摘要。

    1.注册微信公众号

    2.服务器配置

    3.代码内容解析

注册微信公众号

    注册一个微信公众号,免费的固然好不过功能是在太少,但是就自己用也足够了。

    注册地址:https://mp.weixin.qq.com/cgi-bin/readtemplate?t=register/step1_tmpl&lang=zh_CN

wKiom1dczWDgC_LRAAEP7DULn6s859.png-wh_50

    注册还是蛮简单的,仅需要一个邮箱以及×××正反面。具体步骤可参考:http://jingyan.baidu.com/article/6525d4b134051eac7d2e9417.html

    注:如果是为了查询用,建议选择服务号,如果定期发送文章什么的,就选订阅号吧。


服务器配置

    这里的服务器指两部分,一是代码所在服务器配置,二是微信公众号上的配置。

    首先看代码所在服务器配置,这里选择flask框架。至于服务器,无论选择各云厂商的云主机还是公司公网映射,抑或免费的云空间都是可取的,唯一的要求就是需要一个可访问的url以及可以运行Python代码。。

    参考:https://mp.weixin.qq.com/wiki

       http://my.oschina.net/yangyanxing/blog/159215    

    

安装flask

pip install flask

代码如下

#coding:utf-8
from flask import Flask,render_template,request,make_response
import time
import hashlib
import xml.etree.ElementTree as ET
@app.route("/wechat",methods = ["GET","POST"])
def wechat_auth():
    if request.method == 'GET':
        if len(request.args) > 3:
            token = 'xxxxxxx'
            query = request.args
            signature = query['signature']
            timestamp = query['timestamp']
            nonce = query['nonce']
            echostr = query['echostr']
            s = [timestamp, nonce, token]
            s.sort()
            s = ''.join(s)
            sha1str = hashlib.sha1(s).hexdigest()
            if sha1str == signature:
                return make_response(echostr)
            else:
                return make_response("认证失败")
        else:
            return "认证失败"

保存为myapp.py

然后在当前目录新建一个manager.py文件

from myapp import app
app.debug = True
app.run()

运行manager.py文件

python manager.py


访问127.0.0.1:5000/wechat,显示如下

wKioL1dczq6gL1R_AABAsZXvIxg100.png-wh_50

注意:上面的token令牌,那是自定义的,随便什么字符,不过微信与服务器上的配置要一样。

    还有就是flask的部署建议是通过nginx部署,不过你直接python manager.py 也不会有太大问题。

    Flask+WSGI+Nginx部署,

    参考: http://www.cnblogs.com/Ray-liang/p/4173923.html

    

    在微信公众号注册成功后,选择开发--->基本配置---->修改配置

wKioL1dczs-D5I0ZAADfYLNMuLw167.png-wh_50

    URL填入自己的URL,Token配置成跟代码一致,EncodingAESK点击随机生成即可,加密方式兼容。最后点击提交。提示提交成功即通过。


代码内容解析

    为了省略篇幅就不把源码全部粘贴进来了,有兴趣的访问https://github.com/youerning/pywechat/

    接下来我们就可以写功能部分了,主要讲解一下思路,以及现在以现在水平看来还不错的部分。

    

    一:抽离重用的部分

    将处理用户发过的文本的函数以及实现功能的类放在一个单独的模块handler,resp中。

    如下:

from handler import RequestTextGet,TextHandler,Menu
from resp import TextResp

    

    二:方法调用

    通过python中非常有用的方法减少代码量

    如下:

    def Get(self,Action,*args):
        if Action in MenuCode: Action = MenuCode[Action]
        Func = getattr(self,Action,None)
        if callable(Func):self.Ret = Func(*args)


通过getattr函数判断时候存在相应的类方法,没有则返回None,这样就不需要写if判断语句或者try了,如果可callable就直接调用。

    

    三:装饰器

    因为用户的输入是不可信的,所以需要将不需要的参数以及多余的内容过滤出去。

    比如,笑话不需要传入参数,你输入个"笑话 xxx xxx"那么我服务端一定报错,说参数传多了,但是不是每个方法都是不需要参数的,总得来说,我需要一个函数解决参数的问题,通过配置这个函数和的参数就可以控制传入的参数个数。

    如下:

def ArgsConfig(Args=1):
    def deco(func):
        @wraps(func)
        def wrap(self,*args,**kwargs):
            args = args[:Args]
            ret = func(self,*args,**kwargs)
            return ret
        return wrap
    return deco

使用如下:

      @ArgsConfig(0)
    def xh(self):
        #XHResp = requests.get("http://www.qiushibaike.com/text/")
        randp = randint(1,6)
        Payload = {"page":randp}
        XHResp = requests.get("http://www.walxh.com/pc/hot/",params=Payload)
        #XHRet = re.findall(r"""<div class="content">(\s*.*\s*)</div>""",XHResp.content)
        XHRet = re.findall("""<p>(.*?)</p>""",XHResp.content)
        num = randint(0,len(XHRet))
        Ret = XHRet[num]
        return Ret

    

后记:扩展性不是很好,以及天气,翻译功能需要依赖其他API,但是做成爬虫维护成本又可能变大。虽然这个项目至多达到一个及格项目的30%,等我写完另一个项目在继续吧,话说在家百无聊赖呀,哈哈。

    


阅读原文内容投诉

免责声明:

① 本站未注明“稿件来源”的信息均来自网络整理。其文字、图片和音视频稿件的所属权归原作者所有。本站收集整理出于非商业性的教育和科研之目的,并不意味着本站赞同其观点或证实其内容的真实性。仅作为临时的测试数据,供内部测试之用。本站并未授权任何人以任何方式主动获取本站任何信息。

② 本站未注明“稿件来源”的临时测试数据将在测试完成后最终做删除处理。有问题或投稿请发送至: 邮箱/279061341@qq.com QQ/279061341

软考中级精品资料免费领

  • 历年真题答案解析
  • 备考技巧名师总结
  • 高频考点精准押题
  • 2024年上半年信息系统项目管理师第二批次真题及答案解析(完整版)

    难度     813人已做
    查看
  • 【考后总结】2024年5月26日信息系统项目管理师第2批次考情分析

    难度     354人已做
    查看
  • 【考后总结】2024年5月25日信息系统项目管理师第1批次考情分析

    难度     318人已做
    查看
  • 2024年上半年软考高项第一、二批次真题考点汇总(完整版)

    难度     435人已做
    查看
  • 2024年上半年系统架构设计师考试综合知识真题

    难度     224人已做
    查看

相关文章

发现更多好内容

猜你喜欢

AI推送时光机
位置:首页-资讯-后端开发
咦!没有更多了?去看看其它编程学习网 内容吧
首页课程
资料下载
问答资讯