我正在尝试创建一个Marvel API调用。
这里有一个关于授权的链接: https://developer.marvel.com/documentation/authorization 我正在尝试创建一个服务器端应用程序,因此根据上面的链接,我需要一个时间戳、apikey和hash url参数。Hash需要是以下表单的md5哈希: md5(timestamp + privateKey + publicKey),而apikey url参数是我的公钥。
这是我的代码,我正在使用Python 3中的请求库来发起请求,使用时间库来形成时间戳,使用hashlib库来形成哈希。
这里有一个关于授权的链接: https://developer.marvel.com/documentation/authorization 我正在尝试创建一个服务器端应用程序,因此根据上面的链接,我需要一个时间戳、apikey和hash url参数。Hash需要是以下表单的md5哈希: md5(timestamp + privateKey + publicKey),而apikey url参数是我的公钥。
这是我的代码,我正在使用Python 3中的请求库来发起请求,使用时间库来形成时间戳,使用hashlib库来形成哈希。
#request.py: making a http request to marvel api
import requests;
import time;
import hashlib;
#timestamp
ts = time.time();
ts_str = str(float(ts));
#keys
public_key = 'a3c785ecc50aa21b134fca1391903926';
private_key = 'my_private_key';
#hash and encodings
m_hash = hashlib.md5();
ts_str_byte = bytes(ts_str, 'utf-8');
private_key_byte = bytes(private_key, 'utf-8');
public_key_byte = bytes(public_key, 'utf-8');
m_hash.update(ts_str_byte + private_key_byte + public_key_byte);
m_hash_str = str(m_hash.digest());
#all request parameters
payload = {'ts': ts_str, 'apikey': 'a3c785ecc50aa21b134fca1391903926', 'hash': m_hash_str};
#make request
r = requests.get('https://gateway.marvel.com:443/v1/public/characters', params=payload);
#for debugging
print(r.url);
print(r.json());
以下是输出结果:
$python3 request.py
https://gateway.marvel.com:443/v1/public/characters...${URL TRUNCATED FOR READABILITY)
{'code': 'InvalidCredentials', 'message': 'That hash, timestamp, and key combination is invalid'}
$
我不确定是什么导致组合无效。
如果需要,我可以提供更多信息。任何信息都将不胜感激。谢谢!
编辑:
我对API调用还有点陌生。有没有了解如何执行它们的更多资源?到目前为止,根据我的有限经验,它们似乎非常具体,让每个人都需要花费一些时间才能使其正常工作。我是一名大学生,在黑客马拉松中工作时,我需要花费很长时间才能弄清楚如何执行API调用。我承认我没有经验,但总的来说,即使对于已经完成了10个左右的人来说,弄清新的API是否需要一个大的学习曲线呢?
再次感谢您的时间 :)
m_hash.hexdigest()
可能是解决方案。我不得不硬编码ts = 1
和apikey = 1234
,以确保从漫威的示例中得到正确的哈希值。另外,ts_str = str(int(ts));
使用int而不是float? - TrebledJ