澳门威斯尼人平台登录接受Python来开荒Wechat成效

 

在移动社交时代,微信已经成为我们生活不可或缺的一部分。2017年的《微信数据报告》中显示:每天有380亿条消息从微信上发出,其中6亿条是语音消息,有350万个活跃的公众账号,并存在着8亿活跃粉丝。在其他诸如支付、出行等方面,也更是与我们的生活休憩相关。正如它的slogan那样:微信,是一个生活方式。

一个简单的需求,即定时启动python脚本,这种需求很常见,比如定时启动一段程序对服务器状态进行收集,写到文件中,方便运维后期审计,查看服务器占用高峰时间段,从而判断出公司产品在该时间段较多人使用,或定时清除其他程序的日志,释放线上服务器的空间,这块常见的架构是有个转存程序,将日志通过nginx文件服务挂起,然后该程序请求这种文件,将其存储在数据服务器中,而线上服务器的日志就不需要了(游戏日志通常比较大,所以转存程序也需要设计一下)。

以下三件瓷器,均是我前年拾荒的成果。

澳门威斯尼人平台登录 1

和微信有关的第三方框架很多,比如「wxpy」「wxBot」等,今天要使用的是其中著名的「itchat」Python模块,它是由第三方开发者@LittleCoder等架构实现的接口,该API的使用场景可以不仅仅只是一个微信机器人,更多的功能可以由我们自己去发现拓展。「itchat」的功能非常强大,调用却十分简单,同时,将「itchat」结合「matplotlib」「jieba」等模块,可以对我们的微信好友的信息进行一些收集与分析,让我们能更直观的了解我们自己的圈子。

本章主要来实现一下定时启动python的需求,当然,定时启动其他任何程序也都一样。

六朝青瓷三羊荷叶口尊

不论你是对Python初出茅庐,还是如指诸掌,这篇文章对你的收获总归还是有的啦,可能只是程度的问题。好了不扯远了,来说正题,下面在分享这套体系前还是要让Python做一下“自我介绍”。

一个自动回复机器人

Python threading模块

澳门威斯尼人平台登录 2

1.Python是:是一种面向对象的解释型计算机程序设计语言。来自荷兰,面向世界。

微信自上线以来,一直没有自动回复的功能,想必是有他们的理念。但是有些人群,确实对此功能有一定需求,我举两个栗子:

一开始,为了省事,直接使用python的threading模块,threading模块下有个Timer模块,它可以实现定时启动python程序的需求,用法如下:

澳门威斯尼人平台登录 3

2.Python优点:

  • 不愿时刻被消息打扰的人
  • 消息需要批量处理的人们(比如微商)

澳门威斯尼人平台登录 4

此尊高33厘米,我属羊,得了此尊后给自已取了个“三羊馆”的斋号。

♢与其他编程语言相比,它提供了丰富的数据类型和更易于阅读的语法

对此,我设计了几个功能:

这里有我自己整理了一套最新的python系统学习教程,包括从基础的python脚本到web开发、爬虫、数据分析、数据可视化、机器学习等。送给正在学习python的小伙伴!这里是python学习者聚集地,欢迎初学和进阶中的小伙伴!

六朝青瓷蛙鸟罐

♢它是一种独立于平台的脚本语言,可以完全访问操作系统API

功能列表:

来V性公粽号:“速学Python”,拿Python学习资料

澳门威斯尼人平台登录 5

♢与其他编程语言相比,它允许更多的运行时灵活性

  • [x] 收到消息立即自动回复
  • [x] 收到消息延迟指定时间回复
  • [x] 对不同好友定制不同的回复内容
  • [x] 在手机端随时进行控制

值得一提的是,timer需要使用global
timer
,据说尝试运行时,会释放无需使用的占用资源。

澳门威斯尼人平台登录 6

♢它包括Perl和Awk的基本文本操作工具

itchat的原理是通过扫码进行远程微信网页端的登录,然后通过在移动端进行操作,网页端进行响应,来实现一些功能,虽然似乎绕了个弯子,但是在微信的限制下,这似乎已经是一种最佳的方式了,犹如戴着镣铐起舞。

实现方法很简单,即创建Timer()实例,传入两个参数,分别是时间间隔与定时任务本身,构成一个死递归,然后就是调用Timer实例的start()方法。

此罐最大直径达20.5厘米。以前也见过类似的器形,都是水盂之类小件,资料上未有这么大尺寸的。

♢Python中的模块可能有一个或多个类和自由函数

首先我们需要考虑别的问题是:程序如何在微信端接收到你的指令。此时出现了一个非常重要的角色:文件管理器。(当网页端微信登陆后,消息列表会出现)此时,文件管理器充当了移动端和web端的桥梁。比如你给文件管理器传一个字符串作为指令,网页端接收到数据后就能根据你的预定来执行相应操作。

不推荐,虽然网上博客说使用global
timer会释放无用资源,但实际没有考证,这种写法在服务器上跑起来的程序通常一天就断,我周日启动该程序,周一来公司看,对应的python程序挂了。

澳门威斯尼人平台登录,唐五代至北宋越窑人物纹执壶

♢Pythons中的库与Linux,MacIntosh和Windows是跨平台兼容的

我们可以先通过设定几个全局变量来做作为功能的开关和保存数据的容器。

APScheduler

澳门威斯尼人平台登录 7

♢为了构建大型应用程序,Python可以编译为字节码

#自动回复开关
SWITCH_REPLY=True
#延迟回复开关
SWITCH_DELAY=False
#延迟时间
DELAY_TIME=120
#消息前缀开关
SWITCH_PREFIX=True
#消息前缀内容
PREFIX_CONTENT="[自动回复]"
#回复内容字典
REPLY_DICT={}
#延迟回复字典
DELAY_REPLY_DICT={}

APScheduler是Python用于执行定时操作的第三方框架,作为一个框架,它就有它对应的各种概念,没必要搞那么复杂,学习成本有点高,放弃

壶高约20厘米。

♢Python支持功能和结构化编程以及OOP

然后通过判断web端在”文件管理器“中接收到的字符串指令来进行不同操作,这一部分的代码比较简单且冗长,这里就不贴出来了,完整源码地址将会在文末给出。

Linux crontab

为了能进一步确它们的真伪,我在网上向“行家”请教过,有人点赞,有人放大脚踢我!我虽知踢人者非善者,还是气得我把仨瓷器打入“冷宫”一年多。直到昨天又查到了些资料,才重新“接见”他们,又燃起了我对它们的爱。还是那句话:信天信地信自已:

♢它支持交互模式,允许交互测试和调试代码片段

假如此时我们收到了朋友的消息,需要程序给出自动回复。

最总还是转到了Linux的crontab服务,该服务主要就是用于实现定时任务的,其语法如下:

♢在Python中,由于没有编译步骤,编辑,调试和测试很快。

#获取发送消息的朋友的信息
  target_friend=itchat.search_friends(userName = msg['FromUserName'])
  if target_friend:
   #获取ta的昵称
   nickName=target_friend['NickName']
   if not REPLY_DICT.__contains__(nickName):
    #设置默认回复
    REPLY_DICT[nickName]="抱歉我有事暂未看到消息,稍后回复,若有急事可以电话联系(•ω•`)"

   reply_content=REPLY_DICT[nickName]
   #判断自动回复开关
   if SWITCH_REPLY:
    #判断延时回复开关
    if SWITCH_DELAY:
     localtime = time.time()
     DELAY_REPLY_DICT[nickName]=[localtime,msg['FromUserName']]
     print (DELAY_REPLY_DICT)

    if not SWITCH_DELAY:
     #判断消息前缀开关
     if SWITCH_PREFIX:
      reply_content = PREFIX_CONTENT + REPLY_DICT[nickName]
     else:
      reply_content = REPLY_DICT[nickName]
     #发送消息
     itchat.send(reply_content, toUserName=msg['FromUserName'])

# .—————- minute

3.Python发展:web全栈工程师,人工智能工程师,爬虫开发工程师,Python开发工程师,数据分析工程师,游戏开发,测试自动化,互联网信息安全,算法工程师,搜索引擎工程师,ios
安卓开发,系统运维工程师。

收到朋友消息即时进行自动回复是很简单的,但是如何去做延时发送回复消息呢?(至于做这个功能有没有必要的问题可以先搁置,不过我认为在很多场景下是需要这个功能的,大家也可以在评论区讨论在什么场景下需要延迟自动回复)现在就回到技术的问题,如何实现可设置时间的延时自动回复。

# | .————- hour

下面我将把这套Python体系分为四个模块来分享给你。

我先谈一谈我的想法,抛砖引玉。一般发送消息需要用到队列,进行入队和出队,我在这里设置了一个字典来保存消息发送者的数据。键为消息发送者的昵称,值是一个长度为2的数组,分别保存消息发送者的微信id和接收消息时的时间戳。这样我将每条发送过来的朋友信息保存在这个字典中,再通过将设定延迟时间同消息时间戳求和与当前时间戳进行对比,若当前时间戳较大,那么执行发送消息的操作。

# | | .———- day of month

 

此时再开启一个线程作为定时任务,定时去检测字典中每条数据是否到达了发送的临界要求(当前时间戳>=消息时间戳+设定的延迟时间)Python中有个专门做定时任务的模块叫sched,但是我尝试了一下,sched会阻塞当前主线程,也会阻塞itchat的线程,所以并不合适。这里我还是采用了threading的Timer来充当定时器,不过要注意使用递归,否则将会出现运行一次就结束的情况。

# | | | .——- month OR jan,feb,mar,apr …

一、python网络爬虫

#延迟发送消息的函数
def delay_reply():
 #print("开始执行")
 global DELAY_REPLY_DICT
 if SWITCH_DELAY:
  while len(DELAY_REPLY_DICT)>0:
   localtime = time.time()
   # print (localtime)
   # print (DELAY_REPLY_DICT[item][0])
   # print (int(DELAY_TIME))
   for item in list(DELAY_REPLY_DICT.keys()):
    if SWITCH_REPLY:
     reply_content = item + "," + str(round(int(DELAY_TIME) / 60, 1)) + "分钟过去了," + REPLY_DICT[item]
     itchat.send(reply_content, toUserName=DELAY_REPLY_DICT[item][1])
     # print ("发送消息")
     del DELAY_REPLY_DICT[item]
   print (DELAY_REPLY_DICT)

 global timer1
 timer1=threading.Timer(DELAY_TIME,delay_reply)
 timer1.start()

# | | | | .—- day of week (Sunday=0 or 7) OR

首先给个大家简单的介绍一下爬虫:一段自动抓取互联网信息的程序,从互联网上抓取对于我们有价值的信息。

到此为止,主要的功能已经实现了,我用一个测试账号对我的微信进行了各种测试,看一下以下截图:

#sun,mon,tue,wed,thu,fri,sat

Python爬虫能可从网站某一个页面(通常是首页)开始,读取网页的内容,找到在网页中的其它链接地址,然后通过这些链接地址寻找下一个网页,这样一直循环下去,直到把这个网站所有的网页都抓取完为止。如果把整个互联网当成一个网站,那么网络蜘蛛就可以用这个原理把互联网上所有的网页都抓取下来。

澳门威斯尼人平台登录 8 

# | | | | |

为了让大家赏心悦目,我做了下面这张图来供大家学习。

 

# * * * * * command to be executed

 

澳门威斯尼人平台登录 9

minute:代表一小时内的第几分,范围 0-59。

澳门威斯尼人平台登录 10

澳门威斯尼人平台登录 11

hour:代表一天中的第几小时,范围 0-23。

 

澳门威斯尼人平台登录 12

mday:代表一个月中的第几天,范围 1-31。

二、Python人工智能

澳门威斯尼人平台登录 13

month:代表一年中第几个月,范围 1-12。

  这个模块我相信也是大家会比较感兴趣的一个,相信不用我介绍大家也会感受到它的普及和重要,说实话目前薪资最高、最受求职者追捧的岗位也毫无疑问是人工智能,如果你觉得和你没什么联系不妨看看你手里的智能手机。下面还是先给大家系统介绍一下,都是精华啊。

澳门威斯尼人平台登录 14

wday:代表星期几,范围 0-7 。

人工智能(Artificial
Intelligence):英文缩写为AI。它是研究、开发用于模拟、延伸和扩展人的智能的理论、方法、技术及应用系统的一门新的技术科学。

这时功能基本已经完成了,这就结束了吗?别着急,再想想有没有需要完善一下的地方?用过微信web端的同学应该知道,当web端长期处于未操作的状态下会失去连接。在我们这个情况下,假如你长时间未收到微信消息,后台程序将会与微信失去连接,再次开启需要登上服务器重启程序,这显然非常麻烦。有没有什么简单的解决办法呢?我想到一些应用的后台通常会做一道心跳检测机制,那我就模仿这个思路,定时给我的”文件管理器“发一个字符串,来保持连接。

who:要使用什么身份执行该指令,当您使用 crontab -e 时,不必加此字段。

 

def keep_alive():
 text="保持登录"
 itchat.send(text, toUserName="filehelper")
 global timer2
 timer2 = threading.Timer(60*60,keep_alive)
 timer2.start()

command:所要执行的指令。

澳门威斯尼人平台登录 15

最后,我们需要将这个程序发布在服务器上,让它全天候为我的微信服务。

crontab服务状态

 

澳门威斯尼人平台登录 16 

sudo service crond start

三、Python WEB开发

这里需要注意,如果仅用 python xxxx.py
来运行的话,关闭shell会导致进程结束,所以我们需要使用 nohup python
xxxx.py &
来全方位守护进程,这里啰嗦一句,nohup和&的功能是不一样的,很多人容易混淆,感兴趣的话可以去查下资料区分一下。

#启动服务

WEB:(World Wide
Web)即全球广域网,也称为万维网,它是一种基于超文本和HTTP的、全球性的、动态交互的、跨平台的分布式图形信息系统。

到此,微信经过了我们的稍稍调教,已经乖了一点。但是,这远远不够,思路可以继续拓展,比如实现通过手机微信来控制电脑的开关机,电脑软件的启动关闭,都是可以的,甚至实现控制家中的空调,理论上也未尝不可,只是比较有难度。

sudo service crond stop

Web前端:
顾名思义是来做Web的前端的。我们这里所说的前端泛指Web前端,也就是在Web应用中用户可以看得见碰得着的东西。包括Web页面的结构、Web的外观视觉表现以及Web层面的交互实现。

简单分析微信好友信息

#关闭服务

Web后端:后端更多的是与数据库进行交互以处理相应的业务逻辑。需要考虑的是如何实现功能、数据的存取、平台的稳定性与性能等。

上文提到,既然我们能通过itchat来获取好友的信息,那让我们看看都有哪些好玩的信息。这是以json形式返回的我的信息,同理我的好友的这些公开信息我也能获取到。

sudo service crond restart

 

我们就来进行一些简单的的数据抓取,清洗与呈现。我看中的字段是:Sex、City、Province、Signature。我想做的是通过图表来直观地展示我微信好友中的
性别比例 , 家乡分布 (当然不一定准确,很多人都是胡乱设置的),
我的江苏朋友的市级分布 ,以及 好友个性签名的词云
。这部分内容主要是需要熟悉诸如pyecharts、jieba、wordcloud模块的API调取,难度不大,但需要细心调试。我这里就不详细赘述了,有疑问可以在评论区讨论。

#重启服务

澳门威斯尼人平台登录 17

性别比例

sudo service crond reload

四、Python自动化运维

def get_sex():
 # 获取好友数据
 my_friends = itchat.get_friends(update=True)[0:]
 sex = {"male": 0, "female": 0, "other": 0}
 for item in my_friends[1:]:
  s = item["Sex"]
  if s == 1:
   sex["male"] += 1
  elif s == 2:
   sex["female"] += 1
  else:
   sex["other"] += 1
 total = len(my_friends[1:])

#重新载入配置

运维自动化:是一组将静态的设备结构转化为根据IT服务需求动态弹性响应的策略,目的就是实现IT运维的质量,降低成本。可以说自动化一定是IT运维最高层面的重要属性之一,但不是全部。

澳门威斯尼人平台登录 18 

sudo service crond status

大多数运维团队面临的最核心问题在于——如何用更少的资源完成更多工作。自动化运维则是这一问题的理想解决方案,而它的5大好处:降低成本
提高生产力  高可用  更可靠  性能优化。

好友省级分布

#查看服务状态

好了,这已经是最后一个模块了,如果想要一起学习交流的小伙伴可以进进群讨论:425851955或者需要学习资料的也欢迎。

def get_data(type):
 result=[]
 my_friends = itchat.get_friends(update=True)[0:]
 for item in my_friends:
  result.append(item[type])
 return result
def friends_province():
 # 获取好友省份
 province= get_data("Province")
 # 分类
 province_distribution = {}
 for item in province:
  #删除英文省份,因为中国地图表中没有
  if bool(re.search('[a-z]',item)):
   continue
  elif not province_distribution.__contains__(item):
   province_distribution[item] = 1
  else:
   province_distribution[item] += 1
 #将省份名为空的删除
 province_distribution.pop('')
 #提取地图接口需要的数据格式
 province_keys=province_distribution.keys()
 province_values=province_distribution.values()
 return province_keys,province_values
if __name__ == '__main__':
 itchat.auto_login(True)
 微信好友省份分布
 attr,value=friends_province()
 map = Map("我的微信好友分布", "@寒食君",width=1200, height=600)
 map.add("", attr, value, maptype='china', is_visualmap=True,
   visual_text_color='#000')
 map.render()

查看定时任务

 

澳门威斯尼人平台登录 19 

crontab

澳门威斯尼人平台登录 20

省内分布

这一套体系到这里就分享完了,希望会对想要学Python的小伙伴有所帮助,如果你是零基础想要学Python的也不要着急,你可以先去试着了解到底什么是Python,前期学习可能会比较吃力,毕竟你也是刚刚才接触到,学习都是是要循序渐进的,重点是选择一个适合自己的学习方式,最后祝愿大家能马到成功!如果还有什么不懂的问题需要解答的,想要找人一起交流的都欢迎大家进来:425851955 有需要学习资料的小伙伴我也非常乐意提供给大家。

def friends_jiangsu():
 # 获取好友城市
 city_distribution={}
 city = get_data("City")
 jiangsu_city=["南通市","常州市","淮安市","连云港市","南京市","苏州市","宿迁市","泰州市","无锡市","徐州市","盐城市","扬州市","镇江市"]
 for item in city:
  item=item+"市"
  if item in jiangsu_city:
   if not city_distribution.__contains__(item):
    city_distribution[item]=1
   else:
    city_distribution[item]+=1
 # 提取地图接口需要的数据格式
 city_keys=city_distribution.keys()
 city_values=city_distribution.values()
 return city_keys,city_values
if __name__ == '__main__':
 itchat.auto_login(True)
 微信江苏好友分布
 attr,value=friends_jiangsu()
 map = Map("江苏好友分布","@寒食君", width=1200, height=600)
 map.add("", attr, value, maptype='江苏', is_visualmap=True,
   visual_text_color='#000')
 map.render()

l

澳门威斯尼人平台登录 21 

到这里,关于crontab常见的文件就是叫你使用
crontab-e来编写对应crontab配置文件,配置内容的语法如上,例子如下:

个性签名词云

澳门威斯尼人平台登录 22

def friends_signature():
 signature = get_data("Signature")
 wash_signature=[]
 for item in signature:
  #去除emoji表情等非文字
  if "emoji" in item:
   continue
  rep = re.compile("1f\d+\w*|[<>/=【】『』♂ω]")
  item=rep.sub("", item)
  wash_signature.append(item)
 words="".join(wash_signature)
 wordlist = jieba.cut(words, cut_all=True)
 word_space_split = " ".join(wordlist)
 coloring = np.array(Image.open("C:/Users/casua/Desktop/test1.JPG"))
 my_wordcloud = WordCloud(background_color="white", max_words=800,
        mask=coloring, max_font_size=80, random_state=30, scale=2,font_path="C:/Windows/Fonts/STKAITI.ttf").generate(word_space_split)
 image_colors = ImageColorGenerator(coloring)
 plt.imshow(my_wordcloud.recolor(color_func=image_colors))
 plt.imshow(my_wordcloud)
 plt.axis("off")
 plt.show()

但这边不会这样操作,这种写法并不适合于真正的工作中,就是一个Toy,我希望的是全自动化,这里通过shell脚本来实现自动添加crontab任务。

澳门威斯尼人平台登录 23 

shell脚本代码如下:

总结

澳门威斯尼人平台登录 24

以上所述是小编给大家介绍的使用Python来开发微信功能,希望对大家有所帮助,如果大家有任何疑问请给我留言,小编会及时回复大家的。在此也非常感谢大家对脚本之家网站的支持!

这是我使用的完整shell脚本,这里自动添加crontab任务的命令只有一行,就是
echo”* * * * * ${work_path}start.sh start >>
${work_path}logs/cron.log
2>&1″>>/var/spool/cron/root,这个命令会每分钟都会调用start.sh脚本,而start.sh脚本中启动了python,几个坑需要注意,crontab中请使用绝对路径,因为crontab启动程序时,相对路径所对应的坐标系其实与你手动启动该脚本时是不同的,使用绝对路径省事,这里还将star.sh脚本的输出内容都重定向到对应的日志文件中。

您可能感兴趣的文章:

  • python微信公众号开发简单流程
  • Python微信公众号开发平台
  • Python微信企业号开发之回调模式接收微信端客户端发送消息及被动返回消息示例
  • Python开发微信公众平台的方法详解【基于weixin-knife】
  • 利用Python开发微信支付的注意事项
  • Python开发之快速搭建自动回复微信公众号功能
  • python
    tornado微信开发入门代码

私信菜鸟有神秘惊喜哦!007

为什么不直接通过crontab启动python程序呢?而是要再绕一层,通过shell脚本来启动,这其实也是一个坑,除非你是单python文件,不然通常都使用shell脚本的形式启动python,而不在直接使用crontab来启动,这同样是因为crontab启动的任务相对路径的坐标系改变了,多文件的python项目相互引入文件时,使用的坐标系与crontab启动时不同,导致crontab直接启动python项目会失败,所以技巧就在于,通过shell脚本来启动python程序,在启动前,通过cd命令进入python项目对应的目录,这样就将启动时的相对路径的坐标系改成与python的一致了

具体可以看一下我的start.sh脚本,代码如下:

澳门威斯尼人平台登录 25

通过python启动任务的关键命令在于

澳门威斯尼人平台登录 26

首先会进入要启动python项目的所在目录,然后再通过python启动对应的py文件,这里使用python解释器同样要使用全路径,因为线上系统中存在多个python,因为该python程序是耗时程序,所以我希望它在后台运行,所以使用了
nohup与 &关键字,将其放在后台去运行。

题外话:

centos系统中的yum是依赖python的,具体到centos6,其yum依赖系统本身就存在的python2.6,但开发环境通常要使用python2.7,此时最好不要删除系统中自带的python2.6,如果你直接删除,会导致yum使用不了,此时就需要修改一下yum对应文件中的python指向,最好的方法就是直接安装python2.7,然后在/usr/bin下创建对应的软连接来使用。

小结

python程序员在工作中其实不能只会python,因为python虽然强大,但也会有其缺陷,所以什么好用,用什么才是对的,还有python是一种语言,不要被语言局限。

澳门威斯尼人平台登录 27

发表评论

电子邮件地址不会被公开。 必填项已用*标注