因为之前想过 如果每天早上微信能够发送天气预报给我,给我老婆多好,然后就动手看网上的教程做了一个可以定时发送天气预报的程序,
最近又想到折腾,做了一个更加详细的版本。但是需要主动操作
部分代码:
#coding=utf8 import requests from requests import exceptions from urllib.request import urlopen from bs4 import BeautifulSoup from urllib.parse import urlencode from threading import Timer import re from wxpy import * import schedule import time import http import json import datetime import random bot = Bot(cache_path=True,console_qr = 1) myself = bot.self bot.enable_puid('wxpy_puid.pkl') tuling = Tuling(api_key='换成自己的图片key') group = bot.groups().search(u'Test') shgroup = bot.groups().search('伐木累') friends = bot.friends().search(u'Lie') msgText = "Helo! 回复'功能'获取对应功能\n1.天气(例:苏州天气)\n2.今日nba(注:今日所有比赛结果)\n3.今日黄历\n4.每日一句\n5.开启机器人(关闭机器人)\n6.今日古诗词\n7.每日阅读\n8.历史上的今天\n9.nba排名(注:当日东西部排名)\n10.新闻\n 1.头条新闻\n 2.社会新闻\n 3.娱乐新闻\n 4.体育新闻\n11.星座运势(例如:天秤座)" #任意回复获取的菜单 newText = "你可以这样回复: \n1.头条新闻\n2.社会新闻\n3.娱乐新闻\n4.体育新闻" def get_now_weather(city): header = { 'Accept': 'text/html,application/xhtml+xml,application/xml;q=0.9,image/webp,*/*;q=0.8', 'Accept-Encoding': 'gzip, deflate', 'Accept-Language': 'zh-CN,zh;q=0.8', 'Connection': 'keep-alive', 'User-Agent': 'Mozilla/5.0 (Windows NT 6.3; WOW64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/43.0.235' } url = 'https://free-api.heweather.com/s6/weather/now?location='+city+'&key=换成自己的聚合数据key' PMurl = 'https://free-api.heweather.com/s6/air/now?parameters&location='+city+'&key=换成自己的和风key' # 设定超时时间,防止被网站认为是爬虫 timeout = random.choice(range(80, 180)) rep = requests.get(url, headers=header, timeout=timeout) pm = requests.get(PMurl, headers=header, timeout=timeout) result = '' temp = rep.json() temp = temp['HeWeather6'][0] update = temp['update'] now = temp['now'] nowTime = datetime.datetime.now().strftime('%Y-%m-%d %H:%M:%S') pm = pm.json() pm = pm['HeWeather6'][0] print(now) airnow = pm['air_now_city'] result = city + '实时天气预报-' + '\n'\ + '更新时间:'+ update['loc'] + '\n'\ + ' 当前天气:'+ now['cond_txt'] + '\n'\ + ' 当前温度:'+ now['tmp'] + '°C' + '\n'\ + ' 体感温度:'+ now['fl'] + '°C' + '\n'\ + ' 风向:'+ now['wind_dir'] + ' ' + now['wind_sc'] + '级 '+ now['wind_spd'] + '公里/小时'+ '\n'\ + ' 相对湿度:'+ now['hum'] + '%' + '\n'\ + ' 降水量:'+ now['pcpn'] + 'ml' + '\n'\ + ' 能见度:'+ now['vis'] + '公里' + '\n'\ + ' 云量:'+ now['cloud'] + '\n'\ + '-----------------------------------' + '\n'\ + '当前空气质量:'+'\n'\ + ' 空气质量指数:'+ airnow['aqi']+'\n'\ + ' 主要污染物:'+ airnow['main']+'\n'\ + ' 空气质量:'+ airnow['qlty']+'\n'\ + ' 二氧化氮指数:'+ airnow['no2']+'\n'\ + ' 二氧化硫指数:'+ airnow['so2']+'\n'\ + ' 一氧化碳指数:'+ airnow['co']+'\n'\ + ' pm10指数:'+ airnow['pm10']+'\n'\ + ' pm25指数:'+ airnow['pm25']+'\n'\ + ' 臭氧指数:'+ airnow['o3']+'\n' result = result + '发送时间:' + nowTime + '\n' return result def get_news(type): header = { 'Accept': 'text/html,application/xhtml+xml,application/xml;q=0.9,image/webp,*/*;q=0.8', 'Accept-Encoding': 'gzip, deflate', 'Accept-Language': 'zh-CN,zh;q=0.8', 'Connection': 'keep-alive', 'User-Agent': 'Mozilla/5.0 (Windows NT 6.3; WOW64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/43.0.235' } url = 'http://v.juhe.cn/toutiao/index?type='+str(type)+'&key=换成自己的聚合数据key' timeout = random.choice(range(80, 180)) rep = requests.get(url, headers=header, timeout=timeout) data = json.loads(rep.text) data = data['result'] data = data['data'] item = [] obj = {} html = '今日'+str(type)+'新闻:'+ '\n' for i in data: html = html + '标题:' + i['title'] + '\n'\ + '链接:' + i['url'] + '\n'\ + '分类:' + i['category'] + '\n'\ + '来自:' + i['author_name'] + '\n'\ + '时间:' + i['date'] + '\n'\ + '-----------------------------------------------' + '\n' +'\n' \ return html def get_star(name): header = { 'Accept': 'text/html,application/xhtml+xml,application/xml;q=0.9,image/webp,*/*;q=0.8', 'Accept-Encoding': 'gzip, deflate', 'Accept-Language': 'zh-CN,zh;q=0.8', 'Connection': 'keep-alive', 'User-Agent': 'Mozilla/5.0 (Windows NT 6.3; WOW64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/43.0.235' } url = 'http://web.juhe.cn:8080/constellation/getAll?consName='+str(name)+'&type=today&key=换成自己的聚合数据key' timeout = random.choice(range(80, 180)) rep = requests.get(url, headers=header, timeout=timeout) data = json.loads(rep.text) starhtml = '今日'+str(name)+'运势:'+ '\n'\ + ' 综合指数:' + data['all'] + '\n'\ + ' 幸运色:' + data['color'] + '\n'\ + ' 健康指数:' + data['health'] + '\n'\ + ' 爱情指数:' + data['love'] + '\n'\ + ' 财运指数:' + data['money'] + '\n'\ + ' 速配星座:' + data['QFriend'] + '\n'\ + ' 工作指数:' + data['work'] + '\n'\ + ' 今日概述:' + data['summary'] + '\n'\ return starhtml def get_nba(): resp = urlopen('https://m.hupu.com/nba/game') soup = BeautifulSoup(resp,'html.parser') tagToday = soup.find('section',class_="match-today") nbaHtml = '今日NBA比赛结果:' + '\n' + '\n' for tag in tagToday.find_all('a', class_='match-wrap'): nbaHtml = nbaHtml + tag.find('div', class_='away-team').span.get_text() + ' ' + tag.find('strong', class_='').span.get_text() + ' ' + tag.find('div', class_='home-team').span.get_text() + ' (' + tag.find('div', class_='match-status-txt').get_text() +')' + '\n' return nbaHtml def get_rank(): resp = urlopen('https://m.hupu.com/nba/stats') soup = BeautifulSoup(resp,'html.parser') east = soup.find_all('li',class_= "weast")[0] west = soup.find_all('li',class_= "weast")[1] rankHtml = '今日NBA东部排名:(1.排名 2.球队 3.胜负 4.胜负差 5.最近情况)' + '\n' + '\n' for tag in east.find_all('li', class_=''): list = tag.find('p', class_='right-data') rankHtml = rankHtml + tag.find('span', class_='rank').get_text() + '. ' + tag.find('div', class_='').h1.get_text() + ' ' + list.find_all('span')[0].get_text() + ' ' + list.find_all('span')[1].get_text() +' '+ list.find_all('span')[2].get_text() +'\n' rankHtml = rankHtml + '\n' + '\n' + '---------------------------------------------' + '\n' + '\n' rankHtml = rankHtml + '今日NBA西部排名:(1.排名 2.球队 3.胜负 4.胜负差 5.最近情况)' + '\n' + '\n' for tag in west.find_all('li', class_=''): list = tag.find('p', class_='right-data') rankHtml = rankHtml + tag.find('span', class_='rank').get_text() + '. ' + tag.find('div', class_='').h1.get_text() + ' ' + list.find_all('span')[0].get_text() + ' ' + list.find_all('span')[1].get_text() +' '+ list.find_all('span')[2].get_text() +'\n' return rankHtml def invite(user): print('4') group = bot.groups().search('cc') group[0].add_members(user, use_invitation=True) @bot.register(msg_types=FRIENDS) @bot.register(group) @bot.register(shgroup,TEXT) @bot.register(friends) def auto_reply_all(msg): if '苏州天气' in msg.text: nowWeather = get_now_weather('苏州') msg.sender.send(nowWeather) elif 'py' in msg.text.lower(): # 接受好友 (msg.card 为该请求的用户对象) new_friend = bot.accept_friend(msg.card) # 或 new_friend = msg.card.accept() # 向新的好友发送消息 new_friend.send('哈哈,我自动接受了你的好友请求,发送【帮助】获取帮助!!') elif '上海天气' in msg.text: nowWeather = get_now_weather('上海') msg.sender.send(nowWeather) elif '帮助' in msg.text: msg.sender.send(msgText) elif '每日一句' in msg.text: url = 'http://open.iciba.com/dsapi/' r = requests.get(url) content = json.loads(r.text) msg.sender.send('每日一句:\n'+content['content'] +'\n'+content['note']+"\n") elif '今日黄历' in msg.text: header = { 'Accept': 'text/html,application/xhtml+xml,application/xml;q=0.9,image/webp,*/*;q=0.8', 'Accept-Encoding': 'gzip, deflate', 'Accept-Language': 'zh-CN,zh;q=0.8', 'Connection': 'keep-alive', 'User-Agent': 'Mozilla/5.0 (Windows NT 6.3; WOW64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/43.0.235' } timeout = random.choice(range(80, 180)) wk = {"Sunday":"星期日","Monday":"星期一","Tuesday":"星期二","Wednesday":"星期三","Thursday":"星期四","Friday":"星期五","Saturday":"星期六"} yy = {"False":"不是","True":"是"} url = "https://www.sojson.com/open/api/lunar/json.shtml" r = requests.get(url, headers= header, timeout=timeout) jsonarr = json.loads(r.text) result = jsonarr["data"] xingqi = str(wk[result['week']]) yangli = '阳历日期:' + str(result['year']) +'-'+ str(result['month']) +'-'+ str(result['day']) nongli = '农历日期:' + str(result['cnyear']) + '-' + str(result['cnmonth']) + '月-' + str(result['cnday']) +'日' jieqibody = result["jieqi"] jieqi ='本月节气:' for i in jieqibody: jieqi += i + '日' + jieqibody[i] + ',' leap = '是否是闰月:' + str(result['leap']) maxDayInMonth = '农历当月天数:' + str(result['maxDayInMonth']) festivalList = '当天节日:' + str(result['festivalList']) jiazi = '甲子:' + str(result['cyclicalYear']) + '-' + str(result['cyclicalMonth']) + '-' + str(result['cyclicalDay']) shengxiao = '今年生肖:' + str(result['animal']) yi = '宜:' + str(result['suit']) ji = '忌:' + str(result['taboo']) msg.sender.send('今天是:'+ xingqi + '\n' + '本日黄历:' + '\n' + yangli + '\n' + nongli + "\n" + jiazi + "\n" + shengxiao + "\n" + yi + "\n" + ji + "\n" + leap + "\n" + maxDayInMonth + "\n" + festivalList + "\n" + jieqi + "\n") elif '今日古诗词' in msg.text: header = { 'Accept': 'text/html,application/xhtml+xml,application/xml;q=0.9,image/webp,*/*;q=0.8', 'Accept-Encoding': 'gzip, deflate', 'Accept-Language': 'zh-CN,zh;q=0.8', 'Connection': 'keep-alive', 'User-Agent': 'Mozilla/5.0 (Windows NT 6.3; WOW64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/43.0.235' } timeout = random.choice(range(80, 180)) url = "https://v2.jinrishici.com/info" urlA = "https://v2.jinrishici.com/one.json" r = requests.get(url, headers= header, timeout=timeout) rA = requests.get(urlA, headers= header, timeout=timeout) jsonarr = json.loads(r.text) jsonA = json.loads(rA.text) result = jsonarr["data"] resultA = jsonA["data"] content = str(resultA['content']) origin = resultA['origin'] title = str(origin['title']) dynasty = str(origin['dynasty']) author = str(origin['author']) detail = '《' + ',\n'.join(origin['content']) + '》' matchTags = '推荐关键词:' + ','.join(resultA['matchTags']) sendTime = '发送时间:' + str(resultA['cacheAt']) ipAddress = '查询人IP:' + str(result['ip']) address = '查询人地址:' + str(result['region']) weatherData = result['weatherData'] wd = ' 实时温度:' + str(weatherData['temperature']) + '°C' fx = str(weatherData['windDirection']) fl = str(weatherData['windPower']) sd = ' 湿度:' + str(weatherData['humidity']) uptime = ' 更新时间:' + str(weatherData['updateTime']) we = ' 天气:' + str(weatherData['weather']) njd = ' 能见度:' + str(weatherData['visibility']) yu = ' 雨量:' + str(weatherData['rainfall']) pm25 = ' pm2.5:' + str(weatherData['pm25']) tags = ' ' + ','.join(result['tags']) scMsg = content + '\n' + ' ---- 这是来自' + dynasty + '诗人' + author + '的' + '《'+ title +'》' + '\n' + matchTags + '\n' +'诗句详情:' + '\n' + detail + '\n' + '\n' + sendTime + '\n' + ipAddress + '\n' + address + '\n' + '天气(实时):' + '\n' + we + '\n' + wd + '\n' + ' 风向:' + fx + fl + '\n' + sd +'\n' + njd + '\n' + yu + '\n' + pm25 + '\n' + '标签:' + '\n' + tags msg.sender.send(scMsg) elif '帮助' in msg.text: msg.sender.send(msgText) elif '今日nba' in msg.text: nba = get_nba() msg.sender.send(nba) elif 'nba排名' in msg.text: nbarank = get_rank() msg.sender.send(nbarank) elif '头条新闻' in msg.text: nlist = get_news('头条') msg.sender.send(nlist) elif '娱乐新闻' in msg.text: nlist = get_news('娱乐') msg.sender.send(nlist) elif '体育新闻' in msg.text: nlist = get_news('体育') msg.sender.send(nlist) elif '社会新闻' in msg.text: nlist = get_news('社会') msg.sender.send(nlist) elif '每日阅读' in msg.text: header = { 'Accept': 'text/html,application/xhtml+xml,application/xml;q=0.9,image/webp,*/*;q=0.8', 'Accept-Encoding': 'gzip, deflate', 'Accept-Language': 'zh-CN,zh;q=0.8', 'Connection': 'keep-alive', 'User-Agent': 'Mozilla/5.0 (Windows NT 6.3; WOW64) A<Appl></Appl>WebKit/537.36 (KHTML, like Gecko) Chrome/43.0.235' } timeout = random.choice(range(80, 180)) url = "https://interface.meiriyiwen.com/article/random?dev=1" r = requests.get(url, headers= header, timeout=timeout) jsonarr = json.loads(r.text) result = jsonarr["data"] form = '来自:' + str(result['author']) + '的《' + str(result['title']) + '》\n' content = str(result['content']) msg.sender.send(form + content) elif '历史上的今天' in msg.text: header = { 'Accept': 'text/html,application/xhtml+xml,application/xml;q=0.9,image/webp,*/*;q=0.8', 'Accept-Encoding': 'gzip, deflate', 'Accept-Language': 'zh-CN,zh;q=0.8', 'Connection': 'keep-alive', 'User-Agent': 'Mozilla/5.0 (Windows NT 6.3; WOW64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/43.0.235' } timeout = random.choice(range(80, 180)) m = datetime.datetime.now().month d = datetime.datetime.now().day url = "http://api.juheapi.com/japi/toh?v=1.0&month="+str(m)+"&day="+str(d)+"&key=换成自己的key" r = requests.get(url, headers= header, timeout=timeout) jsonarr = json.loads(r.text) result = jsonarr["result"] form = '历史上的【' + str(m) +'-'+ str(d)+ '】发生了以下事件:' + '\n' + '\n' item = [] for i in result: item.append(i['des']) item = '\n'+ '\n'.join(item) msg.sender.send(form + item) elif '白羊座' in msg.text: star = get_star('白羊座') msg.sender.send(star) elif '金牛座' in msg.text: star = get_star('金牛座') msg.sender.send(star) elif '双子座' in msg.text: star = get_star('双子座') msg.sender.send(star) elif '巨蟹座' in msg.text: star = get_star('巨蟹座') msg.sender.send(star) elif '狮子座' in msg.text: star = get_star('狮子座') msg.sender.send(star) elif '处女座' in msg.text: star = get_star('处女座') msg.sender.send(star) elif '天秤座' in msg.text: star = get_star('天秤座') msg.sender.send(star) elif '天蝎座' in msg.text: star = get_star('天蝎座') msg.sender.send(star) elif '射手座' in msg.text: star = get_star('射手座') msg.sender.send(star) elif '摩羯座' in msg.text: star = get_star('摩羯座') msg.sender.send(star) elif '水瓶座' in msg.text: star = get_star('水瓶座') msg.sender.send(star) elif '双鱼座' in msg.text: star = get_star('双鱼座') msg.sender.send(star) elif '开启机器人' in msg.text: msg.sender.send('哎呀,人家还不能这样呢') elif '关闭机器人' in msg.text: msg.sender.send('哎呀,人家还不能这样呢') elif '加群' in msg.text.lower(): print('1') group = bot.groups().search('cc') group[0].add_members(msg.sender, use_invitation=True) else: tuling.do_reply(msg) msg.sender.send(msg.location) while True: schedule.run_pending() time.sleep(1)