DIY微信機器人

功能:定時發送問候給朋友和家族羣
效果圖
在這裏插入圖片描述在這裏插入圖片描述


怎麼製作呢?
如果您有服務器的話,可以將腳本部署在上面
但如果沒有的話,可能就得保持電腦不關機了

#!/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()

運行之後會出現一個二維碼,就是那種在網頁登陸微信的二維碼。掃一下,確認登陸即可。
注:因爲這個相當於開了網頁版微信,所以如果在電腦端或網頁端再次登陸微信,程序將會結束

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章