2016-03-07 6 views
0

Я пытаюсь создать программу python (как университетское упражнение), которая получит координаты от пользователя и напечатает определенные сообщения пользователю, например: , если идет дождь в определенном регионе напечатает «Я пою под дождем»получение конкретной информации от openweathermap в python 2.7

import json,urllib2 


while True: 
    x=input("Give the longitude:") 
    if x<=180 and x>=-180: 
     x=str(x) 
     break 

while True: 
    y=input("Give the latitude:") 
    if y<=90 and y>=-90: 
     y=str(y) 
     break 
url="http://api.openweathermap.org/data/2.5/weather?lat="+y+"&lon="+x+"&appid=01e7a487b0c262921260c09b84bdb456" 
weatherbot=urllib2.urlopen(url) 
weatherinfo=weatherbot.read() 

до сих пор я могу получить информацию от Openweathermap, но если я пытаюсь получить конкретную информацию, например, что:

currentweather=weatherinfo["weather"]["main"] 

Это дает мне сообщение об ошибке :

TypeError:string indices must be integer, not str 

Несмотря когда я делаю:

print weatherinfo 

это, кажется, словарь.

Может кто-нибудь объяснить мне, что я делаю неправильно?

PS: Не предлагайте устанавливать дополнительные библиотеки в Python, так как я не уверен на 100%, что наш профессор будет использовать указанные библиотеки для проверки нашего кода.

+0

Похоже, домашнее задание для меня. – MarkyPython

ответ

1

weatherinfo - это строка в формате JSON. Для того, чтобы иметь словарь, как доступ к нему, вы должны загрузить его через json.load():

import json 

weatherinfo = json.load(weatherbot) 
print(weatherinfo["weather"][0]["main"]) # prints "Clear"