Requests庫的幾種請求 - 經過API操做Github

本文內容來源:https://www.dataquest.io/mission/117/working-with-apispython

本文的數據來源:https://en.wikipedia.org/wiki/International_Space_Stationgit

本文摘要:經過requests庫和github的api來操做github倉庫,從而熟悉一下與網絡數據交互的過程github

API(Application Program Interface)的做用是查詢和返回網絡上的動態數據,譬如股票的價格信息和新聞的實時評論。經過API獲取數據的過程就像你訪問一個網頁同樣,向服務器提交請求,而後服務器返回相應的數據。一般使用requests庫(http://www.python-requests.org/en/latest/)來提交請求的,本文所用的github的API地址爲:https://developer.github.com/v3/json

 

獲取訪問令牌

要想經過api來操做你的github,必需要先在github的網址(https://github.com/settings/tokens)上生成一個訪問令牌api

Image 001

使用訪問令牌而不是用用戶名和密碼的緣由有兩個:安全

  1. 一般放入了程序中的用戶名和密碼是很容易泄密的,別人看到了你的代碼後知道了用戶名和密碼就能進行任意的操做。而若是有人使用了你的訪問令牌,你能夠隨時註銷掉該令牌
  2. 訪問令牌是能夠進行細粒度的權限配置,你能夠設置該令牌只能查看你的github,從而保證了安全

Image 002

圖片1

 

獲取到了訪問令牌後,記得立刻複製下來,並記錄在程序中,日後的全部requests都必須帶着這個訪問令牌,記得必需要有token字段服務器

{"Authorization": "token 975ef3a9dff1a7dc50d5f0a4341ecf5a89f201ab"}網絡

注意:本文中的全部出現kylinlin的地方都要替換爲你的帳戶名post

 

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就代表項目建立成功

Image 004

 

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

Image 005

DELETE請求

DELETE請求用於刪除服務器上的對象,譬如要刪除剛纔的項目

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

    headers=headers).status_code 

print status

#輸出204就表示刪除成功

Image 003

相關文章
相關標籤/搜索