鱼C论坛

 找回密码
 立即注册
查看: 1995|回复: 1

[已解决]关于天气查询出现的问题

[复制链接]
发表于 2017-5-19 08:52:22 | 显示全部楼层 |阅读模式

马上注册,结交更多好友,享用更多功能^_^

您需要 登录 才可以下载或查看,没有账号?立即注册

x
本帖最后由 观测者 于 2017-5-19 09:01 编辑
  1. import urllib.request, json

  2. city_name = input('请输入城市:')

  3. #获取城市对应的代码
  4. with open('city.txt', 'r', encoding='utf-8') as f:
  5.     lines = f.readlines()
  6.     for line in lines:
  7.         if city_name in line:
  8.             city_code = line.split('=')[0].strip()
  9.             
  10. url = ('https://api.heweather.com/x3/weather?cityid=CN%s&key=50246ea62fbd405c9315e51d2a1d29c0' %city_code)

  11. response = urllib.request.urlopen(url)
  12. weather_html = response.read()
  13. json_data = json.loads(weather_html)

  14. data = json_data['HeWeather data service 3.0'][0]
  15. #获取PM2.5的值
  16. pm25 = data['aqi']['city']['pm25']
  17. #获取空气质量
  18. air_quality = data['aqi']['city']['qlty']
  19. #获取城市
  20. city = data['basic']['city']
  21. #获取现在的天气、温度、体感温度、风向、风力等级
  22. now_weather = data['now']['cond']['txt']
  23. now_tmp = data['now']['tmp']
  24. now_fl = data['now']['fl']
  25. now_wind_dir = data['now']['wind']['dir']
  26. now_wind_sc = data['now']['wind']['sc']
  27. #今天的天气
  28. today = data['daily_forecast'][0]
  29. weather_day = today['cond']['txt_d']
  30. weather_night = today['cond']['txt_n']
  31. tmp_high = today['tmp']['max']
  32. tmp_low = today['tmp']['min']
  33. wind_dir = today['wind']['dir']
  34. wind_sc = today['wind']['sc']
  35. #天气建议
  36. #舒适度
  37. comf = data['suggestion']['comf']['brf']
  38. comf_txt = data['suggestion']['comf']['txt']
  39. #流感指数
  40. flu = data['suggestion']['flu']['brf']
  41. flu_txt = data['suggestion']['flu']['txt']
  42. #穿衣指数
  43. drsg = data['suggestion']['drsg']['brf']
  44. drsg_txt = data['suggestion']['drsg']['txt']

  45. weather_forcast_txt = '''%s今天白天天气:  %s\n夜间天气:  %s\n最高气温:  %s摄氏度\n最低气温:  %s摄氏度
  46. 风力:  %s\n风向:  %s\n天气舒适度:%s\n%s\n流感指数: %s\n%s 穿衣指数: %s\n%s 现在外面的天气:  %s\n当前温度:  %s\n当前风力:  %s'''%(city,weather_day,weather_night,tmp_high,tmp_low,wind_sc,wind_dir,comf,comf_txt,flu,flu_txt,drsg,drsg_txt,now_weather,now_tmp,now_wind_sc)

  47. print(weather_forcast_txt)



  48.         
复制代码




如果输入北京:
  1. UnicodeEncodeError: 'ascii' codec can't encode character '\ufeff' in position 25: ordinal not in range(128)
复制代码


如果输入乌鲁木齐等某些城市:
  1. 请输入城市:乌鲁木齐
  2. Traceback (most recent call last):
  3.   File "C:\Users\观测者\Desktop\项目一:天气预报\weather_forecast.py", line 20, in <module>
  4.     pm25 = data['aqi']['city']['pm25']
  5. KeyError: 'aqi'
复制代码


而以上城市在api上是可以请求到的,求解。
用的和风天气api。

最佳答案
2017-5-19 10:08:26
本帖最后由 zxszx4 于 2017-5-19 10:12 编辑

你的api根本就没有调用成功,乌鲁木齐的那个调用的代码对应的其实是乌鲁木齐牧试站 的id“101130108”,而这个id在api里是没有的。
第二个事是,你的北京的city.txt里最开始是有字符的,大概3个字节的样子。是"ef bb bf"我查了下是Unicode签名BOM,你手动删了这3个字节或者你转成无BOM格式的就可以了。
对了,你的key我也保存了份哈,如果有意见我可以选择忘掉。
额,还有个事,我看了官方文档,给出的城市列表和链接是
https://cdn.heweather.com/china-city-list.txt
里面确实没有乌鲁木齐牧试站

city.txt

49.63 KB, 下载次数: 30

城市代码

想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复

使用道具 举报

发表于 2017-5-19 10:08:26 | 显示全部楼层    本楼为最佳答案   
本帖最后由 zxszx4 于 2017-5-19 10:12 编辑

你的api根本就没有调用成功,乌鲁木齐的那个调用的代码对应的其实是乌鲁木齐牧试站 的id“101130108”,而这个id在api里是没有的。
第二个事是,你的北京的city.txt里最开始是有字符的,大概3个字节的样子。是"ef bb bf"我查了下是Unicode签名BOM,你手动删了这3个字节或者你转成无BOM格式的就可以了。
对了,你的key我也保存了份哈,如果有意见我可以选择忘掉。
额,还有个事,我看了官方文档,给出的城市列表和链接是
https://cdn.heweather.com/china-city-list.txt
里面确实没有乌鲁木齐牧试站
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

小黑屋|手机版|Archiver|鱼C工作室 ( 粤ICP备18085999号-1 | 粤公网安备 44051102000585号)

GMT+8, 2024-3-28 22:31

Powered by Discuz! X3.4

© 2001-2023 Discuz! Team.

快速回复 返回顶部 返回列表