我如何在kivy程序中使用json api [英] how do i use json api in my kivy program

查看:96
本文介绍了我如何在kivy程序中使用json api的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧!

问题描述

我目前正在阅读O'Reilly的《在Kivy中创建应用程序》,有一个例子,我无法使其正常工作,因为他写这本书的时候

hi I'm currently reading O'Reilly's Creating Apps in Kivy and there's an example that I can't get it to work correctly because by the time he wrote the book openWeatherMap didn't require api key (APPID) but now it does and I'm a novice programmer and don't know how to change the code so it would work.

这是main.py的源代码:

this is the main.py source code:

from kivy.app import App
from kivy.uix.boxlayout import BoxLayout
from kivy.properties import ObjectProperty
from kivy.network.urlrequest import UrlRequest
import json

class AddLocationForm(BoxLayout):
    search_input = ObjectProperty()

def search_location(self):
    search_template = "http://api.openweathermap.org/data/2.5" + "find?q={}&type=like"
    search_url = search_template.format(self.search_input.text)
    request = UrlRequest(search_url, self.found_location)

def found_location(self, request, 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']]
    self.search_results.item_strings = cities
    print("\n".join(cities))

class WeatherApp(App):
pass

if __name__ == '__main__':
WeatherApp().run()

这是weather.kv源代码:

and this is weather.kv source code:

AddLocationForm:

<AddLocationForm>:
    orientation: "vertical"
    search_input: search_box
    search_results: search_results_list
    BoxLayout:
    height: "40dp"
    size_hint_y: None
    TextInput:
        id: search_box
        size_hint_x: 50
    Button:
        text: "Search"
        size_hint_x: 25
        on_press: root.search_location()
    Button:
        text: "Current Location"
        size_hint_x: 25
ListView:
    id: search_results_list
    item_strings: []

该代码很简单,您可以在文本框中输入城市名称,然后点击搜索,然后通过显示其收到的名称来进行确认.

the code's simple you put a city name in textbox and hit search and it confirms it by showing the name it recieved.

推荐答案

好,所以我不知道我是否迟到但最近才买了这本书,我也发现自己完全陷入了这个问题.在搜寻此问题时,我偶然发现了您的问题以及本书的O'Reilly链接.这是作者对这个问题不得不说的:

OK, so I don't know if I'm late or not but having bought this book recently, I too found myself stuck exactly in this problem. Upon Googling this issue, I happened to stumble upon your question as well as O'Reilly link for this book. This is what the author had to say about this problem:

我已经确认了问题; openweathermap更改了他们的查询 流程和书中的网址现在都已损坏.这将 彻底破坏所有新读者的阅读体验;我们需要 做一个更新,也许应该谈论第二版."

"I've confirmed the issue; openweathermap has changed their query process and the urls in the book are now all broken. This is going to utterly ruin the reader experience for all new readers; we'll need to do an update and should maybe talk about a second edition."

幸运的是,一个好撒玛利亚人找到了解决这个问题的办法.但是,为此,您必须首先创建一个免费的开放天气帐户.创建帐户后,您将获得一个API密钥.它会出现在您的个人资料中.

Luckily a good Samaritan found out the solution to this problem. But in order to do so you must first create a free Open Weather account. After creating the account, you'll get an API key. It'll be in your profile.

所以,现在这段代码:

search_template = "http://api.openweathermap.org/data/2.5" + "find?q={}&type=like"

成为:

search_template = "http://api.openweathermap.org/data/2.5/find?q={}&type=like&APPID=" + "YOUR_API_KEY"

这对我有用.我知道我迟到了3个月,也许现在您已经找到答案了,但是我认为这对于遇到类似问题的人很有用,而Google的搜索结果会将他们带到这个地方.

This worked for me. I know I'm 3 months late and probably by now you'd have gotten your answer, but I thought this will be useful for those who run into similar problems and their Google result will bring them to this place.

这篇关于我如何在kivy程序中使用json api的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!

查看全文
登录 关闭
扫码关注1秒登录
发送“验证码”获取 | 15天全站免登陆