暂无图片
暂无图片
暂无图片
暂无图片
暂无图片

【干货】教你用python给你的微信朋友群发私人订制的藏头诗

懒麻蛇 2021-08-18
1535

(图片来源于互联网: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, 超级好用,可以选择哪句押韵,五言还是七言,藏的字在句中的位置等,比自己训练的结果靠谱多了。

  1. def gen_poetry(key='这是测试',p_len='7',p_type='1',p_rythm='2'):

  2.    """

  3. 输入皆为str

  4. p_len=5 五言

  5. p_len=7 七言

  6. p_type=1 藏头

  7. p_type=2 藏尾

  8. p_type=3 藏中

  9. p_type=4 递增

  10. p_type=5 递减

  11. p_rythm=1 双句一压

  12. p_rythm=2 双句押韵

  13. p_rythm=3 一三四押

  14. """

  15.    from urllib import request, parse

  16.    import json

  17.    showapi_appid="**********"  

  18.    showapi_sign="**************************"  

  19.    url="http://route.showapi.com/950-1"

  20.    send_data = parse.urlencode([('showapi_appid', showapi_appid),


  21. ('showapi_sign', showapi_sign)

  22.        ,('num', p_len)

  23.        ,('type',p_type)

  24.        ,('yayuntype', p_rythm)

  25.        ,('key', key)


  26.    ])

  27.    req = request.Request(url)

  28.    try:

  29.        response = request.urlopen(req, data=send_data.encode('utf-8'),


  30. timeout = 10) # 10秒超时反馈

  31.    except Exception as e:

  32.        print(e)

  33.    result = response.read().decode('utf-8')

  34.    result_json = json.loads(result)

  35.    res_body=result_json['showapi_res_body']

  36.    poetry_txt=res_body['list']

  37.    return poetry_txt


这个函数主要来源于showapi的示例,需要自行上showapi网站注册,免费获取藏头诗的showapiappid和showapisign。另外这个showapi的网站有很多好玩的api可以尝试。函数会返回一个list,存放6个句子(如下),可以随机选取或者只选取某一句。

   gen_poetry("萧平旌")

  1. Out[2]:

  2. ['萧关扫定犬羊群,平旦敲门门未开。旌旗不断春风前,',

  3. '萧寥天清而灭云,平地寸步扃云岩。旌封香火几千年,',

  4. '萧画枝活叶叶动,平川不见龙行雨。旌旆逶迤碣石间,',

  5. '萧艾转肥兰蕙瘦,平地能开洞穴幽。旌封香火几千年,',

  6. '萧何人杰足封侯,平碧浅春生绿塘。旌旆红尘已出城,',

  7. '萧何身后散图书,平持旄节步空虚。旌封香火几千年,']

step3.安装itchat

itchat的原理大概是抓取微信网页版的的数据包,获得微信的请求数据,进而获得微信朋友的基本信息,如好友的头像、性别、所在地、个性签名、备注、昵称等。当然也可以发送和接受消息。这个module玩法很多,比如,可以做一些描述性统计,看下你的朋友的所在地分布,男的多还是女的多之类,或者是把朋友的个性签名做成一个词云,或者可以把所有好友的头像拼成一个大图,或者自己给自己安排一个聊天机器人~~这些内容都比较简单,可以百度教程和代码

在这里只需要用到最简单的两个功能,读取好友列表(好友备注名)和发送消息。 这里的问题会有:

  • 好友需要备注正确,备注不对,发送的内容自然会有问题。

  • 生僻字可能做不出诗句

  • 诗句可能没什么特别的意义,看着一头雾水。 个人觉得祝福传达到就行了

  • 微信网页版很小可能会被封几天【这个是比较囧】 因为如果使用python调用微信发消息,一秒钟可能发出上万条消息,也很容易被检测出来,所以用的时候要小心【目前想到的方法是在发送的时候使用time.sleep()的方法,尚未测试】。在自己小号上测试,还有用小号建立聊天机器人都没有被封过。自己在调试藏头诗祝福语的时候不小心用登陆了大号,结果好像是发了大概8+个朋友的信息,还好当时代码有个bug,不然要手动撤回100多条信息,可能是因为反复登录或信息发太快,网页版微信被封了几天。囧rz

  • itchat需要扫码登陆,目前python调用微信的基本都是这个module,不放心的就不要尝试了。


代码思路很简单:登陆微信,获取好友列表,获取id和备注名,使用备注名做藏头诗,对于备注名,两个字的名字用full name,三个字的名字使用given name,这样感觉更为亲切,少于2个字或者多于3个字的名字自行忽略。加上固定的内容,自己名字和新年祝福的藏头诗,发送。发送时自行加上时间间隔。

  1. import itchat

  2. import time

  3. itchat.auto_login()

  4. friends = itchat.get_friends(update=True)[0:]

  5. for i in friends:

  6.    name=i['RemarkName'] #获取备注名

  7.    uname=i['UserName']

  8.    msg1='平碧浅春生绿塘\n旌旗不断春风前\n祝辞回谢递丹霄\n'

  9.    msg3='新歌一曲送祝福\n年年有余五谷丰\n快意人生精神爽\n乐享华年正从容\n'

  10.    if len(name)==2:

  11.        name_input=name

  12.        msg0='hey %s,平旌的新年祝福送上:\n'%name_input


  13.        msg2=gen_poetry(name_input)[3]

  14.        msg2=msg2.replace(',','\n')

  15.        msg2=msg2.replace('。','\n')

  16.        my_msg=msg0+msg1+msg2+msg3

  17.        itchat.send(my_msg, toUserName=uname)

  18.        #print(my_msg)

  19.    elif len(name)==3:

  20.        name_input=name[1:]

  21.        msg0='hey %s,平旌的新年祝福送上:\n'%name_input

  22.        msg2=gen_poetry(name_input)[3]

  23.        msg2=msg2.replace(',','\n')

  24.        msg2=msg2.replace('。','\n')

  25.        my_msg=msg0+msg1+msg2+msg3

  26.        itchat.send(my_msg, toUserName=uname)

  27.        #print(my_msg)

  28.    else:

  29.         continue

  30.     time.sleep(10)




运行两段代码,平旌只需要用微信扫一个二维码,他的微信好友【假设只有两个:林奚和萧平章】便会各自收一条私人订制的微信消息:

林奚会收到如下内容:

hey 林奚,平旌的新年祝福送上:
平碧浅春生绿塘
旌旗不断春风前
祝辞回谢递丹霄
林端忽见南山色
奚斯跃而董狐蹶
新歌一曲送祝福
年年有余五谷丰
快意人生精神爽
乐享华年正从容


萧平章会收到如下内容:

hey 平章,平旌的新年祝福送上:
平碧浅春生绿塘
旌旗不断春风前
祝辞回谢递丹霄
平地能开洞穴幽
章仇兼琼持上天
新歌一曲送祝福
年年有余五谷丰
快意人生精神爽
乐享华年正从容


最后的最后:

今天调试增加了部分内容,修改了一些bug。

生僻字无法生成藏头诗,所以含有生僻字的不生成藏头诗,直接发送祝福。

           try:

  1.            msg2=gen_poetry(name_input)[3]

  2.        except:

  3.            msg2='\n'

  4.        msg2=msg2.replace(',','\n')

  5.        msg2=msg2.replace('。','\n')

  6.        if len(msg2)!=16:

  7.            msg2='\n'

  8.        my_msg=msg0+msg1+msg2+msg3



此外可使用

itchat.send(my_msg, toUserName='filehelper')

或者

print(my_msg) 进行调试


这次主题跟公众号主题不太一致。今天就是年三十了,本来是昨天群发的,结果现在才发现没发出去,估计下次可以用上。最后恭祝各位狗年吉祥:旺狗贺岁,欢乐祥瑞;旺狗汪汪,事业兴旺;旺狗打滚,财源滚滚;旺狗高跳,吉星高照;旺狗撒欢,如意平安;旺狗祈福,阖家幸福!



原创文章,转载请注明


您的关注和转发是我继续的动力,长按二维码识别关注。


文章转载自懒麻蛇,如果涉嫌侵权,请发送邮件至:contact@modb.pro进行举报,并提供相关证据,一经查实,墨天轮将立刻删除相关内容。

评论