阅读 1845

小猪的Python学习之旅 —— 18.Python微信转发小宇宙早报

一句话概括本文

这篇非常简单好玩,利用itchat,监控特定信息,转发到特定微信群~


引言

上一篇 小猪的Python学习之旅 —— 17.Python数据分析:我主良缘交友了解下 貌似反响不错,一堆微信加群的,后面有个小伙伴说看到我的文章,是被推荐到了 掘金Python群的早报,掘金竟然还有官方Py群,妥妥地让他拉我进群啊,然后呢, 里面的掘金之饼赵小饼是个机器人,会拉人,发表之类的,觉得有些意思,自己 也搜了一下相关的库Star了,以后怕是会用到。这不,今天就搞了个简单的东西 玩玩,场景是这样的:

在干货群里有个蘑菇云大佬天天发小宇宙早报,比如今天的:

#每天清晨花60秒了解昨夜今晨的世界大事#

小宇宙整理第663天早安快报,3月30日,星期五,农历二月十四!

1、交通部:全国190个城市实现交通一卡通互联互通;

2、霍金墓地将与牛顿达尔文为邻 葬礼只邀请家人朋友参加;

3、央行货币金银工作会议:开展对各类虚拟货币的整顿清理;

4、三大运营商年报对比:赚钱方面,联通+电信=0.18个移动;

5、爱奇艺 正式登陆纳斯达克 成为目前国内视频平台中唯一的上市公司;

6、6秒42!国际田联正式官宣:中国选手苏炳添以6秒42的成绩创造了新的亚洲纪录!

7、WiFi万能钥匙回应“窃取用户密码”:原理是热点共享 不是破解;

8、动车降价!28条城际铁路动车票价最大折扣将提高至20%;

9、脸书丑闻发酵,剑桥分析母公司被指研究印度选民数据,花花公子宣布删除Facebook官方主页;

10、提议乐视破产重整或退市,孙宏斌或涉嫌"操纵市场";

【早安微语】Time goes by so fast, people go in and out of your life. 如梭时光,生命中人来人往

然后呢,之前自己发到过几个群里,都很喜欢看这个,然后天天早上@我发, 然而我也是转发别人的,别人没发我怎么发?我跟你讲我就是这个表情:

然后呢,每次我都要翻一堆聊天记录,找到小宇宙日报,然后转发, 有时蘑菇云大佬有事,或者我开会忙之类的,往往早报变成了午报。

说有没有公号之类的,就死了这条心吧,目前是没有的,专门发新闻那个 群是要付费的,已经问过小宇宙本人了,只是他偶尔会在一些群里发。

作为一个Py玩家,肯定要想办法解放自己的双手啊,让自动来,套路也不复杂:

监测到小宇宙或者蘑菇云发送的今天的小宇宙,就转发到特定的群。

怎么监测?

  • 1.抓包?naive,微信用的自己的协议,研究有得你研究。
  • 2.写个xposed模块,类似于自动抢红包的套路?监听接收消息的函数, 遇到是小宇宙的信息,直接把信息发送到特定的群?投入时间成本比较 高,有得整,最主要我知道些,并不熟悉...
  • 3.打开浏览器登录微信网页端,自己处理网页结构之类的?放弃

最后想起之前star的:itchatgithub.com/littlecoder…

啧啧,有点意思,反正写着基于微信网页端,网页端能干的,这个都能干。


1.用itchat写个小宇宙早报转发脚本

显示命令行走一波pip装下库:

pip install itchat
复制代码

接着分析下我们的流程:

  • 1.监听群聊信息
  • 2.正则过滤当天的小宇宙早报
  • 3.如果过滤到小宇宙早报,判断是否为小宇宙本人发的(避免有些人调戏机器人)
  • 4.把新闻转发到某些特定的群
  • 5.本地测试没问题后,把脚本丢到腾讯云服务器上跑

另外要注意:

移动端要保证微信号在线,不然网页端会断开链接,具体网页端时效性有多久, 还不知道,另外感觉长时间不发信息会被下线,故加个定时器,每隔半个小时 往一个没用的群里发送一条信息。

大概实现流程如上所述,接着开始撸代码

过滤小宇宙早报的正则

对接收到的信息做正则,小宇宙的,而且是特定人发的, 遍历群发的组,调用send方法发送信息。

接着main方法调用下,会弹出一个二维码页面让你扫:

接着就可以试试发下早报了,复制了今天的小宇宙,另外建了三个群聊, 接着随便往其中的一个发小宇宙~

到此相信就没什么疑问了吧,非常简单,接着Timer写个定时器, 每个半个小时往探挽懒月群里发一条广告词

代码如下

先把时间改成10s看下结果:

可以,接下来就是把脚本丢服务器上执行了。


2.把脚本丢到服务器上运行(利用Screen命令)

不知道你还记不记得ssh连服务器执行py脚本,终端关闭后,脚本也会停止, 如果不记得可以看回之前写的:8.爬虫实战:刷某博客站点的访问量 那里调用的是nohup命令,以后台程序的方式执行我们的脚本。

评论区那里有个掘金大佬评论说可以试试screen(虚拟终端),这里就来试试~

基本用法如下

  • 1.新建Screenscreen -S screen名字
  • 2.Screen里新建虚拟终端:组合键:ctrl + a + c
  • 3.在多个虚拟终端间切换:组合键:ctrl + a + p (上一个), ctrl + a + n (后一个),ctrl + a + shirt + " (终端列表之间切换)
  • 4.关闭一个虚拟终端ctrl + a + k 或者键入 exit
  • 5.挂起当前screen,回到之前的shell:ctrl + a + d
  • 6.重新连接screen:键入**screen -ls列出所有screen,键入screen - r xxx**重新连接;

接着依旧复制下小宇宙发到群里,看是否能正常转发~

到此就完了,脚本挂着,手机微信也需要登着,坐等明天小宇宙发早报 来检验效果啦~


小结

本节试了下itchat,写了个监控小宇宙发的日报,并转发到某特定群 的小脚本,挺有意思的,当然你可以自行扩展做个机器人,比如每天 定时发车,每日一女优介绍,每日一车牌号?或者一些其他的信息, 结合后台玩起来更嗨,当然这就是后面的事了~

最后祝周末愉快~


附:最终代码(都可以在:github.com/coder-pig/R… 找到):

# 微信小宇宙助手
import itchat
from itchat.content import *
import datetime
import re
import time
from threading import Timer

xyz_compile = re.compile(r'.*?小宇宙整理.*?%d月%d日.*'
                         % (datetime.datetime.now().month, datetime.datetime.now().day), re.S)


# 小宇宙日报抓取
@itchat.msg_register([TEXT], isGroupChat=True)
def xyz_reply(msg):
    group_list = [u'我是渣渣辉', u'我是轱天乐', u'探挽懒月']
    group_name = []
    for group in group_list:
        chat = itchat.search_chatrooms(name=group)
        if len(chat) > 0:
            group_name.append(chat[0]['UserName'])
    # 过滤小宇宙新闻
    result = xyz_compile.search(msg['Content'])

    if result is not None:
        if result.group() is not None and msg['ActualNickName'] == '十二':
            for group in group_name:
                itchat.send('%s' % (msg['Content']), toUserName=group)


# 发信息
def send_msg():
    sched_time = datetime.datetime(2018, 3, 30, 16, 30, 0)
    flag = 0
    while True:
        now = datetime.datetime.now()
        if now == sched_time < now < (sched_time + datetime.timedelta(seconds=10)):
            flag = 1
            time.sleep(1)
        else:
            if flag == 1:
                itchat.send('123', toUserName=u'探挽懒月')
                flag = 0


# 每个半个小时发依次信息貌似能防止掉线
def loop_send():
    global count
    itchat.send('大扎好,我系轱天乐,我四渣嘎辉,探挽懒月,介四里没有挽过的船新版本,'
                '挤需体验三番钟,里造会干我一样,爱像借款游戏。'
                , toUserName=itchat.search_chatrooms(name=u'探挽懒月')[0]['UserName'])
    count += 1
    if count < 10000:
        Timer(1800, loop_send).start()


if __name__ == '__main__':
    count = 0
    Timer(1800, loop_send).start()
    itchat.auto_login(enableCmdQR=2, hotReload=True)
    itchat.run()
复制代码

来啊,Py交易啊

想加群一起学习Py的可以加下,智障机器人小Pig,验证信息里包含: PythonpythonpyPy加群交易屁眼 中的一个关键词即可通过;

验证通过后回复 加群 即可获得加群链接(不要把机器人玩坏了!!!)~~~ 欢迎各种像我一样的Py初学者,Py大神加入,一起愉快地交流学♂习,van♂转py。


关注下面的标签,发现更多相似文章
评论