【发布时间】:2022-02-01 04:13:06
【问题描述】:
我正在尝试调用亚马逊广告 api 并下载活动报告,到目前为止成功地能够做到以下几点:
创建一个活动报告,获取报告 ID 并使用报告 ID,我可以获得 s3 下载 url。
问题在于,当我尝试下载数据时 - api 返回的响应应该是经过压缩的 json 格式并采用以下格式:
��VJN�-H�L��LQ�2227��45�017�����b%+����������
如何从这种压缩格式中提取 json 数据?我在 SO 上搜索并找到了一个类似的线程:
Why does Amazon Advertising report API return a .bin instead of .json
我还可以使用此线程中建议的“发送和下载”选项从邮递员那里获取有效的 json 文件。
但是在nodejs中尝试实现解压代码时卡住了,解析响应数据的代码sn-p
await axios.get(downloadurl, options)
.then(async response => {
console.log(response.data);
// Calling gzip method
zlib.gzip(response.data, (err, buffer) => {
// Calling unzip method
zlib.unzip(buffer, (err, buffer) => {
console.log(buffer.toString('utf8'));
finaldata = buffer.toString('utf8');
});
});
// write data to file
await fsPromises.writeFile('/Users/asbdb/Downloads/test1/test.json', finaldata);
})
.catch(error => {
console.log({ error });
});
任何关于如何以字符串格式解压缩和转换数据的指示都会非常有帮助。
上面的代码 sn -p 将其写入输出文件: output in file
【问题讨论】:
-
请不要将失败的打印二进制数据尝试复制并粘贴到问题中。将二进制文件转换为十六进制或 base64 并将其放入您的问题中。带有问号的黑色菱形流完全没有用,并且会阻止人们试图帮助您。
-
感谢 Mark 的指点,我能够对此进行更多挖掘,现在可以下载 .bin 文件 - 这是 api 返回的格式。我是 nodejs 新手,需要帮助了解如何将 .bin 文件转换/解压缩为 json 文件。
-
您需要提供.bin文件。在您的问题中作为链接或编码(十六进制或base64)。如果它很长,请至少将前一百个字节放在问题中。
-
嗨,马克,我正在附加 .bin 文件。我能够通过在线工具将其解压缩并获得未压缩的文件。我现在正在尝试以编程方式访问此文件中的数据 - 无论我尝试什么,乱码文本都会从文件中返回。
-
到目前为止我所尝试的,1/ 将文件作为 .json 从 api 响应保存到磁盘。 2/ 从 api 响应中将文件作为 .bin 保存到磁盘。 3/ 我也将文件保存为“.gz”格式,然后尝试在 nodejs 中使用 zlib 解压缩它 - 这也不起作用。从 api 响应中附加以不同格式保存到磁盘的文件。文件在这里:drive.google.com/drive/folders/…
标签: node.js gzip amazon-advertising-api