博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
用Python写一个简单公众号
阅读量:6212 次
发布时间:2019-06-21

本文共 3255 字,大约阅读时间需要 10 分钟。

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

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

    首先瞧瞧效果图。

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

    好吧,进入主题。

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

    1.注册微信公众号

    2.服务器配置

    3.代码内容解析

注册微信公众号

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

    注册地址:

    注册还是蛮简单的,仅需要一个邮箱以及身份证正反面。具体步骤可参考:

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


服务器配置

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

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

    参考:

           

    

安装flask

pip install flask

代码如下

#coding:utf-8from flask import Flask,render_template,request,make_responseimport timeimport hashlibimport 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 appapp.debug = Trueapp.run()

运行manager.py文件

python manager.py

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

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

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

    Flask+WSGI+Nginx部署,

    参考: 

    

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

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


代码内容解析

    为了省略篇幅就不把源码全部粘贴进来了,有兴趣的访问

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

    

    一:抽离重用的部分

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

    如下:

from handler import RequestTextGet,TextHandler,Menufrom 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"""
(\s*.*\s*)""",XHResp.content)        XHRet = re.findall("""

(.*?)

""",XHResp.content)        num = randint(0,len(XHRet))        Ret = XHRet[num]        return Ret

    

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

    

转载地址:http://qzsja.baihongyu.com/

你可能感兴趣的文章
linux配置tomcat以service方式启动(转)
查看>>
NopCommerce 增加 Customer Settings
查看>>
mybatis sql语句#{}和${}区别联系
查看>>
【转】SHELL中的IFS详解
查看>>
spring多线程与定时任务
查看>>
mkforsela
查看>>
Jenkins卸载方法(Windows/Linux/MacOS)
查看>>
禁用SSL v2.0、SSL v3.0协议
查看>>
centos6.6 下 安装 php7 按 nginx方式
查看>>
mysqlint类型的长度值mysql在建表的时候int类型后的长度代表什么
查看>>
junit4新框架hamcrest的assertThat
查看>>
【驱动】网卡驱动·linux内核网络分层结构
查看>>
网络技术标准与协议
查看>>
中国大学MOOC-陈越、何钦铭-数据结构-笔记
查看>>
code标签和pre标签的定义
查看>>
常见 布局方式(一)
查看>>
解决cookie跨域访问.2
查看>>
SOYO的主板如何进入BIOS系统
查看>>
Visual Studio VS2010 如何修改默认的编辑语言
查看>>
SpringMVC4+Hibernate5+SQLServer 2014 整合(包括增删改查分页)
查看>>