摘要:環(huán)境操作系統(tǒng)版本代碼實(shí)現(xiàn)我們要實(shí)現(xiàn)用來發(fā)微信,發(fā)送的內(nèi)容是每天最新的天氣信息。接下來就是登錄微信定時(shí)發(fā)送消息了。
0 引言
前段時(shí)間找到了一個(gè)免費(fèi)的天氣預(yù)報(bào)API,費(fèi)了好段時(shí)間把這個(gè)API解析并組裝成自己想用的格式了,就想著如何實(shí)現(xiàn)每天發(fā)送天氣信息給自己。最近無意中發(fā)現(xiàn)了wxpy庫(kù),用它來做再合適不過了。以下是wxpy庫(kù)的簡(jiǎn)介:
wxpy基于itchat,使用了 Web 微信的通訊協(xié)議,通過大量接口優(yōu)化提升了模塊的易用性,并進(jìn)行豐富的功能擴(kuò)展。實(shí)現(xiàn)了微信登錄、收發(fā)消息、搜索好友、數(shù)據(jù)統(tǒng)計(jì)、微信公眾號(hào)、微信好友、微信群基本信息獲取等功能。
廢話不多說,代碼寫起來。
1 環(huán)境操作系統(tǒng):Windows / Linux
Python版本:3.7.2
2 代碼實(shí)現(xiàn)我們要實(shí)現(xiàn)用Python來發(fā)微信,發(fā)送的內(nèi)容是每天最新的天氣信息。很明顯我們需要完成兩部分的準(zhǔn)備,先來看看獲取天氣信息這部分內(nèi)容。
2.0 準(zhǔn)備工作本文我們用到的第三方庫(kù)有requests、wxpyy,若環(huán)境還沒有,按如下方式進(jìn)行安裝即可。
pip install wxpy pip install requests2.1 獲取天氣信息
這里我使用的API的請(qǐng)求鏈接如下:
http://t.weather.sojson.com/a...
請(qǐng)求方式是GET方法,使用時(shí)注意更換為自己城市對(duì)應(yīng)的city_code,除此之外不用帶任何參數(shù)。
請(qǐng)求是restfull風(fēng)格,city_code為9位數(shù)字,如下示例:
{ "_id": 58, "id": 59, "pid": 3, "city_code": "101230201", "city_name": "廈門" }
大家可以從_city.json文件中獲取各個(gè)城市對(duì)應(yīng)的編號(hào)。該文件我已經(jīng)放在Github本文章對(duì)應(yīng)的目錄下了,大家可自行查詢使用。
# weather API的URL,此處的城市編號(hào),參看_city.json url = "http://t.weather.sojson.com/api/weather/city/101010200" header = { "User-Agent": "Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/73.0.3683.75 Safari/537.36" } # 請(qǐng)求Weather API并拿到服務(wù)器返回的數(shù)據(jù) rep = requests.get(url, headers = header) rep.encoding = "utf-8" result = "" weather = rep.tex
這個(gè)API接口的返回值內(nèi)容很多,以下僅展示返回的部分信息。實(shí)際使用中僅用到三塊內(nèi)容,首先是城市信息。
"cityInfo": { "city": "海淀區(qū)", //請(qǐng)求城市 "cityId": "101010200", //城市ID "parent": "北京市", //上級(jí),一般是省份 "updateTime": "09:02" //天氣更新時(shí)間 }
其次是,該城市當(dāng)前天氣的空氣相關(guān)指數(shù)。
"data": { "shidu": "32%", //濕度 "pm25": 35.0, //pm2.5 "pm10": 97.0, //pm10 "quality": "良", //空氣質(zhì)量 "wendu": "7", //溫度 "ganmao": "極少數(shù)敏感人群應(yīng)減少戶外活動(dòng)", //感冒提醒(指數(shù)) }
第三部分,該城市當(dāng)前天氣的溫度風(fēng)力等另外一些指數(shù)。
"forecast": [ //今天+未來14天 { "date": "16", //日期 "sunrise": "06: 28", "high": "高溫 20.0℃", "low": "低溫 2.0℃", "sunset": "18: 21", "aqi": 48.0, "ymd": "2019-03-16", //年月日 "week": "星期六", "fx": "西北風(fēng)", //風(fēng)向 "fl": "3-4級(jí)", //風(fēng)力 "type": "晴", "notice": "愿你擁有比陽光明媚的心情" } ]
注:這個(gè)API接口返回值完整的示例,請(qǐng)見Github中本文章目錄下的weather.json文件。
拿到返回值之后,需要解析,并轉(zhuǎn)換組裝成我們想要的格式。
# 解析服務(wù)器返回的數(shù)據(jù),具體可參考weather.json文件 index_cityInfo = weather.find("cityInfo") index_cityId = weather.find("cityId") index_shidu = weather.find("shidu") index_pm25 = weather.find("pm25") index_pm10 = weather.find("pm10") index_quality = weather.find("quality") index_wendu = weather.find("wendu") index_ganmao = weather.find("ganmao") index_forecast = weather.find("forecast") index_ymd = weather.find("ymd", index_forecast) index_week = weather.find("week", index_forecast) index_sunset = weather.find("sunset", index_forecast) index_high = weather.find("high", index_forecast) index_low = weather.find("low", index_forecast) index_fx = weather.find("fx", index_forecast) index_fl = weather.find("fl", index_forecast) index_aqi = weather.find("aqi", index_forecast) index_type = weather.find("type", index_forecast) index_notice = weather.find("notice", index_forecast)
這是我最終想達(dá)到的效果如下:
# 今日天氣預(yù)報(bào) # 年月日 + 星期 + 所在地城市 # 天氣類型 + 風(fēng)向 + 風(fēng)力 # 溫度范圍(最低溫度~最高溫度) # 污染指數(shù):PM2.5/PM10/AQI # 空氣質(zhì)量 # 當(dāng)前溫度 + 空氣濕度 # Notice信息
轉(zhuǎn)換化具體代碼就是這樣子的:
result = "今日天氣預(yù)報(bào)" + " " + weather[index_ymd + 6:index_week - 3] + " " + weather[index_week + 7:index_fx - 3] + " " + weather[index_cityInfo + 19:index_cityId - 3] + " " + "天氣: " + weather[index_type + 7:index_notice - 3] + " " + weather[index_fx + 5:index_fl - 3] + weather[index_fl + 5:index_type - 3] + " " + "溫度范圍:" + weather[index_low + 9:index_sunset - 3] + " ~" + weather[index_high + 10:index_low - 3] + " " + "污染指數(shù): PM2.5:" + weather[index_pm25 + 6:index_pm10 - 1] + "" + "PM10:" + weather[index_pm10 + 6:index_quality - 1] + " " + "AQI:" + weather[index_aqi + 5:index_ymd - 2] + " " + "空氣質(zhì)量:" + weather[index_quality + 10:index_wendu - 3] + " " + "當(dāng)前溫度:" + weather[index_wendu + 8:index_ganmao - 3] + " " + "空氣濕度:" + weather[index_shidu + 8:index_pm25 - 3] + " " + weather[index_notice + 9:weather.find("}", index_notice) - 1]
這樣我們的第一步,獲取天氣信息就完成了。接下來就是登錄微信定時(shí)發(fā)送消息了。
2.2 登錄微信定時(shí)發(fā)送消息首先要登錄微信,一行代碼就搞定了。這里實(shí)際上是掃二維碼登錄了一個(gè)Web版的微信。
# 初始化機(jī)器人,掃碼登陸微信,適用于Windows系統(tǒng) bot = Bot() # Linux系統(tǒng),執(zhí)行登陸請(qǐng)調(diào)用下面的這句 bot = Bot(console_qr=2, cache_path="botoo.pkl")
然后我們需要定義一個(gè)發(fā)送消息的函數(shù),將獲取并解析好的天氣信息發(fā)送給指定微信好友。
# 調(diào)用get_weather函數(shù) GW = get_weather() # 填入你朋友的微信昵稱,注意這里不是備注,也不是微信帳號(hào) my_friend = bot.friends().search(u"一個(gè)昵稱")[0] # 發(fā)送微信消息 my_friend.send(u"早上好Y(^o^)Y,這里是今日份的天氣信息請(qǐng)查收!") my_friend.send(GW) my_friend.send(u"Have a Nice Day!") # 每隔86400秒(1天),發(fā)送1次 t = Timer(86400, auto_send) t.start()
接下來,你可以使用try...except...語句來實(shí)現(xiàn)在消息失敗時(shí)發(fā)出告警:
try: """此處為發(fā)送消息的代碼,即上一段內(nèi)容""" except: # 你的微信昵稱,注意這里不是備注,也不是微信帳號(hào) my_friend = bot.friends().search("&嫻敲棋子&")[0] my_friend.send(u"報(bào)告老板,今日份的信息發(fā)送失敗了!")
最后運(yùn)行主函數(shù),調(diào)用發(fā)送消息的函數(shù)即可。
# 調(diào)用函數(shù)進(jìn)行消息發(fā)送 auto_send()3 效果展示
這是我清晨收到的微信消息截圖,看上去還不錯(cuò)。沒白忙活
文章版權(quán)歸作者所有,未經(jīng)允許請(qǐng)勿轉(zhuǎn)載,若此文章存在違規(guī)行為,您可以聯(lián)系管理員刪除。
轉(zhuǎn)載請(qǐng)注明本文地址:http://m.hztianpu.com/yun/43457.html
摘要:在我看來,很多人起床第一件事情就是看微信消息,既然這樣,我就勉為其難每天早晨給小姐姐發(fā)送一則天氣預(yù)報(bào)吧。聯(lián)想起之前看到的一個(gè)開源庫(kù),一個(gè)非常強(qiáng)大的微信調(diào)用類庫(kù),正好滿足我當(dāng)前的需要,那話不多說,開干。 前言 事情是這樣的,最近認(rèn)識(shí)的一位小姐姐有每天早晨看天氣預(yù)報(bào)的習(xí)慣。在我看來,很多人起床第...
摘要:只需要短短的幾行代碼結(jié)合微信就可以為你心愛的打造一個(gè)貼心智能小助理。每天早上的時(shí)候準(zhǔn)時(shí)推送今天天氣情況生活指數(shù)等。只需要兩行代碼即可注冊(cè)一個(gè)定時(shí)執(zhí)行事件,寫好提前想好的提醒語。淡忘你的小可愛提醒你該喝水了快喝一杯水showImg(https://user-gold-cdn.xitu.io/2019/5/20/16ad55bc4cf835a7); 只需要短短的幾行代碼結(jié)合微信就可以為你心愛的T...
摘要:前提雖然我們每天都會(huì)查看天氣,但是如果你能夠用限制微信每天早上七點(diǎn)定時(shí)為推送天氣預(yù)報(bào),生活指數(shù)。重要其中模塊是本項(xiàng)目以及后續(xù)項(xiàng)目中很重要的模塊,就是因?yàn)檫@個(gè)開源項(xiàng)目,我們才能使其與微信產(chǎn)生交互。 showImg(https://segmentfault.com/img/remote/1460000019558841?w=1920&h=1279); 前提 雖然我們每天都會(huì)查看天氣,但是如...
摘要:所以就想著自己寫一個(gè)干脆,經(jīng)過一周漫長(zhǎng)的開發(fā)主要是時(shí)間太零散了,把第一版定制化微信機(jī)器人給完成了,第一版里實(shí)現(xiàn)了幾個(gè)功能自動(dòng)添加好友,并同時(shí)根據(jù)附加信息打備注。 showImg(https://segmentfault.com/img/remote/1460000018578411?w=1080&h=719); 運(yùn)營(yíng)公眾號(hào)也有半年了,今年5月份開始的,之前一直用一款windows工具來...
摘要:項(xiàng)目背景龐大的用戶安裝量和恐怖的用戶使用時(shí)間,微信已成為國(guó)內(nèi)移動(dòng)互聯(lián)網(wǎng)上基礎(chǔ)設(shè)施級(jí)的應(yīng)用。以一周時(shí)間開發(fā)的微信天氣查詢助手,就是一次技術(shù)驗(yàn)證性嘗試。但就針對(duì)微信來說,不是最好的解決方案。 項(xiàng)目背景 龐大的用戶安裝量和恐怖的用戶使用時(shí)間,微信已成為國(guó)內(nèi)移動(dòng)互聯(lián)網(wǎng)上基礎(chǔ)設(shè)施級(jí)的應(yīng)用。 以微信為平臺(tái)的客服服務(wù)有很多方式,比如訂閱號(hào),服務(wù)號(hào),小程序,但受到微信官方的限制,如果想做一個(gè)聊天群的自...
閱讀 3021·2021-11-15 11:39
閱讀 1592·2021-08-19 10:56
閱讀 1154·2019-08-30 14:12
閱讀 3812·2019-08-29 17:29
閱讀 771·2019-08-29 16:21
閱讀 3476·2019-08-26 12:22
閱讀 1575·2019-08-23 16:30
閱讀 1099·2019-08-23 15:25