前面两篇文章Geektool 使用 python+beautifulsoup 抓取天气显示和Geektool 使用 python + beautiful 实现抓取天气图标 讲解了怎样用 python
+ geektool
来抓取天气网站信息来显示.这篇文章主要来说明怎样根据 ip 来显示地理位置的最近五天的天气.
效果
老规矩 先看最终效果图
设计思路
- 获取所处的外网 ip
- 根据外网 ip 获取地理位置名称
- 设计字典, 根据地理位置来获取天气的 key,
- 拼接天气 url 来获取当前 ip 的地理位置的天气.
获取外网所在的 ip
浏览器打开地址 http://ip.42.pl/raw
, 可以看到当前的外网 ip.直接解析.1
2
3
4
5
6
7def get_ip():
url='http://ip.42.pl/raw'
head={}
head['User-Agent']='Mozilla/5.0 (Macintosh; Intel Mac OS X 10_14_2) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/71.0.3578.98 Safari/537.36'
req=urllib2.Request(url,headers=head)
ip = urllib2.urlopen(req).read();
return ip
根据 ip 获取所处的地理位置
1 | def queryIpAddress(ipaddress): |
创建城市字典
由于常年呆在南京, 就只写了几个城市码, 如果没有你所在的城市, 自己去创建下1
2
3
4
5{
"江苏省南京市": "5ef652409badc75c97292b401c6db8e8e55a3157f300dc0997bea96343e4a20a",
"广东省珠海市": "ba75fa9fa1fb4e2709d1c5a015354ac188cc2a50902610a80f9d28dce8eb8e40",
"广东省广州市": "8531a23947fdad24dcfb9cd37e6d6bd77617fa7c8b242e4773c74381cf55845b"
}
根据城市名字获取城市的天气 key
因为我在南京,所以如果没有取到 key 的话, 我会默认给南京的 key1
2
3
4
5
6
7
8
9
10def queryCode(key):
f = open("/Users/dingyang/python/geektool/city.json")
origin = json.load(f);
if(key in origin):
code = origin[key];
else:
code = "5ef652409badc75c97292b401c6db8e8e55a3157f300dc0997bea96343e4a20a"
return code;
根据返回的key, 组装 url,获取天气展示.
1 | def getDate(): |
geektool 输出信息.
用 geektool 输出天气信息,然后自己调整样式.