本文内容来源:https://www.dataquest.io/mission/117/working-with-apis

本文的数据来源:https://en.wikipedia.org/wiki/International_Space_Station

本文摘要:通过requests库和github的api来操作github仓库,从而熟悉一下与网络数据交互的过程

API(Application Program Interface)的作用是查询和返回网络上的动态数据,譬如股票的价格信息和新闻的实时评论。通过API获取数据的过程就像你访问一个网页一样,向服务器提交请求,然后服务器返回相应的数据。通常使用requests库(http://www.python-requests.org/en/latest/)来提交请求的,本文所用的github的API地址为:https://developer.github.com/v3/

 

获取访问令牌

要想通过api来操作你的github,必须要先在github的网址(https://github.com/settings/tokens)上生成一个访问令牌

使用访问令牌而不是用用户名和密码的原因有两个:

  1. 通常放入了程序中的用户名和密码是很容易泄密的,别人看到了你的代码后知道了用户名和密码就能进行任意的操作。而如果有人使用了你的访问令牌,你可以随时注销掉该令牌
  2. 访问令牌是可以进行细粒度的权限配置,你可以设置该令牌只能查看你的github,从而保证了安全

 

获取到了访问令牌后,记得马上复制下来,并记录在程序中,往后的所有requests都必须带着这个访问令牌,记得必须要有token字段

{"Authorization": "token 975ef3a9dff1a7dc50d5f0a4341ecf5a89f201ab"}

注意:本文中的所有出现kylinlin的地方都要替换为你的账户名

 

GET请求

GET请求用户从服务器中获取信息

# 获取授权用户的信息

import requests

headers = {"Authorization": "975ef3a9dff1a7dc50d5f0a4341ecf5a89f201ab"} # 前两行会在后面的代码中忽略掉不写

user = requests.get('https://api.github.com/user', headers=headers).json()

print user

#如果get()方法里没有headers参数,则会返回如下结果:(表示要求认证)

{u'documentation_url': u'https://developer.github.com/v3', u'message': u'Requires authentication'}

但并不是所有的方法都必须要带上headers参数

获取个人信息(将kylinlin替换为任意的帐户名都可以)

response = requests.get("https://api.github.com/users/kylinlin")

print response.status_code 

print response.json()

每一个访问都会生成一个状态码,用属性status_code表示,这个状态码用来表示这个访问的结果:

  1. 200 -- 一切正常,返回了要求的结果
  2. 301 -- 服务器将该请求重定向到其他网站
  3. 401 -- 身份认证出错
  4. 400 -- 服务器认为这是一个错误请求
  5. 403 -- 你无权访问该资源
  6. 404 -- 访问的资源不存在

一个请求返回的内容默认是字符串格式,要提取该内容中的某些信息,最方便的方法就是将字符串转换成python对象,而json()方法用来实现这个功能的。

在get方法里带上参数,requests.get()方法里的params参数就是url里的参数,与headers参数不同,headers参数的值会写在请求头里,而params参数的值会写在url里,譬如要获取github作者所关注的项目,并将50条结果作为一页,获取第一页的内容。此时的url实际上是这样的:https://api.github.com/users/kylinlin/starred?pre_page=50&page=1

params = {"per_page": 50, "page": 1}

response = requests.get("https://api.github.com/users/kylinlin/starred", params=params)

page1_repos = response.json()

print page1_repos

 

POST请求

POST请求用于向服务器发送信息,然后在服务器上创建对象,譬如要创建一个新的项目

payload = {'name':'learning-about-apis'}  # name参数的值是要创建的项目名称

status = requests.post('https://api.github.com/user/repos',

    headers=headers, json=payload).status_code # json参数会将payload变量转化为字典格式

print status   # 输出201就表明项目创建成功

 

PATCH和PUT请求

有时候我们只是要更新一个项目的信息,此时就可以使用PATCH或PUT方法,譬如要更新刚才创建的项目的描述信息

payload = {'description': 'Learning about requests!', 'name': 'learning-about-apis'}

status = requests.patch('https://api.github.com/repos/kylinlin/learning-about-apis', json=payload, headers=headers).status_code

print status

# patch方法成功后会返回200

DELETE请求

DELETE请求用于删除服务器上的对象,譬如要删除刚才的项目

status = requests.delete('https://api.github.com/repos/kylinlin/learning-about-apis',

    headers=headers).status_code 

print status

#输出204就表示删除成功

Requests库的几种请求 - 通过API操作Github的更多相关文章

  1. 大概看了一天python request源码。写下python requests库发送 get,post请求大概过程。

    python requests库发送请求时,比如get请求,大概过程. 一.发起get请求过程:调用requests.get(url,**kwargs)-->request('get', url ...

  2. 用python的Requests库模拟http请求

    一.先了解几个重要的http请求头或响应头信息 Request Headers: Host: 描述请求将被发送的目的地,包括,且仅仅包括域名和端口号. Origin: 说明请求从哪里发起的,包括,且仅 ...

  3. requests库和urllib包对比

    python中有多种库可以用来处理http请求,比如python的原生库:urllib包.requests类库.urllib和urllib2是相互独立的模块,python3.0以上把urllib和ur ...

  4. python WEB接口自动化测试之requests库详解

    由于web接口自动化测试需要用到python的第三方库--requests库,运用requests库可以模拟发送http请求,再结合unittest测试框架,就能完成web接口自动化测试. 所以笔者今 ...

  5. python爬虫入门三:requests库

    urllib库在很多时候都比较繁琐,比如处理Cookies.因此,我们选择学习另一个更为简单易用的HTTP库:Requests. requests官方文档 1. 什么是Requests Request ...

  6. python接口自动化测试之requests库详解

    前言 说到python发送HTTP请求进行接口自动化测试,脑子里第一个闪过的可能就是requests库了,当然python有很多模块可以发送HTTP请求,包括原生的模块http.client,urll ...

  7. 爬虫入门 requests库

    写在最前的具体资料: https://2.python-requests.org//zh_CN/latest/user/quickstart.html https://www.liaoxuefeng. ...

  8. python爬虫(1)requests库

    在pycharm中安装requests库的一种方法 首先找到设置 搜索然后安装,蓝色代表已经安装 requests库中的get请求 与HTTP协议相对应,requests库也有七种请求方式. 获取ur ...

  9. python requests库与json数据处理详解

    1. http://docs.python-requests.org/zh_CN/latest/user/quickstart.html get方法将参数放在url里面,安全性不高,但是效率高:pos ...

随机推荐

  1. as3.0 [Embed]标签嵌入外部资源

    1.[Embed]嵌入资源 ActionScript代码的顺序非常重要.你必须在声明变量前添加[Embed]元数据标签,而且这个变量的类型会是Class; package { import flash ...

  2. 《Cortex-M0权威指南》之Cortex-M0技术综述

    转载请注明来源:cuixiaolei的技术博客 Cortex-M0 处理器简介 1. Cortex-M0 处理器基于冯诺依曼架构(单总线接口),使用32位精简指令集(RISC),该指令集被称为Thum ...

  3. c#几个小例子引发的思考

    楚广明老师的c#教程每一节都会给出几个小例子让大家联系,对于初学者来说这确实是一件很纠结的事情,下面我把这几个小例子简单的写一下.同时看一下我们学到了什么 1.面向过程版的圆周长面积计算 using ...

  4. cxGrid使用汇总2

    17. 怎样设计多表头的cxGrid? 解决:cxGrid可以解决如下的表头: --------------------------------- | 说明1 | 说明2 | ------------ ...

  5. poj 1390 动态规划

    思路: 黑书的例题 #include<iostream> #include<cstring> #include<algorithm> #include<cma ...

  6. Hartree-Fock理论(更新中)

    预备知识: 基组 分子轨道基本概念与Hartree Product 平均场与Fock算符 在忽略分子中电子的相互作用时,我们有了一个粗糙的模型,虽然非常容易求解,但是描述的精确程度非常差. 考虑电子的 ...

  7. 一步步搭建自己的轻量级MVCphp框架-(四)一个国产轻量级框架Amysql源码分析(3) 总进程对象

    AmysqlProcess类,框架的总进程对象 ./Amysql/Amysql.php 下面还是和以前一样,先上代码~ class AmysqlProcess { public $AmysqlCont ...

  8. ASP.NET缓存全解析6:数据库缓存依赖 转自网络原文作者李天平

    更多的时候,我们的服务器性能损耗还是在查询数据库的时候,所以对数据库的缓存还是显得特别重要,上面几种方式都可以实现部分数据缓存功能.但问题是我们的数据有时候是在变化的,这样用户可能在缓存期间查询的数据 ...

  9. (转)Android面试题

    1.  下列哪些语句关于内存回收的说明是正确的? (b ) A. 程序员必须创建一个线程来释放内存 B.内存回收程序负责释放无用内存  C.内存回收程序允许程序员直接释放内存  D.内存回收程序可以在 ...

  10. ORACLE 数据库概述以及Oracel数据库的安装、卸载、使用

    一:Orcale简介 1.发展史 1978年,Orcale诞生 1982年,Orcale3推出了,它是第一个能够运行在大型机和小型机上的关系型数据库 1997年,Orcale公司推出了基于java语言 ...