玩法收藏/云服务器/零基础微信机器人实践( Python ) - V2EX
V2EX = way to explore
V2EX 是一个关于分享和探索的地方
现在注册
已注册用户请  登录
推荐学习书目
Learn Python the Hard Way
Python Sites
PyPI - Python Package Index
http://diveintopython.org/toc/index.html
Pocoo
值得关注的项目
PyPy
Celery
Jinja2
Read the Docs
gevent
pyenv
virtualenv
Stackless Python
Beautiful Soup
结巴中文分词
Green Unicorn
Sentry
Shovel
Pyflakes
pytest
Python 编程
pep8 Checker
Styles
PEP 8
Google Python Style Guide
Code Style from The Hitchhiker's Guide
liuliliuli2017

玩法收藏/云服务器/零基础微信机器人实践( Python )

  •  
  •   liuliliuli2017 2017 年 3 月 14 日 2401 次点击
    这是一个创建于 3328 天前的主题,其中的信息可能已经有所发展或是发生改变。

    最近想做个微信机器人,主要是为了个人方便。在腾云阁发现这个教程,得到了一些启发。(修改转载已取得腾讯云授权)

    技术路径和实现思路


    首先编程语言使用了 Python , Python 语法简洁、第三方扩展丰富,也因为这里采用的微信消息框架 itchat 是基于 Python 的。

    服务器当然使用腾讯云,这里我使用的是单核 1G 内存的最低配置,因为作为个人用的这个配置绰绰有余了,并且以后有更多用途的时候可以直接升级服务器配置和存储,这就是云服务器的巨大优势。


    因为对于大部分人来说,拿到一台崭新的服务器要部署服务是非常麻烦的,所以我也不喜欢,于是乎想到了使用 docker 容器来运行我的代码,这样不用手动去配置服务器的运行环境,我只需要创建一个 docker 镜像就可以了,但是这样感觉还是挺麻烦的,还要安装 docker ,还要上传镜像。然后我发现了 daocloud ,它可以帮助我完成容器管理和镜像生成的工作。

    所以我们部署路径是这样的: 编写代码->提交代码到 github 上->daocloud 自动生成 docker 镜像并部署到我们的云服务器上->自动运行

    也就是提交代码到分支,然后,然后自动更新发布,服务就这么运行成功了

    具体过程

    所以对云服务器的配置而言,我只需要为其安装 daocloud 的被控端程序即可,然后就可以再也不用管这台服务器了,太爽了吧~

    恰好发现腾讯云也支持了 daocloud 的系统,在为云服务器安装系统的时候选择服务市场-Docker 容器-Daocloud 混合式容器管理平台即可。

    哇,那这样岂不是爽上加爽,不用登录服务器做任何配置~拿来即用,真刺激。


    安装过程就不多说了,他们也提供了文档,非常简单,两行命令而已,然后我们可以在 daocloud 后台添加我们的主机了。


    然后我们去创建一个项目


    需要我们设置代码源,可以选择 github 和 coding ,确实比较人性化,那么我们就需要自己去 github 创建好 git 项目了,这里省略过,选择好后就可以创建了。

    项目创建成功后我们只需要选择我们的代码分支构建一下就好了,这时容器镜像就创建好了,下来就是部署。

    创建一个应用,会提示我们选择镜像来源,这里选择之前构建的镜像
    点击部署最新版本就好了

    然后我们分别在项目设置和应用设置里配置自动构建和自动部署,这样以后我们只要提交了代码, daocloud 会帮我们自动构建镜像然后部署,不需要我们自己手动操作,只需要专注代码逻辑,不用再操心部署了。



    过程就是这么简单,腾讯云服务器作为基础,我们全程不用手动配置自己的服务器,多么轻松惬意。

    程序实现

    前面重点讲了服务器配置和程序部署,但是实际上部署的程序我们还没讲。

    容器打包必须要有一个 Dockerfile 来告诉容器如何构建镜像,为了构建方便我们采用的 daocloud 提供的 python 镜像,以下是 dockerfile 的内容:

    FROM daocloud.io/python:3-onbuild ENTRYPOINT ["python"] CMD ["run.py"] 

    可以看到,我们启动服务的文件是run.py

    run.py

    #!/usr/bin/env python3 import bot.xiaoweiwei as wechat def main(): wechat.run() if __name__ == "__main__": main() 

    xiaoweiwei.py

    import itchat from target.youku import YoukuData from target.qqvideo import QQVideoData from plugins.tuling import get_response 

    @itchat.msg_register('Text')
    def text_reply(msg):
    itchat.send('/抠鼻',msg['FromUserName'])
    return u'你好,请在群聊里面撩我 /微笑'

    @itchat.msg_register('Text', isGroupChat=True)
    def group_reply(msg):
    if msg['isAt']:
    if u'播放量' in msg['Text']:
    data = YoukuData()
    if not data.check:
    return '查询失败!'
    num = data.get_play_num()
    itchat.send(u'优酷目前累计播放量为:%s' % num, msg['FromUserName'])
    data = QQVideoData()
    if not data.check:
    return '查询失败!'
    num = data.get_play_num()
    return u'腾讯视频目前累计播放量为:%s' % num
    elif u'订阅' in msg['Text']:
    data = YoukuData()
    if not data.check:
    return '查询失败!'
    num = data.get_sub_num()
    return '目前优酷订阅人数为:%s' % num
    elif '详细播放' in msg['Text']:
    itchat.send('查询中...', msg['FromUserName'])
    data = YoukuData()
    if not data.check:
    return '查询失败!'
    d = data.get_play_num_more()
    itchat.send(d, msg['FromUserName'])
    data = QQVideoData()
    if not data.check:
    return '查询失败!'
    d = data.get_play_num_more()
    return d
    else:
    return get_response(msg['Text'][5:])

    def run():
    itchat.auto_login(True,enableCmdQR=2)
    itchat.run()
    >youku.py ```python import util homepage = 'http://i.youku.com/i/UMzg0ODQyNDk4OA==/videos' class YoukuData(object): def __init__(self,url=homepage): self.ulr = url self.check = True self.soup = util.get_soup(url) if self.soup is None: self.check = False #获得播放量 def get_play_num(self): vnum = self.soup.select('.vnum') if vnum is not None: x = vnum[0] n = x.get('title') num = n else: num = '**找不到播放量**' return num #获得订阅数 def get_sub_num(self): snum = self.soup.select('.snum') if snum is not None: x = snum[0] n = x.get('title') num = n else: num = '**找不到订阅数**' return num #详细播放量 def get_play_num_more(self): titles = self.soup.select('.v-meta-title') nums = self.soup.select('.v-num') times = self.soup.select('.v-publishtime') s = ' 优酷视频-最新%d 个视频:\n' % len(titles) for x in range(len(titles)): s += str(x+1) + '.'+titles[x].string+'\n 播放量:'+nums[x].string+'\n' return s 

    这里程序实现很简单,使用的是 itchat 提供的方法,具体可以参考 itchat 项目https://github.com/littlecodersh/ItChat

    总结

    以上就是快速实现微信机器人的思路,其实主要想表达的就是现在的云技术对于开发者、对于编程初学者都是非常友好的,我们完全不必要投入过多精力在运维和发布维护上,只需要专注代码就可以。这也是云为我们生活带来的另一个方面的改变吧。

    文章来自 https://www.qcloud.com/community/user/60367001488344385

    目前尚无回复
    关于     帮助文档     自助推广系统     博客     API     FAQ     Solana     3064 人在线   最高记录 6679       Select Language
    创意工作者们的社区
    World is powered by solitude
    VERSION: 3.9.8.5 36ms UTC 06:00 PVG 14:00 LAX 23:00 JFK 02:00
    Do have faith in what you're doing.
    ubao msn snddm index pchome yahoo rakuten mypaper meadowduck bidyahoo youbao zxmzxm asda bnvcg cvbfg dfscv mmhjk xxddc yybgb zznbn ccubao uaitu acv GXCV ET GDG YH FG BCVB FJFH CBRE CBC GDG ET54 WRWR RWER WREW WRWER RWER SDG EW SF DSFSF fbbs ubao fhd dfg ewr dg df ewwr ewwr et ruyut utut dfg fgd gdfgt etg dfgt dfgd ert4 gd fgg wr 235 wer3 we vsdf sdf gdf ert xcv sdf rwer hfd dfg cvb rwf afb dfh jgh bmn lgh rty gfds cxv xcv xcs vdas fdf fgd cv sdf tert sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf shasha9178 shasha9178 shasha9178 shasha9178 shasha9178 liflif2 liflif2 liflif2 liflif2 liflif2 liblib3 liblib3 liblib3 liblib3 liblib3 zhazha444 zhazha444 zhazha444 zhazha444 zhazha444 dende5 dende denden denden2 denden21 fenfen9 fenf619 fen619 fenfe9 fe619 sdf sdf sdf sdf sdf zhazh90 zhazh0 zhaa50 zha90 zh590 zho zhoz zhozh zhozho zhozho2 lislis lls95 lili95 lils5 liss9 sdf0ty987 sdft876 sdft9876 sdf09876 sd0t9876 sdf0ty98 sdf0976 sdf0ty986 sdf0ty96 sdf0t76 sdf0876 df0ty98 sf0t876 sd0ty76 sdy76 sdf76 sdf0t76 sdf0ty9 sdf0ty98 sdf0ty987 sdf0ty98 sdf6676 sdf876 sd876 sd876 sdf6 sdf6 sdf9876 sdf0t sdf06 sdf0ty9776 sdf0ty9776 sdf0ty76 sdf8876 sdf0t sd6 sdf06 s688876 sd688 sdf86