php 在Python中从REST API迁移Mintegral数据

u59ebvdq  于 2023-05-16  发布在  PHP
关注(0)|答案(3)|浏览(68)

Mintegral REST API文档https://www.mintegral.com/wp-content/uploads/2018/10/1-Mintegral_Reporting-API.pdf
当我在Python中运行这段代码时,它总是返回{"code":400,"msg":"Validation fails (Token Error)","data":null}(随附屏幕截图)x1c 0d1x
API密钥和用户名正确。我不知道为什么????

import requests
import time
import hashlib 

apikey = "xxxx"
encoded_timestamp = hashlib.md5(str(time.time()).encode())
token = apikey + encoded_timestamp.hexdigest()
md5_token = hashlib.md5(token.encode()).hexdigest()

response = requests.get("http://data.mintegral.com/v4.php?m=advertiser",
                        params = {
                        'username':'XXXABC'
                        ,'token':md5_token
                        ,'timestamp':str(int(time.time()))
                        # ,'utc':'+8'
                ,'start_date':'2022-06-07'
                ,'end_date':'2022-06-13'
                ,'Content-type': 'application/json'
                # ,'per_page':5000
                }
                )
response.text

但是当我在PHP中检查示例时,它可以工作。你能帮我修改一下Python代码吗?

有人有经验吗?
提前感谢!

3qpi33ja

3qpi33ja1#

问题出在逻辑上。您使用time.time()函数两次,一次是在创建令牌时,第二次是在POST时。因此,您的哈希与服务器哈希不同。

qzwqbdag

qzwqbdag2#

由于我正在检查Python中Mintegral API的实现,并且这是Google搜索中的第一个结果之一,因此我想更新适用于我的解决方案。
我没有包含请求,但在我的示例中,很清楚如何生成令牌和塑造头部。
你在头文件中使用了用户名而不是访问键,这可能是一个旧的API调用。Mintegral API的文档可以在here中找到。
1rone的两个答案都在我的解决方案中实现了。我将时间戳保存在变量now中,并按照Mintegral API文档的要求将其转换为整数。(time.time()返回浮点数)

import time
import hashlib

api_key = "api_key"
access_key = "access_key"

now = int(time.time())
token = hashlib.md5((api_key + hashlib.md5(str(now).encode()).hexdigest()).encode()).hexdigest()

header = {
    "access-key": access_key,
    "token": token,
    "timestamp": now
}
bbmckpt7

bbmckpt73#

看起来,您忘记在第6行生成str(int(time.time()))

相关问题