登录
  • 人们都希望被别人需要 却往往事与愿违
  • 宪法的基本原则是: 个人可以做任何事情, 除非法律禁止; 政府不能做任何事情, 除非法律许可 @约翰. 洛克 (哲学家 思想家)

一个简单强大的 Python 天气预报库 pyweathercn

编程 Benny 小土豆 9792 次浏览 2489 字 6 个评论
文章目录 [显示]
这篇文章在 2019 年 01 月 23 日 17:04:22 更新了哦~

今天向大家介绍一款可以用来查询国内绝大部分城市天气预报的 Python 库 pyweathercn,网上搜到的基本都不能用啦……

pyweathercn 的作者正是大名鼎鼎的本人。

好吧,其实这个库我早在 5 月份的时候就写好了,但是由于太忙一直忘了这回事……

demo: https://weather.bennythink.com

特色

用法简洁

支持开启 REST API 风格的服务器,一库多用,异步非阻塞支持高并发,支持 https

为啥要开发这个

因为我需要啊!上网搜罗了一波,各种天气预报 API 基本上都得注册,可能还得要钱,或者限制访问频率,这就让我非常不开心了。那么既然没人写过,那咱就只好自己写一个了啊。

不过需要注意的是,这个原理是爬虫并解析 www.weather.com.cn,所以如果某天不好用了,很有可能就是人家网站改版了……

安装

需要注意的是,这个库并不支持 Python 2,所以请使用 Python 3

  1. pip install pyweathercn

如果需要请自行替换为pip3

另外,如果你使用国内的 PyPi 源,可能现在还没更新到 1.0.3 呢……

其实这个库本应该是支持 Python 2 的,因为也没用什么 Python 3 才有的特性和语法用了一些的,但是我就是不想支持 Python 2,不爽你来打我啊。不过非得想支持 Python 2 的话,你可以下载 tar 包解压缩到 site-packages 啊

使用方法

普通模式

非常简单,支持 chain call 和实例模式,来几个例子:

  1. >>> import pyweathercn
  2.  
  3. >>> pyweathercn.Weather('重庆').temp()
  4.  
  5. '重庆:20'
  6.  
  7. >>> w = pyweathercn.Weather('北京')
  8.  
  9. >>> w.data
  10.  
  11. {'data': {'city': '北京', 'aqi': '159', 'tip': '紫外线指数很强涂擦SPF20以上,PA++护肤品,避强光。穿衣指数热适合穿T恤、短薄外套等夏季服装。', 'temp': '20', 'forecast': [{'date': '23日(今天)', 'type': '晴', 'temp': '15℃', 'wind': '西南风 3-4级'}, {'date': '24日(明天)', 'type': '晴', 'temp': '31℃/17℃', 'wind': '南风 3-4级'}, {'date': '25日(后天)', 'type': '晴转多云', 'temp': '31℃/19℃', 'wind': '西南风 <3级'}, {'date': '26日(周六)', 'type': '阴转多云', 'temp': '30℃/16℃', 'wind': '西风 <3级'}, {'date': '27日(周日)', 'type': '多云', 'temp': '29℃/15℃', 'wind': '南风 <3级'}, {'date': '28日(周一)', 'type': '多云', 'temp': '25℃/15℃', 'wind': '东北风 <3级'}, {'date': '29日(周二)', 'type': '晴', 'temp': '29℃/15℃', 'wind': '西南风 <3级'}]}, 'status': 0, 'message': 'success'}
  12.  
  13. >>> w.today()
  14.  
  15. '北京:23日(今天)晴15℃西南风 3-4级'
  16.  
  17. >>> w.tomorrow(True)
  18.  
  19. {'date': '24日(明天)', 'type': '晴', 'temp': '31℃/17℃', 'wind': '南风 3-4级'}
  20.  
  21. >>> w.tip()
  22.  
  23. '北京温馨提示:紫外线指数很强涂擦SPF20以上,PA++护肤品,避强光。穿衣指数热适合穿T恤、短薄外套等夏季服装。'
  24.  
  25. >>> w.forecast(False,5)
  26.  
  27. '北京:28日(周一)多云25℃/15℃东北风 <3级'
  28.  

其中 tomorrow 等类方法的参数如果传布尔真值的话,将会显示原始 json 响应,不传或者传布尔假值会显示易于阅读的字符串。

其他的一些类方法,咱的 IDE 都有提示,我注释写的还算简单易懂,这里就不细说了

服务器模式

  1. import pyweather
  2. # running on http://127.0.0.1:8888
  3. pyweathercn.server(host='127.0.0.1')
  4. # running on http://0.0.0.0:3333
  5. pyweathercn.server(3333)
  6. # support ssl: https://www.example.com:8888
  7. pyweathercn.server('8888', 'www.example.com', ssl_options={
  8. "certfile": "fullchain.pem",
  9. "keyfile": "privkey.pem"})

哪位好心人我啊可以开放一个公开的 API 给大家用,哈哈。

在服务器模式下的调用方法,需要请求/weather路由,必须参数为 city,可选参数为 day,使用 get 方法的 url 参数或者 post 方法的 url-encode form,目前还不支持 post json。

 

Nginx 反向代理

服务器用 systemd 等运行一个监听 127.0.0.1 的服务器模式 python 脚本,server 块如下配置:

  1. server {
  2. listen 80;
  3. server_name www.siteone.com; # 你的域名
  4. location / {
  5. proxy_pass http://127.0.0.1:8888;
  6. }

如果需要 https 支持,可以参考这个配置文件

例子 1 GET:呃请原谅我的 pangu 把 url 搞成了带空格的……

http://127.0.0.1:8888/weather?city = 上海

一个简单强大的Python天气预报库pyweathercn

例子 2 GET:

http://127.0.0.1:8888/weather?city = 上海 & day=3

一个简单强大的Python天气预报库pyweathercn

例子 3 POST:

一个简单强大的Python天气预报库pyweathercn

PyPi 仓库地址

https://pypi.org/project/pyweathercn/

GitHub 源代码

开源地址
欢迎 star、fork、PR


文章版权归原作者所有丨本站默认采用 CC-BY-NC-SA 4.0 协议进行授权 |
转载必须包含本声明,并以超链接形式注明原作者和本文原始地址:
https://dmesg.app/pyweathercn.html
喜欢 (15)
分享:-)
关于作者:
If you have any further questions, feel free to contact me in English or Chinese.
发表我的评论
取消评论

                     

去你妹的实名制!

  • 昵称 (必填)
  • 邮箱 (必填,不要邮件提醒可以随便写)
  • 网址 (选填)
(6) 个小伙伴在吐槽
  1. 求如何搞成 tg 机器人?
    hjh2019-03-23 21:26 回复
    • 这里 https://dmesg.app/tgbot0.html
      Benny 小土豆 2019-03-25 09:58 回复
  2. pangu 是什么??
    nels0n2018-08-22 14:46 回复
    • https://github.com/vinta/pangu.js 这么个东西
      Benny 小土豆 2018-08-22 19:23 回复
      • 不能手动改掉吗?
        布偶君 2018-09-30 20:19 回复
        • 懒~
          Benny 小土豆 2018-10-03 17:15
您直接访问了本站! 莫非您记住了我的域名. 厉害~ 我倍感荣幸啊 嘿嘿