本文內容來源: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
使用訪問令牌而不是用用戶名和密碼的緣由有兩個:安全
獲取到了訪問令牌後,記得立刻複製下來,並記錄在程序中,日後的全部requests都必須帶着這個訪問令牌,記得必需要有token字段服務器
{"Authorization": "token 975ef3a9dff1a7dc50d5f0a4341ecf5a89f201ab"}網絡
注意:本文中的全部出現kylinlin的地方都要替換爲你的帳戶名post
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表示,這個狀態碼用來表示這個訪問的結果:
一個請求返回的內容默認是字符串格式,要提取該內容中的某些信息,最方便的方法就是將字符串轉換成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請求用於向服務器發送信息,而後在服務器上建立對象,譬如要建立一個新的項目
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方法,譬如要更新剛纔建立的項目的描述信息
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請求用於刪除服務器上的對象,譬如要刪除剛纔的項目
status = requests.delete('https://api.github.com/repos/kylinlin/learning-about-apis', headers=headers).status_code print status #輸出204就表示刪除成功