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.
 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-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.
 We can use this 2 functions to convert normal parameters between json format.

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的更多相关文章

  1. Failed to retrieve data for this request. (Microsoft.SqlServer.Management.Sdk.Sfc)

    使用Microsoft SQL SERVER 2014 Management Studio访问Azure SQL Database时,查看存储过程时遇到下面错误信息: TITLE: Microsoft ...

  2. Dynamics CRM2016 Web API之Retrieve Multiple

    之前的博文只介绍了通过记录的primary key来查询单条记录或者单个属性值,本篇介绍多条记录的查询方法 var filter = "?$filter=name eq '123'" ...

  3. C# Web API Modify Post Data Size Limit

    在Web.config中增加下面两个配置后,重启IIS即可. 1.修改http请求数据大小限制 <system.web>  <httpRuntime maxRequestLength ...

  4. [原]Android开发环境搭建

    [Date]2014-04-20 [Author]wintys (wintys@gmail.com) http://wintys.cnblogs.com [Keywords]android . 离线a ...

  5. Gluon Data API

    http://mxnet.apache.org/api/python/gluon/data.html import sys import os import time import mxnet as ...

  6. 【转】简单的 Laravel 5 REST API

    Introduction Almost all successful internet based companies have APIs. API is an acronym for Applica ...

  7. puppeteer(五)chrome启动参数列表API

    List of Chromium Command Line Switches https://peter.sh/experiments/chromium-command-line-switches/ ...

  8. Indexing Sensor Data

    In particular embodiments, a method includes, from an indexer in a sensor network, accessing a set o ...

  9. Advanced Architecture for ASP.NET Core Web API

    转自: https://www.infoq.com/articles/advanced-architecture-aspnet-core ASP.NET Core's new architecture ...

随机推荐

  1. App.config和Web.config配置文件的自定义配置节点

    前言 昨天修改代码发现了一个问题,由于自己要在WCF服务接口中添加了一个方法,那么在相应调用的地方进行更新服务就可以了,不料意外发生了,竟然无法更新.左查右查终于发现了问题.App.config配置文 ...

  2. QRMaker生成二维码,支持中文

    QRMaker如果想支持中文,可以将中文转为UTF8,然后用InputDateB直接传入Byte() Option Explicit Private Declare Function WideChar ...

  3. MyEclipse中jquery文件报错

  4. PHP获取中文汉字首字母方法

    function getFirstLetter($str){ $fchar = ord($str{0}); if($fchar >= ord("A") and $fchar ...

  5. op cache config

    [opcache] ; dll地址 zend_extension=php_opcache.dll ; 开关打开 opcache.enable=1 ; 开启CLI opcache.enable_cli= ...

  6. jmeter实例演示

    Jmeter 是比较轻便的性能测试工具,下面根据一个实例演示下jmeter的常见用法 一.前期准备,在使用之前,先分析测试需求,比如:需不要登录?需不需要监视服务器性能?多线程还是多循环?需不需根据流 ...

  7. c语言中的制表符\t与空格

    (本文不讨论制表符与空格缩进问题) 编程过程中,我们常常用多个空格或制表符分隔两个字符串,那么这两个在显示效果上有什么区别呢? 比较如下两行代码的输出效果 代码1: printf("1\t1 ...

  8. 深入Android媒体存储服务(一):APP与媒体存储服务的交互

    简介: 本文介绍如何在 Android 中,开发者的 APP 如何使用媒体存储服务(包含MediaScanner.MediaProvider以及媒体信息解析等部分),包括如何把 APP 新增或修改的文 ...

  9. 柯南君:看大数据时代下的IT架构(4)消息队列之RabbitMQ--案例(Helloword起航)

    柯南君:看大数据时代下的IT架构(4)消息队列之RabbitMQ--案例(Helloword起航) 二.起航 本章节,柯南君将从几个层面,用官网例子讲解一下RabbitMQ的实操经典程序案例,让大家重 ...

  10. JS 网页打印解决方案

    这些日子真是太忙了,项目太多了公司总是加班,而且这些项目中好多都用到的打印,所以学习了一段时间js的打印. 其实原来只是用到了简单的功能,现在要深入的了解才发现原来ie的网页打印也是如此的强大. 以下 ...