zoukankan      html  css  js  c++  java
  • 自动天气

    该程序不需要手动输入城市,会自动定位

    手动天气(需要手动输入城市名):https://www.cnblogs.com/Ctrl-cCtrl-v/p/12906077.html

     1 import urllib.request
     2 import gzip
     3 import json
     4 
     5 def dw():
     6     from urllib.request import urlopen
     7     import jieba
     8     my_ip = urlopen('http://ip.42.pl/raw').read()
     9 
    10     import requests
    11     import IPy
    12      
    13     def get_location(ip):
    14         url =  'https://sp0.baidu.com/8aQDcjqpAAV3otqbppnN2DJv/api.php?co=&resource_id=6006&t=1529895387942&ie=utf8&oe=gbk&cb=op_aladdin_callback&format=json&tn=baidu&cb=jQuery110203920624944751099_1529894588086&_=1529894588088&query=%s'%ip
    15         # headers = {'User-Agent': 'Mozilla/5.0 (Windows NT 10.0; WOW64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/67.0.3396.87 Safari/537.36'}
    16         r = requests.get(url)
    17         r.encoding = r.apparent_encoding
    18         html = r.text
    19         c1 = html.split('location":"')[1]
    20         c2 = c1.split('","')[0]
    21         return c2
    22      
    23     def check_ip(ip):
    24         try:
    25             IPy.IP(ip)
    26             return True
    27         except Exception as e:
    28             print(e)
    29             return False
    30      
    31 
    32     ip = str(my_ip).strip('b')
    33     ip=eval(ip)
    34     print(ip)
    35     if check_ip(ip):
    36         cs=get_location(ip)
    37         cs=list(jieba.cut(cs))
    38         print('城市位置为:',str(cs[1]))
    39         return str(cs[1])
    40 
    41     print('------天气查询------')
    42 def get_weather_data() :
    43     city_name = dw()
    44     url1 = 'http://wthrcdn.etouch.cn/weather_mini?city='+urllib.parse.quote(city_name)
    45     url2 = 'http://wthrcdn.etouch.cn/weather_mini?citykey=101010100'
    46     #网址1只需要输入城市名,网址2需要输入城市代码
    47     #print(url1)
    48     weather_data = urllib.request.urlopen(url1).read()
    49     #读取网页数据
    50     weather_data = gzip.decompress(weather_data).decode('utf-8')
    51     #解压网页数据
    52     weather_dict = json.loads(weather_data)
    53     #将json数据转换为dict数据
    54     return weather_dict
    55 
    56 def show_weather(weather_data):
    57     weather_dict = weather_data
    58     #将json数据转换为dict数据
    59     if weather_dict.get('desc') == 'invilad-citykey':
    60         print('你输入的城市名有误,或者天气中心未收录你所在城市')
    61     elif weather_dict.get('desc') =='OK':
    62         forecast = weather_dict.get('data').get('forecast')
    63         print('城市:',weather_dict.get('data').get('city'))
    64         print('温度:',weather_dict.get('data').get('wendu')+'')
    65         print('感冒:',weather_dict.get('data').get('ganmao'))
    66         #print('风向:',forecast[0].get('fengxiang'))
    67         print('风级:',forecast[0].get('fengli'))
    68         print('高温:',forecast[0].get('high'))
    69         print('低温:',forecast[0].get('low'))
    70         print('天气:',forecast[0].get('type'))
    71         print('日期:',forecast[0].get('date'))
    72         print('*******************************')
    73     
    74         for i in range(1,5):
    75             print('日期:',forecast[i].get('date'))
    76             #print('风向:',forecast[i].get('fengxiang'))
    77             print('风级:',forecast[i].get('fengli'))
    78             print('高温:',forecast[i].get('high'))
    79             print('低温:',forecast[i].get('low'))
    80             print('天气:',forecast[i].get('type'))
    81             print('--------------------------')
    82     print('***********************************')
    83 
    84 show_weather(get_weather_data())
    85 input()
  • 相关阅读:
    同类分布[AHOI2009]
    简单记录一下ruby 循环
    ruby中的respond to ?用法
    ruby中的return方法及class实例方法的initialize方法
    ruby中的字符串分隔符--split
    三次握手+四次挥手
    DNS服务器的简介——2
    HTTP-报文结构解析
    ruby中的三目操作符和include?操作
    ruby中的extend 和 include
  • 原文地址:https://www.cnblogs.com/Ctrl-cCtrl-v/p/12906084.html
Copyright © 2011-2022 走看看