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
V2EX  ›  Python

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

  •  
  •   liuliliuli2017 · 2017-03-14 21:47:03 +08:00 · 1873 次点击
    这是一个创建于 2809 天前的主题,其中的信息可能已经有所发展或是发生改变。

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

    技术路径和实现思路


    首先编程语言使用了 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   ·   实用小工具   ·   5339 人在线   最高记录 6679   ·     Select Language
    创意工作者们的社区
    World is powered by solitude
    VERSION: 3.9.8.5 · 22ms · UTC 08:36 · PVG 16:36 · LAX 00:36 · JFK 03:36
    Developed with CodeLauncher
    ♥ Do have faith in what you're doing.