fix: Deal with Metaculus throttling
Parse the error messages and wait for the indicated amount.
This commit is contained in:
parent
b8e6435fee
commit
2df73b4933
|
@ -9,17 +9,44 @@ import { databaseUpsert } from "../database/database-wrapper.js";
|
|||
let jsonEndPoint = "https://www.metaculus.com/api2/questions/?page=";
|
||||
let now = new Date().toISOString();
|
||||
let DEBUG_MODE = "off";
|
||||
let SLEEP_TIME = 500;
|
||||
let SLEEP_TIME = 5000;
|
||||
/* Support functions */
|
||||
async function fetchMetaculusQuestions(next) {
|
||||
// Numbers about a given address: how many, how much, at what price, etc.
|
||||
let response = await axios({
|
||||
url: next,
|
||||
method: "GET",
|
||||
headers: { "Content-Type": "application/json" },
|
||||
}).then((res) => res.data);
|
||||
let response;
|
||||
let data;
|
||||
try {
|
||||
response = await axios({
|
||||
url: next,
|
||||
method: "GET",
|
||||
headers: { "Content-Type": "application/json" },
|
||||
});
|
||||
data = response.data;
|
||||
} catch (error) {
|
||||
console.log(`Error in async function fetchMetaculusQuestions(next)`);
|
||||
if (!!error.response.headers["retry-after"]) {
|
||||
let timeout = error.response.headers["retry-after"];
|
||||
console.log(`Timeout: ${timeout}`);
|
||||
await sleep(Number(timeout) * 1000 + SLEEP_TIME);
|
||||
} else {
|
||||
await sleep(SLEEP_TIME);
|
||||
}
|
||||
console.log(error);
|
||||
} finally {
|
||||
try {
|
||||
response = await axios({
|
||||
url: next,
|
||||
method: "GET",
|
||||
headers: { "Content-Type": "application/json" },
|
||||
});
|
||||
data = response.data;
|
||||
} catch (error) {
|
||||
console.log(error);
|
||||
return { results: [] };
|
||||
}
|
||||
}
|
||||
// console.log(response)
|
||||
return response;
|
||||
return data;
|
||||
}
|
||||
|
||||
function sleep(ms) {
|
||||
|
@ -34,11 +61,21 @@ async function fetchMetaculusQuestionDescription(slug) {
|
|||
}).then((response) => response.data);
|
||||
return response;
|
||||
} catch (error) {
|
||||
console.log(error);
|
||||
console.log(`Error in: fetchMetaculusQuestionDescription`);
|
||||
console.log(
|
||||
`We encountered some error when attempting to fetch a metaculus page. Trying again`
|
||||
);
|
||||
await sleep(SLEEP_TIME);
|
||||
if (
|
||||
typeof error.response != "undefined" &&
|
||||
typeof error.response.headers != "undefined" &&
|
||||
typeof error.response.headers["retry-after"] != "undefined"
|
||||
) {
|
||||
let timeout = error.response.headers["retry-after"];
|
||||
console.log(`Timeout: ${timeout}`);
|
||||
await sleep(Number(timeout) * 1000 + SLEEP_TIME);
|
||||
} else {
|
||||
await sleep(SLEEP_TIME);
|
||||
}
|
||||
try {
|
||||
let response = await axios({
|
||||
method: "get",
|
||||
|
@ -77,7 +114,7 @@ export async function metaculus() {
|
|||
let j = false;
|
||||
for (let result of results) {
|
||||
if (result.publish_time < now && now < result.resolve_time) {
|
||||
await sleep(SLEEP_TIME);
|
||||
await sleep(SLEEP_TIME / 2);
|
||||
let questionPage = await fetchMetaculusQuestionDescription(
|
||||
result.page_url
|
||||
);
|
||||
|
|
Loading…
Reference in New Issue
Block a user