python使用微信推送消息


from wxpy import *   #該庫主要是用來模擬與對接微信操作的
import requests
from datetime import datetime
import time
import  schedule
from apscheduler.schedulers.blocking import BlockingScheduler #定時框架
import schedule
# 微信登錄,程序啟動會彈出二維碼,微信掃一掃登陸
bot = Bot(cache_path=True)
# cache_path = True表示開啟緩存,這樣在緩存生效的時間內可以避免每次啟動程序都進行微信掃碼了
# 然后我們寫一個變量,用來存在圖靈機器人的key,后面會用到(去圖靈申請一個免費的機器人即可)
tuling = Tuling(api_key="41648a0b8ed94a50ac08fb1cc7b5d1dd")
"""推送名單維護"""
def weather_friend():   #定義一個名為weather_friend的函數
    # 天氣推送名單  也可以送備注來搜索好友
    my_friends = []   # 創建一個空列表,用來存放好友名單
    my_friends.append(bot.friends().search(u'相忘於江湖')[0]) # 搜索指定好友並添加至列表
    # my_friends.append(bot.friends().search(u'🔥')[0])
    # my_friends.append(bot.friends().search(u'佐之格⊙魅殤')[0])
    return my_friends
# 發送的內容
def Weather(location): # 定義一個發送天氣的函數,並需要接收一個參數(該參數是好友在微信中設置的地點)
    #准備url地址
    path ='http://api.map.baidu.com/telematics/v3/weather?location=%s&output=json&ak=TueGDhCvwI6fOrQnLM0qmXxY9N0OkOiQ&callback=?'
    url = path % location
    response = requests.get(url) # 對該地址和參數進行get請求
    result = response.json() # 將返回的結果轉成json串
# 為了防止因好友未設置地點而導致程序報錯,所以需要對返回的error參數進行判斷
    if int(result['error']) != 0:  # 當error為0時,搜索是正常的,一旦不等於0,表示存在錯誤
        location = '北京'  # 此時將地址設為一個默認地址 如北京
        url = path % location  # 拼接新的url
        response = requests.get(url) # 在對新的url進行get請求
        result = response.json()
# 下面就是對正確請求到數據后的結果進行處理了
    # 問候語
    greetings = ('  早上好!這是今天的天氣預報!……\n機器人:你的小野貓\n')
    try: # 此處增加異常處理是因為當好友設置的地區為國外的時候,error返回值不會報錯,但不會有results
        # 取出天氣結果
        results = result['results']
    except:
        return "啊哦,我迷路了,找不到地點!" # 當沒有該地區的結果時,函數直接返回字符串,此時函數結束
# 當正常取出結果后,繼續進行下列操作

    # 取出數據字典第一天數據
    data1 = results[0]
    # 取出城市
    city = data1['currentCity']
    str1 = '  你的城市: %s\n' % city
    # 取出pm2.5值
    pm25 = data1['pm25']
    str2 = '  PM值: %s\n' % pm25
    # 評估空氣質量
    pollution = calculate(pm25) # 此時調用calculate函數進行計算,所以該函數要寫在此函數之前
    str3 = '  污染指數: %s\n' % pollution
    result1 = results[0]
    weather_data = result1['weather_data']
    data = weather_data[0]
    temperature_now = data['date']
    str4 = '  當前溫度: %s\n' % temperature_now
    wind = data['wind']
    str5 = '  風向  : %s\n' % wind
    weather = data['weather']
    str6 = '  天氣  : %s\n' % weather
    str7 = '  溫度  : %s\n' % data['temperature']
    try: # 此處異常操作是因為有時候返回結果里面不存在下方內容
        message = data1['index']
        str8 = '  穿衣  : %s\n' % message[0]['des']
        str9 = '  我很貼心: %s\n' % message[2]['des']
        str10 = '  運動  : %s\n' % message[3]['des']
        str11 = '  紫外線 : %s\n' % message[4]['des']
        str = greetings + str1 + str2 + str3 + str4 + str5 + str6 + str7 + str8 + str9 + str10 + str11
    except:
        str = greetings + str1 + str2 + str3 + str4 + str5 + str6 + str7

    return str


# 計算pm2.5的程度
def calculate(pm):
    if pm == '':
        pm25 = -1
    else:
        pm25 = int(pm)
        # 通過pm2.5的值大小判斷污染指數
        if 0 <= pm25 < 35:
            pollution = ''
        elif 35 <= pm25 < 75:
            pollution = ''
        elif 75 <= pm25 < 115:
            pollution = '輕度污染'
        elif 115 <= pm25 < 150:
            pollution = '中度污染'
        elif 150 <= pm25 < 250:
            pollution = '重度污染'
        elif pm25 >= 250:
            pollution = '嚴重污染'
        else:
            pollution = '希望你健在'
        return pollution

# 1- 天氣推送
def send_weather():
    my_friends = weather_friend()
    # 發送給好友
    for friend in my_friends:
        friend.send(Weather(friend.city)) # friend.city 可獲取到好友在微信上設置的地點
    # 給文件傳輸助手發送消息
    bot.file_helper.send('天氣推送完畢')

"""推送時間維護"""
print('star')
sched = BlockingScheduler() # 定時框架
sched.add_job(send_weather, 'cron', month='1-12', day='1-31', hour=21, minute=12) # 表示每天的21點12分發送
sched.start()  # 服務啟動

 感謝趙先森~

結束!


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM