Use API to retrieve data from internet
Reference: Working with APIs
Many big companies and organizations provide API for us to retrieve data, and we use requests library to get data with Json format from them.
1: Type of requests
There are many types of request for getting data, We can use a simple GET request to retrieve information from the OpenNotify API. OpenNotify has several API endpoints. An endpoint is a server route that is used to retrieve different data from the API. For example, the /comments
endpoint on the Reddit API might retrieve information about comments, whereas the/users
endpoint might retrieve data about users.
For example:
# Make a get request to get the latest position of the international space station from the opennotify api.
response = requests.get("http://api.open-notify.org/iss-now.json")
status_code = response.status_code
And you can see a listing of all the endpoints on OpenNotify here.
2: Status codes
The request we just made had a status code of 200
. Status codes are returned with every request that is made to a web server. Status codes indicate information about what happened with a request. Here are some codes that are relevant toGET requests:
200
-- everything went okay, and the result has been returned (if any)301
-- the server is redirecting you to a different endpoint. This can happen when a company switches domain names, or an endpoint name is changed.401
-- the server thinks you're not authenticated. This happens when you don't send the right credentials to access an API (we'll talk about this in a later mission).400
-- the server thinks you made a bad request. This can happen when you don't send along the right data, among other things.403
-- the resource you're trying to access is forbidden -- you don't have the right permissions to see it.404
-- the resource you tried to access wasn't found on the server.
# Make a get request to get the latest position of the international space station from the opennotify api.
response = requests.get("http://api.open-notify.org/iss-pass.json")
status_code = response.status_code
3: Query parameters
Look at documentation for the OpenNotify API, we see that the ISS Pass endpoint requires two parameters.
The ISS Pass endpoint returns when the ISS will next pass over a given location on earth. In order to compute this, we need to pass the coordinates of the location to the API. We do this by passing two parameters -- latitude and longitude.
We can make a dictionary with these parameters, and then pass them into the function.
We can also do the same thing directly by adding the query parameters to the url, like this: http://api.open-notify.org/iss-pass.json?lat=40.71&lon=-74
.
For example we send San the coordinates of Francisco as parameters to the API:
response = requests.get("http://api.open-notify.org/iss-pass.json", params={"lat":37.78, "lon":-122.41})
content = response.content
And the content is:
b'{\n "message": "success", \n "request": {\n "altitude": 100, \n "datetime": 1441417753, \n "latitude": 37.78, \n "longitude": -122.41, \n "passes": 5\n }, \n "response": [\n {\n "duration": 369, \n "risetime": 1441456672\n }, \n {\n "duration": 626, \n "risetime": 1441462284\n }, \n {\n "duration": 581, \n "risetime": 1441468104\n }, \n {\n "duration": 482, \n "risetime": 1441474000\n }, \n {\n "duration": 509, \n "risetime": 1441479853\n }\n ]\n}'
The json library has two main methods:
dumps
-- Takes in a Python object, and converts it to a string.loads
-- Takes a json string, and converts it to a Python object.
To see more details about the parameters format JSON, please click the link: JavaScript Object Notation
4: Getting JSON from a request
We can get the content of a response as a Python object by using the .json()
method on the response.
Get the duration value of the first pass of the ISS over San Francisco, and assign the value the first_pass_duration.
# Make the same request we did 2 screens ago.
parameters = {"lat": 37.78, "lon": -122.41}
response = requests.get("http://api.open-notify.org/iss-pass.json", params=parameters) # Get the response data as a python object. Verify that it's a dictionary.
data = response.json()
print(type(data))
print(data)
firt_pass_duration = data["reponse"][0]["duration"]
As we can see just now, we can transform the json format data from the response to dictionary for processing.
5: Content type
The server doesn't just send a status code and the data when it generates a response. It also sends metadata containing information on how the data was generated and how to decode it. This is stored in the response headers. We can access this with the .headers
property of a response.
The headers will be shown as a dictionary. Within the headers, content-type
is the most important key for now. It tells us the format of the response, and how to decode it. For the OpenNotify API, the format is json, which is why we could decode it with json earlier.
Exercise:
OpenNotify has a API endpoint, astros.json. It tells we how many people are currently in space.
We can see the details here.
Here is the sample code:
import requests
parameters = {"lat":39.92889, "lon":116.38833}
response = requests.get("http://api.open-notify.org/astros.json", params=parameters)
data = response.json()
#print(data)
in_space_count = data['number']
print(in_space_count)
Use API to retrieve data from internet的更多相关文章
- Failed to retrieve data for this request. (Microsoft.SqlServer.Management.Sdk.Sfc)
使用Microsoft SQL SERVER 2014 Management Studio访问Azure SQL Database时,查看存储过程时遇到下面错误信息: TITLE: Microsoft ...
- Dynamics CRM2016 Web API之Retrieve Multiple
之前的博文只介绍了通过记录的primary key来查询单条记录或者单个属性值,本篇介绍多条记录的查询方法 var filter = "?$filter=name eq '123'" ...
- C# Web API Modify Post Data Size Limit
在Web.config中增加下面两个配置后,重启IIS即可. 1.修改http请求数据大小限制 <system.web> <httpRuntime maxRequestLength ...
- [原]Android开发环境搭建
[Date]2014-04-20 [Author]wintys (wintys@gmail.com) http://wintys.cnblogs.com [Keywords]android . 离线a ...
- Gluon Data API
http://mxnet.apache.org/api/python/gluon/data.html import sys import os import time import mxnet as ...
- 【转】简单的 Laravel 5 REST API
Introduction Almost all successful internet based companies have APIs. API is an acronym for Applica ...
- puppeteer(五)chrome启动参数列表API
List of Chromium Command Line Switches https://peter.sh/experiments/chromium-command-line-switches/ ...
- Indexing Sensor Data
In particular embodiments, a method includes, from an indexer in a sensor network, accessing a set o ...
- Advanced Architecture for ASP.NET Core Web API
转自: https://www.infoq.com/articles/advanced-architecture-aspnet-core ASP.NET Core's new architecture ...
随机推荐
- rem vh vw vmin vmax ex ch
rem 我们首先介绍下和我们熟悉的很相似的货.em 被定义为相对于当前对象内文本的字体大小.如果你给body小哥设置了font-size字体大小,那么body小哥的任何子元素的1em就是等于body设 ...
- android开发SDcard 响应的文件相关处理(一)
android开发相关文件类的处理工具类: package com.gzcivil.utils; import java.io.File; import java.util.ArrayList; im ...
- vs2010打开设计器出现错误
vs2010打开设计器出现此界面, 错误多种,还有“未将对象引用设置到对象的实例” ,我项目用到了第三方控件(没有安装,bin文件夹导入DLL文件,项目直接引用的DLL文件),看下面的堆栈信息,显 ...
- log4j日志输出配置
# Configure logging for testing: optionally with log filelog4j.rootLogger=WARN, stdoutlog4j.rootLogg ...
- source、sh、bash、./执行脚本的区别
1.source命令用法: source FileName 作用:在当前bash环境下读取并执行FileName中的命令.该filename文件可以无"执行权限" 注:该命令通常用 ...
- Mongodb基础知识----Mongodb权威指南阅读
文档是Mongodb中数据的基本单元,类型关系型数据库中的行,每个文档都有一个键值唯一的键_id.集合可以看做拥有动态模式的表. Mongodb一个实例可以拥有多个相互独立的数据库. Mongodb区 ...
- leetcode first bad version python
# The isBadVersion API is already defined for you. # @param version, an integer # @return a bool # d ...
- C++中的函数指针和指针函数
C++中的函数指针和指针函数 数组名一般可以被当成指向数组第一个元素的常量指针,同样的情况,在函数中,函数名可以本当成指向函数的常量指针,假如一个函数已经定义,那么它在计算机中一定有特定的 ...
- 解决IE8下VS2005,VS2008一些向导提示脚本错误问题
Some VS2005 and VS2008 Wizards Pop Up Script Error. Visual C++ team has discovered that after inst ...
- 16.java.lang.InterruptedException
java.lang.InterruptedException 被中止异常 当某个线程处于长时间的等待.休眠或其他暂停状态,而此时其他的线程通过Thread的interrupt方法终止该线程时抛出该异常 ...