功能:定時發送問候給朋友和家族羣
效果圖:
怎麼製作呢?
如果您有服務器的話,可以將腳本部署在上面
但如果沒有的話,可能就得保持電腦不關機了
#!/usr/bin/env python3
#coding=utf-8
import schedule
import time
from datetime import datetime
import itchat
import json
import urllib.request
import requests
from urllib.parse import urlencode
import random
#城市代碼可以在 http://www.weather.com.cn/ 上搜索城市,然後在地址欄裏可以看到類似
#http://www.weather.com.cn/weather1d/101010100.shtml#search 這樣子的東西,裏面那串數字就是城市代碼
cityList_bsgs = [
{'code':'101240711','name':"會昌"}
]
#微信羣聊名
chatroom_list = ['自家羣']
#微信備註名
friend_list = ['張三','李四']
#迷信一波,獲取個黃曆
def get_huangli():
data = {}
#appkey 可以在"http://api.jisuapi.com/"免費申請,現在直接用下面這個也成
data["appkey"] = "8b7a3df10a84b04a"
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)
#print(jsonarr)
'''
無法判斷是否爲0
if jsonarr["status"] != "0":
print(jsonarr["msg"])
exit()
'''
result = jsonarr["result"]
#print(result)
content1='天干地支:' + ','.join(result['suici'])
content2='今日應當注意的生肖:' + result["chong"]
content3='宜:' + ','.join(result['yi'])
content4='忌:' + ','.join(result['ji'])
t = '今日黃曆:'+content1+'\n'+content2+'\n'+content3+'\n'+content4
# print(t)
return t
#每日一句
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"
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"]
content = city + "," + weather + ",最高氣溫:" + temp2 + ",最低氣溫:" + temp1
twitter = {'image': "icon\d" + img1, 'message': content}
return twitter
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"]
t = "美好的一天從我的問候開始:各位親人早上好!\n"+twitter_realTime+"\n"+twitter_wholeDay+'\n'+get_huangli()+'\n'+get_iciba()
#print(t)
return t
now = 0
def get_contextt(hello):
global now
bq = ['╭(●`∀´●)╯','╰(●’◡’●)╮',' (●’◡’●)ノ ','ヾ(*´▽‘*)ノ','╭(′▽`)╭','(′▽`)╯',' (ฅ´ω`ฅ)',' ♪(^∀^●)',' (●´∀`)♪','ヽ(。◕‿◕。)ノ','✧(๑•̀ㅂ•́)و✧','ε٩ (๑> 灬 <)۶з', '(๑´灬`๑)',' ٩(๑`灬´๑)۶' ,'(•̅灬•̅ )',' (๑ơ 灬 ơ)',' (ง •̀灬•́)ง']
#t = random.randint(0,len(bq)-1)
#random以時間爲種子,所以不適用於這裏的定時發送
if now == 16:
now = 0
t = now + 1
now = t
r = hello + bq[t]
return r
def SentChatRoomsMsg(name, context):
userName = "測試"
groups = itchat.get_chatrooms(update = True)
#print("groups: ")
#print(groups)
for room in groups:
if room['NickName'] == name:
#nonlocal userName
userName = room['UserName']
break
print("userName: "+userName)
itchat.send_msg(context, userName)
print("發送時間:" + datetime.now().strftime("%Y-%m-%d %H:%M:%S") + "\n")
print("發送到:" + name + "\n")
print("發送內容:" + context + "\n")
print("*********************************************************************************")
def SentFriendsMsg(name, context):
userName = "測試"
group = itchat.get_friends(update = True)
#print(group)
for fname in group:
if fname['RemarkName'] == name:
userName = fname['UserName']
break
print("userName: "+userName)
itchat.send_msg(context, userName)
print("發送時間:" + datetime.now().strftime("%Y-%m-%d %H:%M:%S") + "\n")
print("發送到:" + name + "\n")
print("發送內容:" + context + "\n")
print("*********************************************************************************")
def loginCallback():
print("***登錄成功***")
def exitCallback():
print("***已退出***")
if __name__ == "__main__":
itchat.auto_login(hotReload=True, enableCmdQR=2, loginCallback=loginCallback, exitCallback=exitCallback)
for sent_chatroom in chatroom_list:
schedule.every().day.at("07:00").do(SentChatRoomsMsg,name = sent_chatroom,context = get_context())
print("任務" + ":\n"+"待發送到:" + sent_chatroom + "\n"+"待發送內容:" + get_context() + "\n")
print("******************************************************************************\n")
for friend in friend_list:
schedule.every().day.at("07:00").do(SentFriendsMsg,name = friend,context = get_contextt('早上好!'))
schedule.every().day.at("23:00").do(SentFriendsMsg,name = friend,context = get_contextt('晚安!別再熬夜了。'))
print("任務" + ":\n"+"待發送到:" + friend + "\n")
print("******************************************************************************\n")
while True:
# 啓動服務,run_pending()運行所有可以運行的任務
schedule.run_pending()
運行之後會出現一個二維碼,就是那種在網頁登陸微信的二維碼。掃一下,確認登陸即可。
注:因爲這個相當於開了網頁版微信,所以如果在電腦端或網頁端再次登陸微信,程序將會結束