在成长过程中,我时常认为探索宇宙空间是一件令人兴奋的事情,幻想那些未知的事物是相当有趣的。我也喜欢浏览异世界的照片或者探讨广袤的空间。可是这些和Python有什么关系呢?当然有关啦,美国国家航空航天局(NASA)提供了一套基于web的API,可以用于查询他们的图像库。
您可以在他们的网站阅读相关信息。
NASA官网建议先获取API密钥。当访问网站时,需要填写一个简短的表格。
从技术层面上来说,您无需API密钥即可请求NASA服务。然而,对于免密钥的访问,存在速率限制的问题。当然,即使使用密钥进行访问,也会存在每小时至多1000次请求的默认上限值。如果超过限制,将暂时阻止发送请求。可以联系NASA提高上限值。
有趣的是,文档并未说明免密钥情况下的请求次数上限。
关于域名访问方面,NASA的图像API文档和普通API文档之间存在出入,导致使用时令人困惑。
比如,普通API文档上的URL如下:
https://api.nasa.gov/planetary/apod?api_key=API_KEY_GOES_HERE
但是,图像API文档给出的URL有所不同:
https://images-api.nasa.gov
对于本教程而言,将采用后者。
当开始使用不太熟悉的API时,最好先阅读其官方文档。另外可以在网上搜索是否存在基于该API的Python包。不过似乎没有NASA库的Python版本,所以需要自己实现。
开始使用前,请阅读NASA的图像API文档。
这个文档不是很长,无需花费大量时间阅读,所以请尽量浏览一遍。
接下来将尝试使用该API。
如下是访问API的部分代码:
如果在调试器中运行此代码,则可以打印返回的JSON。
如下是返回的部分内容:
既然已经了解了JSON的格式,可以尝试解析它。
可以在Python脚本中加入如下代码:
由此可以获取JSON的第一个项。然后可以解析出nasa_id,用于获取与此特定结果关联的所有图像。接下来可以将nasa_id添加到新URL并发出请求。
请求结果如下:
Python代码的最后两行用于从JSON中提取URL。至此我们获取了需要展示的全部数据。
用户界面的设计
您可以通过多种不同的方式设计图像下载应用程序。其中原型模式是最简单且快速的。它的优势在于在实现所有基本需求的基础上,可以结合自己掌握的知识增强原型或者进行创新。
如下是一个尝试创建的模型:
如您所见,应用程序需要具有如下功能:
搜索栏
保存搜索结果的部件
选择某个结果时的图像显示方式
图像下载功能
接下来让我们一起学习如何创建这个用户界面吧!
英文原文:https://www.blog.pythonlibrary.org/2019/04/18/creating-a-gui-application-for-nasas-api-with-wxpython/
译者:我是昵称耶~