2016-02-05 44 views
1

我正在學習Python,並且正在使用適用於MediaFire的API並嘗試自動執行一些簡單的過程。但是,在通過POST獲取會話令牌後,我遇到了一些困惑。問題是我不確定如何從響應中提取令牌。這裏是調用來獲取會話令牌:從Python中的JSON響應中提取令牌

import hashlib 
import time 
import urllib.request 

token = hashlib.sha1() 
token.update("[email protected]c809kfutv5z".encode('utf-8')) 
token_dig = token.hexdigest() 

with urllib.request.urlopen("https://www.mediafire.com/api/user/get_session_token.php?application_id=36102&signature=" + token_dig + "&[email protected]&password=heaven&token_version=2&response_format=json") as response: 
    html = response.read() 

這裏是性反應的,我回去來自呼叫:

b'{"response":{"action":"user\\/get_session_token","session_token":"618679cd5046c48fface93dee366a1a07eacfefc5bce88173d5118bb3f128f539602dc54f6d667825a376bc2f86b41a5b1cbe178cd45dfcb4ddfc8e9652f7c529db233181655ec42","secret_key":"774329384","time":"1454700043.4884","ekey":"a84adbba31f9ae8ef717486616a97c63","pkey":"b4dfdc307d","result":"Success","current_api_version":"1.5"}}' 

的小白任何幫助,將不勝感激

回答

3

我會推薦使用requests而不是urllib,並使用json()與響應一起工作:

import json 
import hashlib 
import requests 

token = hashlib.sha1() 
token.update("[email protected]c809kfutv5z".encode('utf-8')) 
token_dig = token.hexdigest() 

response = requests.get("https://www.mediafire.com/api/user/get_session_token.php?application_id=36102&signature=" + token_dig + "&[email protected]&password=heaven&token_version=2&response_format=json") 

json_response = response.json() 
print json_response["response"]["session_token"] 
+0

我把它,並給了它一個測試運行並遇到了一個錯誤,我需要設置一個參數來轉換爲一個字符串? 回溯(最近通話最後一個): 文件 「C:\用戶\ rhood \文檔\ test.py」,第16行,在 json_response = json.loads(HTML) 文件「C:\用戶\ rhood \ AppData \ Local \ Programs \ Python \ Python35 \ lib \ json \ __ init__.py「,第312行加載 s .__ class __.__ name__)) TypeError:JSON對象必須是str,而不是'bytes' –

+0

loading一個字符串作爲輸入 – tinySandy

+0

你可以進一步簡化使用'response.json()'而不是'json.loads(response.text)' – kichik

相關問題