时间:2021-05-22
先看下效果图:
用到的模块:
要实现上面的示例,首先是有两大块地方
而获取天气信息又包括几个小的需要注意的地方
获取天气信息
假如我们给多个人发送天气情况,这几个人来自不同的城市,那么我们不可能每次都要输入城市名,然后查找城市码,然后再访问接口,获取天气情况,这样会非常的麻烦,所以我们需要考虑将城市名跟城市码一一对应起来,说到一一对应,首先想到的数据结构便是字典,所以我们可以将这些信息存入一个字典里,然后持久化到一个文件中,这样便方便很多
首先我们获取最新的 city 表,这个表是一个 list 类型,大体格式如下:
[ { "id": 1, "pid": 0, "city_code": "101010100", "city_name": "北京", "post_code": "100000", "area_code": "010", "ctime": "2019-07-11 17:30:06" }, { "id": 2, "pid": 0, "city_code": "", "city_name": "安徽", "post_code": null, "area_code": null, "ctime": null }]我们就简单的粘贴复制,放到一个空的列表中,如下所示,将所有的城市信息放到列表 citycode 中
citycode = [ { "id": 1, "pid": 0, "city_code": "101010100", "city_name": "北京", "post_code": "100000", "area_code": "010", "ctime": "2019-07-11 17:30:06" },.................. { "id": 2, "pid": 0, "city_code": "None", "city_name": "安徽", "post_code": "null", "area_code": "null", "ctime": "null" }]cityinfo = {}#将城市名和城市代码写入json文件中with open('city_for_code.json','w',encoding='utf-8') as f: for i in citycode: name = i["city_name"] code = i["city_code"] cityinfo[name] = code f.write(str(cityinfo))#测试是否能读取with open('city_for_code.json','r+',encoding='utf-8') as file: data_dst = file.readlines() d = eval(data_dst[0])然后就是一顿处理,只把我们所需的 city_name 和 city_code 这俩字段取出即可,随后写入文件中。如果读取的话就按照上面方法去读取,需要注意的是,使用 open()方法读取文件,得到的内容是一个列表,我们需要通过 eval()方法转化成 dict 类型。
这是把 city_name 和 city_code 放到一个文件中的方法,另外我们也可以放到数据库中,这里以 MySQL 为例,安装 PyMySQL 模块
import pymysqldb_parames = { 'host': 'localhost', 'user': 'root', 'password': '123456', 'database': 'city_code_info'}#连接数据库conn = pymysql.connect(**db_parames)#创建游标对象,增删改查都在游标上进行cursor = conn.cursor()#表存在,就删除cursor.execute("DROP TABLE IF EXISTS city_code")#建表语句create_table_sql = """CREATE TABLE `city_code` ( `city_name` varchar(20) DEFAULT NULL, `city_code` varchar(25) DEFAULT NULL) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4;"""#建表cursor.execute(create_table_sql)#插入数据with open('city_for_code.json','r+',encoding='utf-8') as f: origin_data = f.readlines() current_data = eval(origin_data[0]) #读取的内容是一个列表,且只包含一个元素 #print(current_data.get('北京','Not Exists.')) for name, code in current_data.items(): sql = """INSERT INTO city_code(city_name, city_code) VALUES ('%s', '%s')""" % (name, code) try: cursor.execute(sql) except: conn.rollback() conn.commit() conn.close()执行这个 python 程序就可以将文件中的城市名跟城市码存到库中,当然我们也可以直接获取到城市名和城市码,然后跳过文件持久化这一步,直接把这两个字段取出存进去,但是考虑着代码要多练多写,就多此一举了一下。
下面是输入城市名就能得到城市码的代码块:
import pymysqldef get_city_code(city_name): db_parames = { 'host': 'localhost', 'user': 'root', 'password': '123456', 'database': 'city_code_info' } #连接数据库 conn = pymysql.connect(**db_parames) #创建游标对象,增删改查都在游标上进行 cursor = conn.cursor() #创建查询语句 select_sql = "SELECT * FROM city_code where city_name='%s'"%(city_name) try: cursor.execute(select_sql) result = cursor.fetchall() for row in result: city_code = row[1] return city_code except: return "Error: unable fetch data!"然后是根据输入的城市码来获取天气情况:
importrequestsdef get_weather(city_name,get_date_time=3): city_code = get_city_code(city_name) url = 'http://t.weather.sojson.com/api/weather/city/%s'%(city_code) header = { 'user-agent': 'Mozilla/5.0 (Windows NT 10.0; WOW64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/74.0.3729.169 Safari/537.36' } response = requests.get(url,header) response.encoding = 'utf-8' weather = response.json() day = {1: '明天', 2: '后天', 3: '大后天'} weather_lst = [] for num in range(get_date_time): City = weather["cityInfo"]["city"] Weatherganmao = weather["data"]["ganmao"] Weatherquality = weather["data"]["quality"] Weathershidu = weather["data"]["shidu"] Weatherwendu = weather["data"]["wendu"] Weatherpm25 = str(weather["data"]["pm25"]) Weatherpm10 = str(weather["data"]["pm10"]) Dateymd = weather["data"]["forecast"][num]["ymd"] Dateweek = weather["data"]["forecast"][num]["week"] Sunrise = weather["data"]["forecast"][num]["sunrise"] Sunset = weather["data"]["forecast"][num]["sunset"] Windfx = weather["data"]["forecast"][num]["fx"] Windf1 = weather["data"]["forecast"][num]["fl"] Weathertype = weather["data"]["forecast"][num]["type"] Weathernotice = weather["data"]["forecast"][num]["notice"] Weatherhigh = weather["data"]["forecast"][num]["high"] Weatherlow = weather["data"]["forecast"][num]["low"] if num == 0: result = '今日天气预报' + '\n' \ + '日期: ' + Dateymd + ' ' + Dateweek + ' ' + City + '\n' \ + '天气: ' + Weathertype + ' ' + Windfx + ' ' + Windf1 + ' ' + Weathernotice + '\n' \ + '当前温度: ' + Weatherwendu + '℃' + '\n' \ + '空气湿度: ' + Weathershidu + '\n' \ + '温度范围: ' + Weatherlow + '' + '~' + '' + Weatherhigh + '\n' \ + '污染指数: ' + 'PM2.5: ' + Weatherpm25 + ' ' + 'PM10: ' + Weatherpm10 + '\n' \ + '空气质量: ' + Weatherquality + '\n' \ + '日出时间: ' + Sunrise + '\n' \ + '日落时间: ' + Sunset + '\n' \ + '温馨提示: ' + Weatherganmao else: which_day = day.get(num,'超出范围') result = '\n' + which_day + ' ' + '天气预报' + '\n' \ + '日期: ' + Dateymd + ' ' + Dateweek + ' ' + City + '\n' \ + '天气: ' + Weathertype + ' ' + Windfx + ' ' + Windf1 + ' ' + Weathernotice + '\n' \ + '温度范围: ' + Weatherlow + '' + '~' + '' + Weatherhigh + '\n' \ + '日出时间: ' + Sunrise + '\n' \ + '日落时间: ' + Sunset + '\n' \ + '温馨提示: ' + Weatherganmao weather_lst.append(result) weather_str = '' #因为默认要输出三天的天气情况,所以我们需要创建一个空字符串,然后每迭代一次,就将天气情况拼接到空字符串中。 for msg in weather_lst: weather_str += msg + '\n' return weather_str下面是发送微信消息
from wxpy import *def send_wx(city_name, who): bot = Bot(cache_path=True) #bot = Bot(console_qr=2, cache_path='botoo.pkl') my_friend = bot.friends().search(who)[0] msg = get_weather(city_name) try: my_friend.send(msg) except: my_friend = bot.friends().search('fei')[0] my_friend.send(u"发送失败")然后我们还需要写一个定时器,每隔一段时间便要发送一次
from threading import Timerdef auto_send(): city_name = '设置要发送的城市' friend_list = ['要发送的人'] for who in friend_list: send_wx(city_name,who) global timer timer = Timer(1,auto_send) timer.start()最后执行程序
if __name__ == '__main__': timer = Timer(1,auto_send) timer.start()以上就是python获取天气接口给指定微信好友发天气预报的详细内容,更多关于python获取天气接口的资料请关注其它相关文章!
声明:本页内容来源网络,仅供用户参考;我单位不保证亦不表示资料全面及准确无误,也不保证亦不表示这些资料为最新信息,如因任何原因,本网内容或者用户因倚赖本网内容造成任何损失或损害,我单位将不会负任何法律责任。如涉及版权问题,请提交至online#300.cn邮箱联系删除。
怎么用微信查询天气微信查天气预报指南怎么用微信查询天气微信查天气预报指南怎么用微信查询天气微信查天气预报指南怎么用微信查询天气微信查天气预报指南怎么用微信查询天
天气预报查询接口API,在这里我使用的是国家气象局天气预报接口使用较多的还有:新浪天气预报接口、百度天气预报接口、google天气接口、Yahoo天气接口等等。
本文实例为大家分享了python给心爱的人每天发天气预报的具体代码,供大家参考,具体内容如下下面的代码实现了用了之前获取天气的代码,然后用itchat模块给指定
在Eclipse中创建Android项目,利用之前学过的WebView控件和中国天气网提供的天气数据接口,实现获取指定城市的天气预报。布局文件:res/layo
python编写的语音天气预报本系统主要包括四个函数:1、获取天气数据1、输入要查询天气的城市2、利用urllib模块向中华万年历天气api接口请求天气数据3、