技术标签: Python
itchat是一个支持微信控制的接口,可以对发送和接收的微信消息进行定制,网上有很多现成的实例,该API的使用可以参考http://itchat.readthedocs.io/zh/latest/,上面写得很详细,并且有实例,本文在此基础上参考了网络上的部分代码,完成每天上午自动对几个群的朋友进行问候,发送问候语、黄历和每日一句。其中黄历使用了极数据的黄历接口,见https://www.jisuapi.com/,但是该接口有使用100次的限制,也可以使用聚合数据接口,这个没有次数限制。每日一句使用了爱词霸的每日一句接口,网上有很多例子可供参考。天气预报使用了中国天气网数据,将城市代码换成自己所在城市的即可。代码比较简单,使用Pyhton3.6,功能已实现,贴出来供参考,下一步工作是将杂乱的功能函数封装成类,使代码更加紧凑。
安装itchat方法:pip install itchat
代码如下:
# coding=utf-8
from datetime import datetime
import itchat
from apscheduler.schedulers.background import BlockingScheduler
import json
import urllib.request
import requests
from urllib.parse import urlencode
cityList_bsgs = [
{'code':'101290801','name':"楚雄"}
]
chatroom_list =['男朋友们','女朋友们']
def get_huangli():
data = {}
data["appkey"] = "换成自己的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"])
exit()
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
def get_iciba():
url = 'http://open.iciba.com/dsapi/'
r =requests.get(url)
content = json.loads(r.text)
return '每日一句:\n'+content['content'] +'\n'+content['note']
def getCityWeather_RealTime(cityID):
url = "http://www.weather.com.cn/data/sk/" + str(cityID) + ".html"
try:
stdout = urllib.request.urlopen(url)
weatherInfomation = stdout.read().decode('utf-8')
jsonDatas = json.loads(weatherInfomation)
city = jsonDatas["weatherinfo"]["city"]
temp = jsonDatas["weatherinfo"]["temp"]
fx = jsonDatas["weatherinfo"]["WD"] #风向
fl = jsonDatas["weatherinfo"]["WS"] #风力
sd = jsonDatas["weatherinfo"]["SD"] #相对湿度
tm = jsonDatas["weatherinfo"]["time"]
content = city +" " + temp + "℃ " + fx + fl + " " + "相对湿度" + sd + " " + "发布时间:" + tm
twitter = {'image': "", 'message': content}
except (SyntaxError) as err:
print(">>>>>> SyntaxError: " + err.args)
except:
print(">>>>>> OtherError: ")
else:
return twitter
finally:
None
#返回dict类型: twitter = {'image': imgPath, 'message': content}
def getCityWeather_AllDay(cityID):
url = "http://www.weather.com.cn/data/cityinfo/" + str(cityID) + ".html"
try:
stdout = urllib.request.urlopen(url)
weatherInfomation = stdout.read().decode('utf-8')
jsonDatas = json.loads(weatherInfomation)
city = jsonDatas["weatherinfo"]["city"]
temp1 = jsonDatas["weatherinfo"]["temp1"]
temp2 = jsonDatas["weatherinfo"]["temp2"]
weather = jsonDatas["weatherinfo"]["weather"]
img1 = jsonDatas["weatherinfo"]["img1"]
img2 = jsonDatas["weatherinfo"]["img2"]
ptime = jsonDatas["weatherinfo"]["ptime"]
content = city + "," + weather + ",最高气温:" + temp2 + ",最低气温:" + temp1
twitter = {'image': "icon\d" + img1, 'message': content}
except (SyntaxError) as err:
print(">>>>>> SyntaxError: " + err.args)
except:
print(">>>>>> OtherError: ")
else:
return twitter
finally:
None
def get_context():
for city in cityList_bsgs:
title_small = "[楚雄实时天气预报]"
twitter = getCityWeather_RealTime(city['code'])
print(title_small + twitter['message'])
twitter_realTime = title_small + twitter['message']
for city in cityList_bsgs:
title_small = "[楚雄全天天气预报]"
twitter = getCityWeather_AllDay(city['code'])
print(title_small + twitter["message"])
twitter_wholeDay = title_small + twitter["message"]
return "美好的一天从我的问候开始:各位亲人早上好!\n"+twitter_realTime+"\n"+twitter_wholeDay+'\n'+get_huangli()+'\n'+get_iciba()
def SentChatRoomsMsg(name, context):
itchat.get_chatrooms(update=True)
iRoom = itchat.search_chatrooms(name)
for room in iRoom:
if room['NickName'] == name:
userName = room['UserName']
break
itchat.send_msg(context, userName)
print("发送时间:" + datetime.now().strftime("%Y-%m-%d %H:%M:%S") + "\n")
print("发送到:" + name + "\n")
print("发送内容:" + context + "\n")
print("*********************************************************************************")
scheduler.print_jobs()
def loginCallback():
print("***登录成功***")
def exitCallback():
print("***已退出***")
itchat.auto_login(hotReload=True, enableCmdQR=True, loginCallback=loginCallback, exitCallback=exitCallback)
scheduler = BlockingScheduler()
#name = '老寸家'
#context =get_context()
for sent_chatroom in chatroom_list:
scheduler.add_job(SentChatRoomsMsg, 'cron', day_of_week ='0-6',hour =7,minute =30,kwargs={"name": sent_chatroom, "context": get_context()})
print("任务" + ":\n"+"待发送到:" + sent_chatroom + "\n"+"待发送内容:" + get_context() + "\n")
print("******************************************************************************\n")
scheduler.start()
以上是在Windows上的实现,由于想每天上午7点半在微信群自动问候:所以需要部署在服务器上,这里选择腾讯云Ubuntu服务器,在部署过程中遇到的问题是,服务器没有图形界面,itchat需要用二维码登录微信,在终端上打印出来的二维码不完整,没法登录,后来将登录部分代码调整如下,问题得到解决:
#若为Linux服务器如下,否则二维码显示不正常。如部分的linux系统,块字符的宽度为一个字符(正常应为两字符),故赋值为2
itchat.auto_login(hotReload=True, enableCmdQR=2, loginCallback=loginCallback, exitCallback=exitCallback)
后面遇到的问题是:执行python weixin.py &后程序执行,但关闭终端后程序自动退出,解决如下:
使用以下命令执行:nohup python -u weixin.py &
可以使用tail -f nohup.out查看程序执行情况,这样就可以关闭远程连接让程序自动执行了。
第二天早上七点半,两个微信群准时收到了使用我的微信账号自动发送的问候消息:
文章浏览阅读3.3k次,点赞13次,收藏20次。【基础算法】反转链表的三种方法_链表反转
文章浏览阅读317次。本次利用遗传算法筛选出最具有代表的自变量,再利用BP神经网络进行预测。_bp神经网络优化
文章浏览阅读2.5k次,点赞2次,收藏6次。初始客户编号为 1、2、3 的客户分别在 1、2、3 窗口同时办理业务;窗口 3 用时 2 分钟办理完 3 号客户的业务,变为空闲状态,并按顺序呼叫 4 号客户,4 号客户用时 4 分钟窗口 1 用时 3 分钟办理完 1 号客户的业务,变为空闲状态,并按顺序呼叫 5 号客户,5 号客户用时 7 分钟。例如: N=3.M=7、从编号3 的位置到综号 7 的位置共有5 条路线,分别为: (3->5->7),(3-5->6->7,(3->4-5->7(3->4->5->6>7) ,(3->4>6->7)。_python 蓝桥杯真题
文章浏览阅读1.4k次,点赞22次,收藏21次。基于RK3399 Android11 适配MIPI摄像头 OV13850_camera_etc.mk
文章浏览阅读6.4k次。一、排版1.WORD文档页面设置,页边距:上3.7cm,下3.5cm,左2.8cm,右2.6cm。具体操作过程中,根据版式要求,也可适当调整。2.字体要求:文章标题为二号方正小标宋、居中,标题内容多,可分多行,排成梯形或菱形,标题内容换行时注意词意完整,标题行距选择磅值约30-34之间,可根据版面自行设定。正文为三号仿宋,行距选择1.5倍行距,也可根据页面做适当调整。3.正文结束空2-3..._请示的页边距
文章浏览阅读6.8k次。Pandas提供了不同的方法将序列或索引与他们自己或者其他的对象进行拼接,所有的方法都是基于各自的cat()方法1.将单个序列拼接为一个完整字符串输出:2. 如果没有额外声明,sep即分隔符默认为空字串,即sep='':输出:3.默认情况下,缺失值会被忽略。使用na_rep参数,可以对缺失值进行赋值:输出:4.拼接序列和其他类列表型对象为新的序列cat()的第一个参数为类列表对象,但必须要确保长度与序列或索引相同.输出:..._pandas字符串拼接
文章浏览阅读553次。LLaMA 2 是 Meta 开发的大型语言模型,是 LLaMA 1 的后继者。LLaMA 2 可通过 AWS、Hugging Face 等提供商免费用于研究和商业用途。LLaMA 2 预训练模型接受了 2 万亿个标记的训练,上下文长度是 LLaMA 1 的两倍。其微调模型已经接受了超过 100 万个人工注释的训练。本文包含 LLama 2 所有相关资源,可帮助您快速入门。它包括以下链接:LLaMA 2 是什么?Lllama 2在线体验Llama2 背后的研究Llama 2 基准测试有多好。_llama-2-7b-chat-gguf 百度网盘
文章浏览阅读1.8k次,点赞5次,收藏26次。《C语言程序设计》谭浩强-学习笔记-课后习题答案(考前复习/考研/专升本/)_谭浩强课后习题csdn
文章浏览阅读1.1k次,点赞2次,收藏2次。1. 网络结构: Gate为全连接网络,用来学习哪个网络更重要。目前利用全连接网络选择网络部件重要性的方法很流行。“三个臭皮匠顶个诸葛亮?”,感觉很像bagging方法。2. 损失函数: 训练时softmax都有温度T=3蒸馏,测试时就恢复T=1。 最终的Loss 第一项代表各个分支的损失,第二项代表最后Teacher的损失,第三项代表各..._on the fly 蒸馏
文章浏览阅读4.1w次,点赞12次,收藏39次。遇到问题:安装软件需要获取截屏和屏幕录制的功能权限,但是发现打开系统设置->安全性与隐私-屏幕录制,右边竟然没有可勾选或可添加的App选项产生原因:经过网络搜索关键字,发现是因为系统升级到10.5,MacCataLina过程中位于/Library/Application Support/com.apple.TCC目录下的TCC.db文件损坏了。期间遇到的错误提示(Error: table access has 7 columns but 12 values were supplied)..._mac屏幕录制没有微信选项
文章浏览阅读260次。python一些练手小项目参考Pycharm+django2.2+python3.6+MySQL实现简单的考试报名系统Pycharm+Django之使用模型django基础之数据库操作使用pycharm调试django项目_pycharm 练手程序
文章浏览阅读8.2k次,点赞4次,收藏17次。百度文库答案有误。特写此博客。_汇编语言第三版实验4第三题