从零开始打造聊天机器人(0)之钉钉机器人实现自动推送美剧更新

引子

今年的4月,对于美剧以及漫威迷来说简直不要太爽。《权游》最后一季迎来史诗之战,漫威的《复联》也是EndGame。前两天蹲着0点场看了《复联4》的首映,3个小时,觉得很值。Tony是个遗憾,作为一枚小小程序猿,Tony这种科学天才真的是终极偶像,而Friday最为他得力的助手也是战绩斐然。有时候不免憧憬,什么时候我才能有自己的Friday呢?心动不如行动,那就从现在开始从零打造吧。

权游每周一更新一集,有时候事情多难免忘记,一不小心被剧透那简直就是内心一万头草泥马奔腾而过,所以,我的Friday就从一个简单的《权游》更新提示功能开启。

团队现在主推钉钉办公,里面的机器人接口也较为成熟,在没有考虑过多的情况下,选择了钉钉自定义机器人(webhook)的方式进行了我的聊天机器人开发之路。然而后来事实证明,在开始之前,对基础载体的调研还是得足够充分。

需求

本次功能需求简单明确:

  • 固定时间检查网站是否有更新
  • 有更新则主动在群里推送并@所有人
  • 推送信息包括更新到第几集,海报以及link地址

设计

这次功能需求比较简单,且相对来说较为定制化,所以设计上比较简单粗暴。不管怎么说,先干起来,后来有了新的想法,可以再重构。

  • 从某电影网站获取到《权游》剧集的更新信息,并找出更新到n集。找了一圈,发现电影天堂的比较简单,毕竟网页信息爬取不是我的特长 - -!
  • 本地存放上次更新的集数m,当n!=m则代表有更新
  • 有更新则在聊天群进行推送,并保存新的集数到本地
  • 写个脚本每天定时运行上面的程序,实现定时检查更新并推送

主要代码

'''
@Author: 公小虽
@LastEditors: 公小虽
@Description: 定制化推送,这里以《权利的游戏》为例
@Date: 2019-04-25 15:43:50
@LastEditTime: 2019-04-26 10:15:08
'''

import os
import requests
from dingtalkchatbot.chatbot import DingtalkChatbot
from lxml import etree
import settings  # 自定义模块,存放了webhook

url = r'https://www.dy2018.com/i/100723.html'
path = settings.BASE_DIR
filename = path + '/temp_data.txt'
def get_old_data(filename):
    '''
    @description: 根据filename获取老的集数并返回
    @param {filename} 本地存放集数的文件
    @return: old_data 老的集数
    '''
    old_data = ''
    if os.path.exists(filename):
        with open(filename, encoding='utf-8') as fn:
            old_data = fn.read()
    return old_data

def get_new_data(url):
    '''
    @description: 根据URL获取最新的集数并返回
    @param {url} 
    @return: 新的集数
    '''
    html = requests.get(url)
    html.encoding = 'gbk'
    text = etree.HTML(html.text)
    new_data = text.xpath('//*[@id="Zoom"]/div/ul/li[1]/a/text()')[0]
    return new_data

def teleplay_update():
    '''
    @description: 分别获取新的和老的数据,进行比较,一致则不提示,不一致则提示有更新
    @param {}
    @return:
    '''
    new_data = get_new_data(url)
    old_data = get_old_data(filename)
    print(new_data)
    print(old_data)
    if new_data != old_data:
        webhook = settings.WEBHOOK # settings.WEBHOOK中存放你机器人的专属webhook
        w_robot = DingtalkChatbot(webhook=webhook) # 建立机器人
        # 发送markdown格式信息
        w_robot.send_markdown(title='权利的游戏', text='### <权利的游戏>第八季\n'
                                '更新至'+new_data+'\n\n'
                                '![剧照](https://timgsa.baidu.com/timg?image&quality=80&size=b9999_10000&sec=1556196549485&di=6e39be30911dc075748e6da63b820a2a&imgtype=0&src=http%3A%2F%2Fwx1.sinaimg.cn%2Flarge%2F69bbca83gy1fxy76tgtvpj20hs0a03z5.jpg)\n'
                                '[观看地址]('+url+')\n', is_at_all=True)
        # 新的剧集数更新存放到本地
        with open(filename, 'w', encoding='utf-8') as fn:
            fn.write(new_data)

效果

剧集更新提醒

你可能感兴趣的:(从零开始打造聊天机器人(0)之钉钉机器人实现自动推送美剧更新)