使用javascript和API让我恼火:永远响应400



我正在尝试使用API(它提供德国公共广播媒体中心的电影数据(,但我无法得到任何有用的响应。我得到了一个javascript的示例代码,但由于我对该语言一无所知,我试图尽可能多地理解并编写一个等效的python程序。有人能告诉我我的错误吗?代码应该返回一个电影列表,以及它们的持续时间和一些类似的信息。

原文如下:

`

const query = {
queries: [
{
fields: ['title', 'topic'],
query: 'sturm der liebe'
},
{
fields: ['channel'],
query: 'ard'
}
],
sortBy: 'timestamp',
sortOrder: 'desc',
future: false,
offset: 0,
size: 10,
duration_min: 20,
duration_max: 100
};
const queryString = JSON.stringify(query);  // I think this turns query into a json file
const request = new XMLHttpRequest();  // here I start to loose the understanding
const requestURL = 'https://mediathekviewweb.de/api/query';
request.open("POST", requestURL);
request.addEventListener('load', function (event) {
let response;
try {
response = JSON.parse(request.responseText);
} catch (e) { }
if (request.status == 200 && typeof response != 'undefined') {
for (let i = 0; i < response.result.results.length; i++) {
let entry = response.result.results[i];
let row = $('<tr>');
row.append($('<td>').text(entry.channel));
row.append($('<td>').text(entry.topic));
row.append($('<td>').text(entry.title));
row.append($('<td>').text(entry.description));
row.append($('<td>').text(entry.url_video));
$('#mediathek > tbody').append(row);
}
$('#responseText').text(JSON.stringify(response, null, 2));
} else {
if (response) {
console.log(response.err);
$('#errorText').html(response.err.join('</br>'));
}
else {
$('#errorText').html(request.statusText + '</br>' + request.responseText);
}
}
});
request.send(queryString);

`

我开始使用请求:

`

import requests
import json
url = "https://mediathekviewweb.de/api/query"
answer = requests.post(url, json=queryString)
print(answer)
print(json.loads(answer.content))

`

在这个最小的例子中答案已经返回"><响应[400]>";并且内容是">{'result':无,'err':〔'JSON中位置1处的意外标记o〕}">

有人能帮我吗?我没有给出json,这个错误是从哪里来的?


我尝试时得到了相同的响应`

import requests
import json
url = "https://mediathekviewweb.de/api/query"
query = {
"queries": [],  // I want to search through all movies so this is left clear
"sortBy": "timestamp",
"sortOrder": "desc",
"future": False,
"offset": 0,
"size": 1000,
"duration_min": 90,
"content-type": "text/plain"
}
queryString = json.dumps(query)  # hopefully this is equivalent to JSON.stringify()
answer = requests.post(url, json=queryString)
print(answer)
print(json.loads(answer.content))

`事实上,我认为这个额外的代码甚至没有被程序使用。

我不知道这是否是正确的方向,但我认为javascript程序首先打开一个请求,然后在另一个步骤中输入数据。据我所知,我无法用请求包做到这一点。

不要使用XMLHttpRequest。这增加了混乱。

这是fetch选项:

const query = {
queries: [
{
fields: ['title', 'topic'],
query: 'sturm der liebe',
},
{
fields: ['channel'],
query: 'ard',
},
],
sortBy: 'timestamp',
sortOrder: 'desc',
future: false,
offset: 0,
size: 10,
duration_min: 20,
duration_max: 100,
};
const requestURL = 'https://mediathekviewweb.de/api/query';
fetch(requestURL, { method: 'POST', body: JSON.stringify(query) })
.then((res) => res.json())
.then((res) => {
// success request logic
console.log('response', res);
})
.catch((error) => {
// error handling
console.error(error);
});

最新更新