【腾讯云的1001种玩法】零基础微信机器人实践:云技术对个人开发者的影响

前言

我是一名产品经理,平时对技术比较感兴趣,也正是因为对技术有所了解也让我的工作非常轻松,平时也看过很多技术文章,我认为技术文章要么就是给纯技术写的,要么就是给那些没有很深的编程基础但是热爱编程或者抱有期待的人看的,这篇文章是写给后者的,但是不代表内容非常基础,依然使用了目前比较热门的技术。

这次我们要做一个微信机器人,就是可以在微信与我们聊天的机器人,当然目的不是用图灵机器人那种API完成一些看似很好玩的聊天功能,好歹要让这个机器人有所作用。

那么来说说我的需求吧,我和朋友做了一个航模视频的自媒体,作为一个产品经理,我需要了解我发布的视频的实时播放量,但是完成这个操作需要进入优酷主页查看,包括还有每个视频的播放量数据都要自己去打开网页看,这样非常不方便,比如我们在群里聊到了播放量的话,那么就会有一个机器人告诉我们播放了多少,这样多么方便,而且看起来还很装逼,并且,想实现出来真的不难。

前提是我们已经站在巨人的肩膀上。

技术路径和实现思路

首先编程语言使用了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

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项目

总结

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

相关推荐

【腾讯云的1001种玩法】腾讯云上搭建微信AI机器人

【腾讯云的1001种玩法】微信个人订阅号后台server搭建入门教程

原创声明,本文系作者授权云+社区发表,未经许可,不得转载。

如有侵权,请联系 yunjia_community@tencent.com 删除。

编辑于

赵越的专栏

1 篇文章2 人订阅

我来说两句

0 条评论
登录 后参与评论

相关文章

来自专栏花叔的专栏

这是一个聚集了各路大神思路的小程序

楼主是个热衷技术的小伙伴,偶尔会做一下小玩意,今天给大家说说我做的第一个小程序 该小程序名字叫Nodes,顾名思义就是Node(节点)的聚合,就是思维的集合,首...

3616
来自专栏蛋未明的专栏

PHP压测优化

1223
来自专栏编程软文

快速开发微信小程序

2105
来自专栏腾讯移动品质中心TMQ的专栏

腾讯开源微服务 TARS 接口测试揭秘

Tars是将腾讯内部使用的微服务架构TAF(Total Application Framework)多年的实践成果总结而成的开源项目。在了解具体如何做tars接...

2.8K1
来自专栏携程技术中心

Qnext大会 | React Web——浏览器端复用React Native代码解决方案

原创专栏|杨乾军 ? 自2008年开始接触前端,至今已有8年的前端开发经验,是一名资深前端攻城狮。目前在去哪儿平台事业部前端架构组。 1 背景 ? 一直以来...

3146
来自专栏腾讯移动品质中心TMQ的专栏

【UTP自动化测试平台系列之终章】前端探索之路

UTP自动化测试平台是TMQ的一个联合项目,目的是方便大家更好地开展自动化测试建设工作,减少重复平台建设的成本,提高产品的自动化测试效率。但是随着项目规模与用户...

36711
来自专栏Java架构沉思录

MQ在分布式系统中的使用场景

一项技术的产生必然是为了解决问题而生,了解了一项技术解决的问题,就能够很轻松的理解这项技术的设计根本,从而更好地理解与使用这项技术。 消息中间件和RPC从根本...

621
来自专栏IT派

前端UI框架小汇总

IT派 - {技术青年圈} 持续关注互联网、大数据、人工智能领域 移动端UI框架 Mint UI(饿了么团队) 中文官网:http://mint-ui....

5084
来自专栏java一日一条

25个超有用的 AngularJS Web 开发工具

AngularJS是为了克服HTML在构建应用上的不足而设计的。HTML是一门很好的为静态文本展示设计的声明式语言,改善了JavaScript。

705
来自专栏视频咖

互动直播AVSDK1.8.4版上线了

请客户前往 https://console.qcloud.com/ilvb/avSdkDownload 下载

1081

扫码关注云+社区