Implement method to download the CSV data from Google Sheets
This commit is contained in:
parent
9afec3f372
commit
f5a2de29de
1 changed files with 58 additions and 10 deletions
|
|
@ -1,10 +1,11 @@
|
||||||
|
import axios from "axios";
|
||||||
import { Team } from "./Team";
|
import { Team } from "./Team";
|
||||||
import { Deck } from "./Deck";
|
import { Deck } from "./Deck";
|
||||||
import { readFile } from "fs";
|
import { readFile } from "fs";
|
||||||
import neatCSV from "neat-csv";
|
import neatCSV from "neat-csv";
|
||||||
import { Logger } from "tslog";
|
import { Logger } from "tslog";
|
||||||
import { Player } from "./Player";
|
import { Player } from "./Player";
|
||||||
import { games, hibernatedGames, conf } from "../main";
|
import { games, hibernatedGames, conf, log } from "../main";
|
||||||
|
|
||||||
export class Game {
|
export class Game {
|
||||||
readonly id: string;
|
readonly id: string;
|
||||||
|
|
@ -32,10 +33,10 @@ export class Game {
|
||||||
// Get the decks based on what type of data they are.
|
// Get the decks based on what type of data they are.
|
||||||
switch (conf.game.cards.type) {
|
switch (conf.game.cards.type) {
|
||||||
case "csv":
|
case "csv":
|
||||||
this.parseDeckCSV(conf);
|
this.parseDeckCSV();
|
||||||
break;
|
break;
|
||||||
case "sheets":
|
case "sheets":
|
||||||
this.parseDeckGoogleSheets(conf);
|
this.parseDeckGoogleSheets();
|
||||||
break;
|
break;
|
||||||
};
|
};
|
||||||
// Instantiate everything for the teams
|
// Instantiate everything for the teams
|
||||||
|
|
@ -68,11 +69,10 @@ export class Game {
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
private parseDeckCSV(conf: config) {
|
private parseDeckCSV() {
|
||||||
/**
|
/**
|
||||||
* Parses out the CSV files and creates the decks for the game to run on
|
* Parses out the CSV files and creates the decks for the game to run
|
||||||
*
|
* on.
|
||||||
* @param path -> The filepath of the CSV file
|
|
||||||
*/
|
*/
|
||||||
|
|
||||||
// parse the questions from the CSV
|
// parse the questions from the CSV
|
||||||
|
|
@ -102,13 +102,61 @@ export class Game {
|
||||||
});
|
});
|
||||||
};
|
};
|
||||||
|
|
||||||
private parseDeckGoogleSheets(conf: config) {
|
private parseDeckGoogleSheets() {
|
||||||
/**
|
/**
|
||||||
* Fetches and parses the CSV data from Google Sheets instead of local
|
* Fetches and parses the CSV data from Google Sheets instead of local
|
||||||
* CSV files.
|
* CSV files.
|
||||||
*
|
|
||||||
* @param conf -> The config object
|
|
||||||
*/
|
*/
|
||||||
|
let key = conf.game.cards.key as string;
|
||||||
|
let questions_id = conf.game.cards.questions.fingerprint;
|
||||||
|
let objects_id = conf.game.cards.objects.fingerprint;
|
||||||
|
|
||||||
|
// Get the questions deck
|
||||||
|
axios.get(`https://docs.google.com/spreadsheets/d/e/${key}/pub?gid=${questions_id}&single=true&output=csv`)
|
||||||
|
.then(response => {
|
||||||
|
// Ensure not errored
|
||||||
|
if (response.status !== 200) {
|
||||||
|
log.warn(`Error Downloading CSV: ${response.statusText}`);
|
||||||
|
return;
|
||||||
|
};
|
||||||
|
|
||||||
|
// Parse the loaded CSV
|
||||||
|
neatCSV(response.data)
|
||||||
|
.then((data) => {
|
||||||
|
let questions: question_deck[] = [];
|
||||||
|
for (var entry of data) {
|
||||||
|
questions.push(Object.values(entry)[conf.game.cards.questions.column]);
|
||||||
|
};
|
||||||
|
this._questions = new Deck(questions);
|
||||||
|
});
|
||||||
|
})
|
||||||
|
.catch(err => {
|
||||||
|
log.prettyError(err);
|
||||||
|
});
|
||||||
|
|
||||||
|
|
||||||
|
// Get the objects deck
|
||||||
|
axios.get(`https://docs.google.com/spreadsheets/d/e/${key}/pub?gid=${objects_id}&single=true&output=csv`)
|
||||||
|
.then(response => {
|
||||||
|
// Ensure not errored
|
||||||
|
if (response.status !== 200) {
|
||||||
|
log.warn(`Error Downloading CSV: ${response.statusText}`);
|
||||||
|
return;
|
||||||
|
};
|
||||||
|
|
||||||
|
// Parse the downloaded CSV
|
||||||
|
neatCSV(response.data)
|
||||||
|
.then((data) => {
|
||||||
|
let objects: object_deck[] = [];
|
||||||
|
for (var line of data) {
|
||||||
|
objects.push(Object.values(line));
|
||||||
|
};
|
||||||
|
this._objects = new Deck(objects);
|
||||||
|
});
|
||||||
|
})
|
||||||
|
.catch(err => {
|
||||||
|
log.prettyError(err);
|
||||||
|
});
|
||||||
};
|
};
|
||||||
|
|
||||||
|
|
||||||
|
|
|
||||||
Loading…
Add table
Add a link
Reference in a new issue