导读:今天准备了点干货——教你用Python每天给妹纸发心灵鸡汤。
没错,每天!长期的坚持显然要比某一天的突击更有诚意!
用对了Python,520每天都过!
这次真的是“面向对象编程”!
但凡一件事,稍微有些重复。我就考虑怎么样用程序来实现它。
这里给各位程序员朋友分享如何每天给朋友定时微信发送“晚安”,故事,新闻,等等……
最好运行在服务器上,这样后台挂起来更方便。
准备:
1.微信号
- python包
pip install wxpy
pip install requests
源码如下
#不要抄下源码就运行,你需要改动几个地方
from __future__ import unicode_literals
from threading import Timer
from wxpy import *
import requests
bot = Bot()
#bot = Bot(console_qr=2,cache_path="botoo.pkl")
#这里的二维码是用像素的形式打印出来!,如果你在win环境上运行,替换为bot=Bot()
def get_news1():
#获取金山词霸每日一句,英文和翻译
url = "http://open.iciba.com/dsapi/"
r = requests.get(url)
contents = r.json()['content']
translation= r.json()['translation']
return contents,translation
def send_news():
try:
my_friend = bot.friends().search(u'美女ABC')[0]
#你朋友的微信名称,不是备注,也不是微信帐号。
my_friend.send(get_news1()[0])
my_friend.send(get_news1()[1][5:])
my_friend.send(u"来自老公的心灵鸡汤!")
t = Timer(86400, send_news)
#每86400秒(1天),发送1次,不用linux的定时任务是因为每次登陆都需要扫描二维码登陆,很麻烦的一件事,就让他一直挂着吧
t.start()
except:
my_friend = bot.friends().search('夜未央')[0]#你的微信名称,不是微信帐号。
my_friend.send(u"今天消息发送失败了")
if __name__ == "__main__":
send_news()
进阶篇
使用Python自动对微信朋友定时问候(发送天气预报、黄历、每日一句)
采用的数据源如下:
天气预报:图灵机器人 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() #保证上述代码持续运行