
(图片来源于互联网:http://img.xiazaizhijia.com/uploads/2018/0123/20180123093158149.jpg)
具体想实现的事情是:向微信朋友列表中的朋友群发为每个人私人订制的藏头诗。 比如你是萧平旌,朋友列表里的有两个好友,分别备注为林奚和萧平章,
那么这两人个人收到的藏头诗首字分别为:
平旌祝林奚新年快乐
平旌祝平章新年快乐
step1.安装python3.6
推荐使用最新的anaconda安装. 随后在anaconda prompt中使用pip install itchat
安装itchat
step2. 藏头诗api
之前花了些时间研究如何使用python写诗,较新的办法是使用tensorflow学习成千上万首古诗,然后自行写诗(类似的也可以写周杰伦/方文山 中国风的歌词),虽然有现成的代码,可是不懂tensorflow,调试起来也很麻烦,tensorflow还得从头学下,太浪费时间,居然发现了一个免费的藏头诗api, 超级好用,可以选择哪句押韵,五言还是七言,藏的字在句中的位置等,比自己训练的结果靠谱多了。
def gen_poetry(key='这是测试',p_len='7',p_type='1',p_rythm='2'):"""输入皆为strp_len=5 五言p_len=7 七言p_type=1 藏头p_type=2 藏尾p_type=3 藏中p_type=4 递增p_type=5 递减p_rythm=1 双句一压p_rythm=2 双句押韵p_rythm=3 一三四押"""from urllib import request, parseimport jsonshowapi_appid="**********"showapi_sign="**************************"url="http://route.showapi.com/950-1"send_data = parse.urlencode([('showapi_appid', showapi_appid),('showapi_sign', showapi_sign),('num', p_len),('type',p_type),('yayuntype', p_rythm),('key', key)])req = request.Request(url)try:response = request.urlopen(req, data=send_data.encode('utf-8'),timeout = 10) # 10秒超时反馈except Exception as e:print(e)result = response.read().decode('utf-8')result_json = json.loads(result)res_body=result_json['showapi_res_body']poetry_txt=res_body['list']return poetry_txt
这个函数主要来源于showapi的示例,需要自行上showapi网站注册,免费获取藏头诗的showapiappid和showapisign。另外这个showapi的网站有很多好玩的api可以尝试。函数会返回一个list,存放6个句子(如下),可以随机选取或者只选取某一句。
gen_poetry("萧平旌")
Out[2]:['萧关扫定犬羊群,平旦敲门门未开。旌旗不断春风前,','萧寥天清而灭云,平地寸步扃云岩。旌封香火几千年,','萧画枝活叶叶动,平川不见龙行雨。旌旆逶迤碣石间,','萧艾转肥兰蕙瘦,平地能开洞穴幽。旌封香火几千年,','萧何人杰足封侯,平碧浅春生绿塘。旌旆红尘已出城,','萧何身后散图书,平持旄节步空虚。旌封香火几千年,']
step3.安装itchat
itchat的原理大概是抓取微信网页版的的数据包,获得微信的请求数据,进而获得微信朋友的基本信息,如好友的头像、性别、所在地、个性签名、备注、昵称等。当然也可以发送和接受消息。这个module玩法很多,比如,可以做一些描述性统计,看下你的朋友的所在地分布,男的多还是女的多之类,或者是把朋友的个性签名做成一个词云,或者可以把所有好友的头像拼成一个大图,或者自己给自己安排一个聊天机器人~~这些内容都比较简单,可以百度教程和代码
在这里只需要用到最简单的两个功能,读取好友列表(好友备注名)和发送消息。 这里的问题会有:
好友需要备注正确,备注不对,发送的内容自然会有问题。
生僻字可能做不出诗句
诗句可能没什么特别的意义,看着一头雾水。 个人觉得祝福传达到就行了
微信网页版很小可能会被封几天【这个是比较囧】 因为如果使用python调用微信发消息,一秒钟可能发出上万条消息,也很容易被检测出来,所以用的时候要小心【目前想到的方法是在发送的时候使用time.sleep()的方法,尚未测试】。在自己小号上测试,还有用小号建立聊天机器人都没有被封过。自己在调试藏头诗祝福语的时候不小心用登陆了大号,结果好像是发了大概8+个朋友的信息,还好当时代码有个bug,不然要手动撤回100多条信息,可能是因为反复登录或信息发太快,网页版微信被封了几天。囧rz
itchat需要扫码登陆,目前python调用微信的基本都是这个module,不放心的就不要尝试了。
代码思路很简单:登陆微信,获取好友列表,获取id和备注名,使用备注名做藏头诗,对于备注名,两个字的名字用full name,三个字的名字使用given name,这样感觉更为亲切,少于2个字或者多于3个字的名字自行忽略。加上固定的内容,自己名字和新年祝福的藏头诗,发送。发送时自行加上时间间隔。
import itchatimport timeitchat.auto_login()friends = itchat.get_friends(update=True)[0:]for i in friends:name=i['RemarkName'] #获取备注名uname=i['UserName']msg1='平碧浅春生绿塘\n旌旗不断春风前\n祝辞回谢递丹霄\n'msg3='新歌一曲送祝福\n年年有余五谷丰\n快意人生精神爽\n乐享华年正从容\n'if len(name)==2:name_input=namemsg0='hey %s,平旌的新年祝福送上:\n'%name_inputmsg2=gen_poetry(name_input)[3]msg2=msg2.replace(',','\n')msg2=msg2.replace('。','\n')my_msg=msg0+msg1+msg2+msg3itchat.send(my_msg, toUserName=uname)#print(my_msg)elif len(name)==3:name_input=name[1:]msg0='hey %s,平旌的新年祝福送上:\n'%name_inputmsg2=gen_poetry(name_input)[3]msg2=msg2.replace(',','\n')msg2=msg2.replace('。','\n')my_msg=msg0+msg1+msg2+msg3itchat.send(my_msg, toUserName=uname)#print(my_msg)else:continuetime.sleep(10)
运行两段代码,平旌只需要用微信扫一个二维码,他的微信好友【假设只有两个:林奚和萧平章】便会各自收一条私人订制的微信消息:
林奚会收到如下内容:
hey 林奚,平旌的新年祝福送上: 平碧浅春生绿塘 旌旗不断春风前 祝辞回谢递丹霄 林端忽见南山色 奚斯跃而董狐蹶 新歌一曲送祝福 年年有余五谷丰 快意人生精神爽 乐享华年正从容
萧平章会收到如下内容:
hey 平章,平旌的新年祝福送上: 平碧浅春生绿塘 旌旗不断春风前 祝辞回谢递丹霄 平地能开洞穴幽 章仇兼琼持上天 新歌一曲送祝福 年年有余五谷丰 快意人生精神爽 乐享华年正从容
最后的最后:
今天调试增加了部分内容,修改了一些bug。
生僻字无法生成藏头诗,所以含有生僻字的不生成藏头诗,直接发送祝福。
msg2=gen_poetry(name_input)[3]except:msg2='\n'msg2=msg2.replace(',','\n')msg2=msg2.replace('。','\n')if len(msg2)!=16:msg2='\n'my_msg=msg0+msg1+msg2+msg3
try:
此外可使用
itchat.send(my_msg, toUserName='filehelper')
或者
print(my_msg) 进行调试
这次主题跟公众号主题不太一致。今天就是年三十了,本来是昨天群发的,结果现在才发现没发出去,估计下次可以用上。最后恭祝各位狗年吉祥:旺狗贺岁,欢乐祥瑞;旺狗汪汪,事业兴旺;旺狗打滚,财源滚滚;旺狗高跳,吉星高照;旺狗撒欢,如意平安;旺狗祈福,阖家幸福!
原创文章,转载请注明
您的关注和转发是我继续的动力,长按二维码识别关注。





