2016-02-05 61 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