tweak: Add code to get forecasts first fetched today
to contrib folder
This commit is contained in:
		
							parent
							
								
									a80bc51d58
								
							
						
					
					
						commit
						b60316e450
					
				| 
						 | 
					@ -22,7 +22,8 @@ let buildQuery = (endCursor) => `{
 | 
				
			||||||
          numForecasts
 | 
					          numForecasts
 | 
				
			||||||
          stars
 | 
					          stars
 | 
				
			||||||
        }
 | 
					        }
 | 
				
			||||||
        timestamp
 | 
					        firstSeenStr
 | 
				
			||||||
 | 
									fetchedStr
 | 
				
			||||||
      }
 | 
					      }
 | 
				
			||||||
    }
 | 
					    }
 | 
				
			||||||
    pageInfo {
 | 
					    pageInfo {
 | 
				
			||||||
| 
						 | 
					
 | 
				
			||||||
							
								
								
									
										91
									
								
								contrib/download-first-seen-today.mjs
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										91
									
								
								contrib/download-first-seen-today.mjs
									
									
									
									
									
										Normal file
									
								
							| 
						 | 
					@ -0,0 +1,91 @@
 | 
				
			||||||
 | 
					/* Imports */
 | 
				
			||||||
 | 
					import fs from "fs";
 | 
				
			||||||
 | 
					import axios from "axios";
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					/* Definitions */
 | 
				
			||||||
 | 
					const VERBOSE = true;
 | 
				
			||||||
 | 
					let ISO_DATE_TODAY = new Date().toISOString().slice(0, 10);
 | 
				
			||||||
 | 
					let print = (message) => (VERBOSE ? console.log(message) : null);
 | 
				
			||||||
 | 
					let graphQLendpoint = "https://metaforecast.org/api/graphql";
 | 
				
			||||||
 | 
					let buildQuery = (endCursor) => `{
 | 
				
			||||||
 | 
					  questions(first: 1000 ${
 | 
				
			||||||
 | 
					    !!endCursor ? `after: "${endCursor}"` : ""
 | 
				
			||||||
 | 
					  } orderBy: FIRST_SEEN_DESC) {
 | 
				
			||||||
 | 
					    edges {
 | 
				
			||||||
 | 
					      node {
 | 
				
			||||||
 | 
					        id
 | 
				
			||||||
 | 
					        title
 | 
				
			||||||
 | 
					        url
 | 
				
			||||||
 | 
					        description
 | 
				
			||||||
 | 
					        options {
 | 
				
			||||||
 | 
					          name
 | 
				
			||||||
 | 
					          probability
 | 
				
			||||||
 | 
					        }
 | 
				
			||||||
 | 
					        qualityIndicators {
 | 
				
			||||||
 | 
					          numForecasts
 | 
				
			||||||
 | 
					          stars
 | 
				
			||||||
 | 
					        }
 | 
				
			||||||
 | 
					        firstSeenStr
 | 
				
			||||||
 | 
									fetchedStr
 | 
				
			||||||
 | 
					      }
 | 
				
			||||||
 | 
					    }
 | 
				
			||||||
 | 
					    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) => {
 | 
				
			||||||
 | 
					  print("Saving Results");
 | 
				
			||||||
 | 
					  fs.writeFileSync("forecasts-today.json", JSON.stringify(questions, null, 4));
 | 
				
			||||||
 | 
					};
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					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());
 | 
				
			||||||
 | 
					  let nodes = getNodes(firstQuery.questions);
 | 
				
			||||||
 | 
					  let nodesToday = nodes.filter(
 | 
				
			||||||
 | 
					    (node) => node.firstSeenStr.slice(0, 10) == ISO_DATE_TODAY
 | 
				
			||||||
 | 
					  );
 | 
				
			||||||
 | 
					  results.push(...nodesToday);
 | 
				
			||||||
 | 
					  let endCursor = firstQuery.questions.pageInfo.endCursor;
 | 
				
			||||||
 | 
					  while (endCursor && nodesToday.length > 0) {
 | 
				
			||||||
 | 
					    print("Cursor: " + endCursor);
 | 
				
			||||||
 | 
					    let queryResults = await getSomeMetaforecastPredictions(
 | 
				
			||||||
 | 
					      buildQuery(endCursor)
 | 
				
			||||||
 | 
					    );
 | 
				
			||||||
 | 
					    let nodes = getNodes(queryResults.questions);
 | 
				
			||||||
 | 
					    nodesToday = nodes.filter(
 | 
				
			||||||
 | 
					      (node) => node.firstSeenStr.slice(0, 10) == ISO_DATE_TODAY
 | 
				
			||||||
 | 
					    );
 | 
				
			||||||
 | 
					    results.push(...nodesToday);
 | 
				
			||||||
 | 
					    endCursor = queryResults.questions.pageInfo.endCursor;
 | 
				
			||||||
 | 
					  }
 | 
				
			||||||
 | 
					  //results = results.map((result) => result.node);
 | 
				
			||||||
 | 
					  save(results);
 | 
				
			||||||
 | 
					  return results;
 | 
				
			||||||
 | 
					};
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					getAllMetaforecastPredictions();
 | 
				
			||||||
		Loading…
	
		Reference in New Issue
	
	Block a user