因为之前想过 如果每天早上微信能够发送天气预报给我,给我老婆多好,然后就动手看网上的教程做了一个可以定时发送天气预报的程序,
最近又想到折腾,做了一个更加详细的版本。但是需要主动操作
部分代码:
#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)