在昨天的博客/cskywit/article/details/81506517中使用itchat接口实现每天上午对群成员进行问候,程序比较混乱,今天看到网上对wxpy库的使用,尝试了一下,看了wxpy库的文档,该库是基于itchat的封装,API使用更方便,于是使用之。
采用的数据源如下:
天气预报:图灵机器人/
老黄历:极速数据/
每日一句:爱词霸 /
以上API除了老黄历接口均免费,返回数据均为JSON格式
wxpy参考文档见h https://wxpy.readthedocs.io/zh/latest/bot.html
代码比较简单,使用了schedule库对实现定时调用,这个是个轻量级实现定时任务的库。代码附上:
# coding=utf-8import schedulefrom wxpy import *import jsonimport requestsfrom urllib.parse import urlencodefrom datetime import datetimeimport timebot=Bot(cache_path=True) #Windows上登陆网页微信,并保存登陆状态#bot=Bot(cache_path=True,console_qr=2) #Linux服务器终端界面上使用:WEATHER_KEY = 'XXXXX' # 这里填拿到的图灵机器人keyHUANGLI_KEY = "XXXXX" #这里填写拿到的老黄历keydef get_weather():apiUrl = '/openapi/api'data = {'key': WEATHER_KEY,'info': '北京今天天气', #这里换成你自己所在城市}try:r = requests.post(apiUrl, data=data).json()weather=r.get('text').split(':')[1]return "北京今日天气:"+weather+"\n"except:return "查询天气信息失败\n"def get_huangli():data = {}data["appkey"] = HUANGLI_KEYdata["year"] = datetime.now().yeardata["month"] = datetime.now().monthdata["day"] = datetime.now().dayurl_values = urlencode(data)url = "/huangli/date" + "?" + url_valuesr = requests.get(url)jsonarr = json.loads(r.text)if jsonarr["status"] != u"0":print(jsonarr["msg"])return "今日无黄历信息"result = jsonarr["result"]content1='天干地支:' + ','.join(result['suici'])content2='今日应当注意的生肖:' + result["chong"]content3='宜:' + ','.join(result['yi'])content4='忌:' + ','.join(result['ji'])return '今日黄历:'+content1+'\n'+content2+'\n'+content3+'\n'+content4+"\n"def get_everydayWords():url = '/dsapi/'r =requests.get(url)content = json.loads(r.text)return '每日一句:\n'+content['content'] +'\n'+content['note']+"\n"def get_context():return "美好的一天从我的问候开始:各位早上好!\n"+get_weather()+get_huangli()+get_everydayWords()+"发送信息时间:"+datetime.now().strftime('%Y-%m-%d %H:%M:%S')def SentChatRoomsMsg(name, context):my_group = bot.groups().search(name)[0]my_group.send(context)def job():group_list = ['男朋友们','女朋友们'] #这里填写群名字,可以发送至多个群content = get_context()for group_name in group_list:SentChatRoomsMsg(group_name, content)print('sended msg to ' + group_name +"\n"+ " content: " + content+"\n")schedule.every().day.at("7:30").do(job)while True:schedule.run_pending()#确保schedule一直运行time.sleep(1)bot.join() #保证上述代码持续运行