zoukankan      html  css  js  c++  java
  • 【上班摸鱼】聊天机器人定时发送微博热搜

    【上班摸鱼】聊天机器人定时发送微博实时热搜新闻

    序言

    办公室总有一些人工作做的好,资讯掌握也不少,且总能第一时间获取最新资讯,某房地产公司基金快爆雷了,某男星劈腿女星出轨。
    图1
    作为搬砖能手的我们,也想实时关注国家大事,但又不想下载各种app以及打开某个页面。有没有一款功能能定时推送微博各种资讯以及各种新闻呢,且还能各种扩展,最主要是能独立修改配置。终于屌丝的我在周末不断尝试后,终于使用爬虫+ci定时触发的方式搞定了,用起来还不错。有兴趣同学可以尝试下
    效果如下:
    图1
    接下来给大家讲讲如何实现。

    实现框架

    该功能根据功能拆分,分为三个步骤,分别为python微博爬虫以及数据处理、企业微信机器人数据发送,CI定时构建出发

    • 微博爬虫
      1、python获取10条微博最新资讯
      2、bs4包对最新的数据网页进行解析
      3、过滤当前微博推广的热搜
      4、构建适企业微信机器人markdown数据
    • 企业微信机器人
      1、实现根据企业微信机器人接口进行请求方法
    • CI定时触发
      1、使用coding提供的免费ci构建执行python脚本
      2、设置该构建job的定时任务

    具体实现

    python实现脚本

    • 数据解析以及组装
      根据微博首页地址“https://s.weibo.com/top/summary?cate=realtimehot” ,分析对我们有用的数据字段,我们可以根据标签以及属性的方式找到相关的关键字,同时定义一条微博结构应该包含如下几个部分:
      1、ranking 排行
      2、message 具体的消息内容
      3、url 该条消息的超链接地址
      4、star 点赞数
      剩下的就可以通过该方式获取微博数据,具体的代码实现如下:
      图1
      图1
        def get_hot_message_from_weibo(self,message_num=10):
            '''
            从https://s.weibo.com/top/summary?cate=realtimehot获取热搜,热搜一小时更新一次
            :return: 返回字典类型,{title:标题,girlurl:图片地址
            '''
            self.url = "https://s.weibo.com/top/summary?cate=realtimehot"
            htmltext=self.get(self.url).text
            soup = BeautifulSoup(htmltext,'html.parser')
            hothtmls=soup.findAll(name="tr", attrs={"class" :""})
            hotsum = len(hothtmls)
            #传入长度超过热搜长度,返回为空
            hotmessages = []
            if message_num > hotsum:
                return dict()
            for hothtml in hothtmls:
                if hothtml.find(name='td',attrs={"class" :"td-01"}).text.strip()=='' or not hothtml.find(name='td',attrs={"class" :"td-01"}).text.strip().isdigit():
                    continue
                hotmessage = dict()
                hotmessage['ranking'] = hothtml.find(name='td', attrs={"class": "td-01"}).text
                hotmessage['message'] = hothtml.find(name='a').text
                hotmessage['url'] = 'https://s.weibo.com/'+hothtml.find(name='a').attrs['href']
                hotmessage['star'] = hothtml.find(name='span').text
                hotmessages.append(hotmessage)
                #热点消息支持10条
                message_num-=1
                if message_num <1:
                    break
            return hotmessages
    
    • 数据转markdown格式
      我先尝试在微信机器人修改好markdown的格式,该部分需要大家自由发挥格式,再把相应的格式转换为python脚本。具体的脚本参考如下:
      图1
        def deal_message_to_markdown(self,hotmessages=None):
    
            '''
            处理各种途径消息
            :param messages:
            :return:
            '''
            message='### 实时热搜
    
    <font color="comment">时间:%s</font>
    '%time.strftime("%Y-%m-%d %H:%M:%S", time.localtime())
            for hotmessage in hotmessages:
                message+='> [%s.%s](%s) <font color="warning">%s</font>
    '%(hotmessage['ranking'],
                                                 hotmessage['message'],
                                                 hotmessage['url'],
                                                 hotmessage['star'])
            return message
    

    企业微信发送

    内容比较简单,直接参考代码

        def send_wechart(self,wechart_url,msg=None):
            '''
            企业微信发送图片资源消息
            :param wechart_url: 企业微信机器人地址
            :param msg: 发送资源消息
            :return:
            '''
            header = {
                'Content-Type': 'application/json'
            }
            data = {
                "msgtype": "markdown",
                "markdown": {
                    "content": msg
                }
            }
            respone = requests.post(url=wechart_url, headers=header, json=data)
            return respone
    
    

    定时执行脚本CI

    • 进入coding平台(https://coding.net/) ,创建项目
    • 上传代码到git仓库
      图4
    • 进入持续集成平台,创建ci job
      图5
    • 复制pipline脚本到构建任务
      图6
    • 设置定时构建
      图6

    效果如下:

    图6
    测试
  • 相关阅读:
    eolinker使用初体验(一)
    微信小程序--地图组件与api-模拟器上返回的scale 与真机上不同--bindregionchange触发图标一直闪现问题
    wx.createSelectorQuery() 获取节点信息 获取不到解决方法
    各种兼容
    跨域
    判断为false的情况
    linux的ssh相关指令
    js用正则表达式将英文引号字符替换为中文引号字符
    JavaScript控制iframe中元素的样式
    jQuery匹配id 批量修改css属性
  • 原文地址:https://www.cnblogs.com/package/p/15316091.html
Copyright © 2011-2022 走看看