Я борюсь с этим в течение некоторого времени и не могу найти решение.Результаты Python/Kivy - UrlRequest
Итак, я изучал Python и Kivy с «Создание приложений в Киви» от Dusty Phillips. Это простое приложение для погоды, и когда я пытаюсь получить данные с openweathermap.com, функция UrlRequest не работает должным образом. Я довольно новичок в kivy и python, но, как я вижу, функция должна вызывать метод «found_location» с двумя аргументами: request и result (список, полученный из URL-адреса). Если я получаю доступ к url из своего браузера, я получаю правильные результаты, но вернусь к python, «результаты» появились как NONE.
Вот код, с некоторыми отпечатками для отладки:
from kivy.app import App
#kivy.require("1.9.1")
from kivy.uix.boxlayout import BoxLayout
from kivy.properties import ObjectProperty
from kivy.network.urlrequest import UrlRequest
class AddLocationForm(BoxLayout):
search_input = ObjectProperty()
search_results = ObjectProperty()
def search_location(self):
search_template = "api.openweathermap.org/data/2.5/forecast/daily?APPID=ef4f6b76310abad083b96a45a6f547be&q=" + "{}"
search_url = search_template.format(self.search_input.text)
print search_url
request = UrlRequest(search_url, self.found_location)
print request
print "Result: ", request.result
def found_location(self, request, data):
print request
print data
data = json.loads(data.decode()) if not isinstance(data, dict) else data
cities = ["{} ({})".format(d['name'], d['sys']['country'])
for d in data['list']]
print cities
self.search_results.item_strings = cities
print "DONE"
class WeatherApp(App):
pass
if __name__ == '__main__':
WeatherApp().run()
А вот консоль:
[INFO ] [OSC ] using <multiprocessing> for socket
[INFO ] [Base ] Start application main loop
[INFO ] [GL ] NPOT texture support is available
api.openweathermap.org/data/2.5/forecast/daily?APPID=ef4f6b76310abad083b96a45a6f547be&q=London
<UrlRequest(Thread-1, started daemon 139654193755904)>
Result: None
Как вы можете видеть, это проходит правильный URL и в браузере я получил правильные результаты , но метод «found_location» никогда не вызывается и в python request.results = None
Что я делаю неправильно?
Надеюсь, вы, ребята, можете понять мой вопрос. Спасибо за помощь и извините за английский.
Не совсем ответ, но вы пробовали использовать библиотеку запросов (http://docs.python-requests.org/en/master/)? Это де-факто стандартный способ Python для работы с HTTP, и у kivy обычно нет проблем с использованием внешних библиотек. – Synedraacus