feat: add contrib folder

This commit is contained in:
NunoSempere 2022-05-19 15:56:37 -04:00
parent 159f9c2b45
commit 3230c0d0c8
3 changed files with 106 additions and 0 deletions

3
contrib/README.md Normal file
View File

@ -0,0 +1,3 @@
## User contributions
This folder contains utilities and snippets contributed by users. We welcome contributions.

91
contrib/download-all.mjs Normal file
View File

@ -0,0 +1,91 @@
/* Imports */
import fs from "fs";
import axios from "axios";
/* Definitions */
const VERBOSE = true;
let print = (message) => (VERBOSE ? console.log(message) : null);
let graphQLendpoint = "https://metaforecast.org/api/graphql";
let buildQuery = (endCursor) => `{
questions(first: 1000 ${!!endCursor ? `after: "${endCursor}"` : ""}) {
edges {
node {
id
title
url
description
options {
name
probability
}
qualityIndicators {
numForecasts
stars
}
timestamp
}
}
pageInfo {
endCursor
startCursor
}
}
}
`;
/* Support functions */
let getSomeMetaforecastPredictions = async (query) => {
let response = await axios({
url: graphQLendpoint,
method: "POST",
headers: { "Content-Type": "application/json" },
data: JSON.stringify({ query: query }),
})
.then((res) => res.data)
.then((res) => res.data); // not a typo
return response;
};
let save = (questions) => {
fs.writeFileSync("forecasts.json", JSON.stringify(questions, null, 4));
let tsvHeaders = "title\tplatform\tdate\tforecast\n";
let tsvRows = questions
.map(
(question) =>
`${question.title}\t${question.platform}\t${
question.timestamp
}\t${JSON.stringify(question.options)}`
)
.join("\n");
let tsvFile = tsvHeaders + tsvRows;
print("Saving results to results.tsv");
fs.writeFileSync("forecasts.tsv", tsvFile);
};
let getNodes = (questions) => {
let edges = questions.edges;
let nodes = edges.map((edge) => edge.node);
return nodes;
};
// main
let getAllMetaforecastPredictions = async () => {
print("Fetching forecasts");
let results = [];
let firstQuery = await getSomeMetaforecastPredictions(buildQuery());
results.push(...getNodes(firstQuery.questions));
let endCursor = firstQuery.questions.pageInfo.endCursor;
while (endCursor) {
print("Cursor: " + endCursor);
let queryResults = await getSomeMetaforecastPredictions(
buildQuery(endCursor)
);
let nodes = getNodes(queryResults.questions);
results.push(...nodes);
endCursor = queryResults.questions.pageInfo.endCursor;
}
//results = results.map((result) => result.node);
save(results);
return results;
};
getAllMetaforecastPredictions();

12
contrib/iframe-snippet.md Normal file
View File

@ -0,0 +1,12 @@
iframe snippet as used on [Global Guessing](https://globalguessing.com/russia-ukraine-forecasts/)
```html
<iframe
src="https://metaforecast.org/secretDashboard?dashboardId=561472e0d2&numCols=2"
height="800"
width="100%"
frameborder="0"
title="US Inflation"
>
</iframe>
```