社区所有版块导航
Python
python开源   Django   Python   DjangoApp   pycharm  
DATA
docker   Elasticsearch  
aigc
aigc   chatgpt  
WEB开发
linux   MongoDB   Redis   DATABASE   NGINX   其他Web框架   web工具   zookeeper   tornado   NoSql   Bootstrap   js   peewee   Git   bottle   IE   MQ   Jquery  
机器学习
机器学习算法  
Python88.com
反馈   公告   社区推广  
产品
短视频  
印度
印度  
Py学习  »  Python

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

coder-pig • 6 年前 • 593 次点击  

小猪的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交易啊

微信交流群超100人了,只能邀请进群了,so只能加我然后拉你了:

欢迎各种像我一样的Py初学者,Py大神加入,一起愉快地交流学♂习,van♂转py: (加我记得写明加群,不然一律不加!) 另外有人之前问过我有没有公号,其实有的, 不过还没开始写文章,写什么,写成什么样,目前还在想,欢迎提建议, 随缘更新,有兴趣可以关注一波~



今天看啥 - 高品质阅读平台
本文地址:http://www.jintiankansha.me/t/BznO0rvZT4
Python社区是高质量的Python/Django开发社区
本文地址:http://www.python88.com/topic/9642
 
593 次点击