Skip to content

Commit

Permalink
Some updates
Browse files Browse the repository at this point in the history
  • Loading branch information
niclake committed Dec 16, 2024
1 parent 34001b8 commit d85661b
Show file tree
Hide file tree
Showing 11 changed files with 265 additions and 52 deletions.
80 changes: 80 additions & 0 deletions cli/backlogs/bookPages.js
Original file line number Diff line number Diff line change
@@ -0,0 +1,80 @@
import 'dotenv/config'
import { GoogleSpreadsheet } from 'google-spreadsheet';
import { JWT } from 'google-auth-library';
import 'node-fetch';
import { setTimeout } from "timers/promises";

// Initialize auth - see https://theoephraim.github.io/node-google-spreadsheet/#/guides/authentication
const serviceAccountAuth = new JWT({
// env var values here are copied from service account credentials generated by google
// see "Authentication" section in docs for more info
email: process.env.GOOGLE_SERVICE_ACCOUNT_EMAIL,
key: process.env.GOOGLE_PRIVATE_KEY,
scopes: ['https://www.googleapis.com/auth/spreadsheets', 'https://www.googleapis.com/auth/drive.file'],
})

const books = new GoogleSpreadsheet(process.env.BOOKS_SHEET_ID, serviceAccountAuth)

await books.loadInfo() // loads document properties and worksheets
const booksSheet = books.sheetsByTitle['Books'] // or use `doc.sheetsById[id]` or `doc.sheetsByTitle[title]`
const allBooks = await booksSheet.getRows()

var count = 0;
var manualCount = 0;

for (var i = 0; i < allBooks.length; i++) {
if (count >= 30) { console.log("Pausing..."); await setTimeout(30000); count = 0; }
const currPages = allBooks[i].get("Pages");
const title = allBooks[i].get("Title");
const authorFirst = allBooks[i].get("Author First");
const authorLast = allBooks[i].get("Author Last");
const series = allBooks[i].get("Series");

if (!Number.isNaN(currPages) && !isNaN(parseFloat(currPages))) { continue; }

const bookInfo = await getBookInfo(title, authorFirst, authorLast, series);

var newPages = '';
var saveMessage = '';
if (bookInfo && bookInfo["number_of_pages_median"] && bookInfo["number_of_pages_median"] > 1) {
newPages = bookInfo["number_of_pages_median"];
saveMessage = `Saved ${title} (${newPages} pages)!`;
} else {
manualCount++;
newPages = "Manual";
saveMessage = `Saved ${title} - needs manual pages.`;
}

allBooks[i].set("Pages",newPages);

await allBooks[i].save().then(() => console.log(`${saveMessage}`)).catch((err) => console.log(err));
count++;
}

console.log(`Total books: ${allBooks.length}`);
console.log(`Books needing manual pagecounts: ${manualCount}`);
console.log("Finished!");

async function getBookInfo(title, authorFirst, authorLast, series) {
var formAuthor = '';
if (authorFirst != 'Various' && authorLast != 'Various') {
formAuthor = `+${cleanText(authorFirst)}+${cleanText(authorLast)}`;
} else {
formAuthor = `+${cleanText(series.split(" ")[0])}`;
}
const searchString = `q=${cleanText(title)}${formAuthor}&lang=en`

const path = `https://openlibrary.org/search.json?${searchString}`;
const request = await fetch(path);
const data = await request.json();
for (let z = 0; z < data["docs"].length; z++) {
if (data["docs"][z]["number_of_pages_median"] > 0) {
return data["docs"][z];
}
};
return data["docs"][0];
}

function cleanText(text) {
return text.toLowerCase().replace(/[^\w\s]|\bthe\b|\b\d\b/g, '').trim().replace(/\s+/g, '+');
}
23 changes: 12 additions & 11 deletions cli/backlogs/books.js
Original file line number Diff line number Diff line change
Expand Up @@ -16,7 +16,7 @@ const serviceAccountAuth = new JWT({
// see "Authentication" section in docs for more info
email: process.env.GOOGLE_SERVICE_ACCOUNT_EMAIL,
key: process.env.GOOGLE_PRIVATE_KEY,
scopes: ['https://www.googleapis.com/auth/spreadsheets'],
scopes: ['https://www.googleapis.com/auth/spreadsheets', 'https://www.googleapis.com/auth/drive.file'],
})

const books = new GoogleSpreadsheet(process.env.BOOKS_SHEET_ID, serviceAccountAuth)
Expand All @@ -27,16 +27,17 @@ const allBooks = await booksSheet.getRows()
const jsonArr = []
for (var i = 0; i < allBooks.length; i++) {
jsonArr.push({
title: allBooks[i]._rawData[0],
authorFirst: allBooks[i]._rawData[1],
authorLast: allBooks[i]._rawData[2],
genre: allBooks[i]._rawData[3],
series: allBooks[i]._rawData[4],
owned: allBooks[i]._rawData[5],
read: allBooks[i]._rawData[6],
compDate: allBooks[i]._rawData[7],
status: allBooks[i]._rawData[8],
information: allBooks[i]._rawData[9],
title: allBooks[i].get("Title"),
authorFirst: allBooks[i].get("Author First"),
authorLast: allBooks[i].get("Author Last"),
genre: allBooks[i].get("Genre"),
series: allBooks[i].get("Series"),
owned: allBooks[i].get("Owned?"),
read: allBooks[i].get("Read?"),
compDate: allBooks[i].get("Comp Date"),
status: allBooks[i].get("Status"),
information: allBooks[i].get("Information"),
pages: allBooks[i].get("Pages"),
})
}
// console.log(allBooks[8]._rawData.slice(0,10))
Expand Down
22 changes: 11 additions & 11 deletions cli/backlogs/games.js
Original file line number Diff line number Diff line change
Expand Up @@ -16,7 +16,7 @@ const serviceAccountAuth = new JWT({
// see "Authentication" section in docs for more info
email: process.env.GOOGLE_SERVICE_ACCOUNT_EMAIL,
key: process.env.GOOGLE_PRIVATE_KEY,
scopes: ['https://www.googleapis.com/auth/spreadsheets'],
scopes: ['https://www.googleapis.com/auth/spreadsheets', 'https://www.googleapis.com/auth/drive.file'],
})

const games = new GoogleSpreadsheet(process.env.GAMES_SHEET_ID, serviceAccountAuth)
Expand All @@ -27,16 +27,16 @@ const allGames = await gamesSheet.getRows()
const jsonArr = []
for (var i = 0; i < allGames.length; i++) {
jsonArr.push({
title: allGames[i]._rawData[0],
series: allGames[i]._rawData[1],
seriesOrder: allGames[i]._rawData[2],
system: allGames[i]._rawData[4],
hrEst: allGames[i]._rawData[5],
owned: allGames[i]._rawData[6],
status: allGames[i]._rawData[7],
compDate: allGames[i]._rawData[8],
hrComp: allGames[i]._rawData[9],
information: allGames[i]._rawData[10],
title: allGames[i].get("Game Title"),
series: allGames[i].get("Series"),
seriesOrder: allGames[i].get("Series#"),
system: allGames[i].get("System/Service"),
hrEst: allGames[i].get("Hr Est"),
owned: allGames[i].get("Owned?"),
status: allGames[i].get("Status"),
compDate: allGames[i].get("Comp Date"),
hrComp: allGames[i].get("Hr Comp"),
information: allGames[i].get("Information"),
})
}
const __targetFile = 'games.json'
Expand Down
Loading

0 comments on commit d85661b

Please sign in to comment.