在昨天的博客https://blog.csdn.net/cskywit/article/details/81506517中使用itchat接口实现每天上午对群成员进行问候,程序比较混乱,今天看到网上对wxpy库的使用,尝试了一下,看了wxpy库的文档,该库是基于itchat的封装,API使用更方便,于是使用之。
采用的数据源如下:
天气预报:图灵机器人 http://www.tuling123.com/
老黄历:极速数据 https://www.jisuapi.com/
每日一句:爱词霸 http://open.iciba.com/
以上API除了老黄历接口均免费,返回数据均为JSON格式
wxpy参考文档见h https://wxpy.readthedocs.io/zh/latest/bot.html
代码比较简单,使用了schedule库对实现定时调用,这个是个轻量级实现定时任务的库。代码附上:
# coding=utf-8
import schedule
from wxpy import *
import json
import requests
from urllib.parse import urlencode
from datetime import datetime
import time
bot=Bot(cache_path=True) #Windows上登陆网页微信,并保存登陆状态
#bot=Bot(cache_path=True,console_qr=2) #Linux服务器终端界面上使用:
WEATHER_KEY = 'XXXXX' # 这里填拿到的图灵机器人key
HUANGLI_KEY = "XXXXX" #这里填写拿到的老黄历key
def get_weather():
apiUrl = 'http://www.tuling123.com/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_KEY
data["year"] = datetime.now().year
data["month"] = datetime.now().month
data["day"] = datetime.now().day
url_values = urlencode(data)
url = "http://api.jisuapi.com/huangli/date" + "?" + url_values
r = 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 = 'http://open.iciba.com/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() #保证上述代码持续运行