UNPKG

node-csfd-api

Version:

ČSFD API in JavaScript. Amazing NPM library for scrapping csfd.cz :)

64 lines (62 loc) 1.95 kB
#!/usr/bin/env node import { csfd } from "../index.js"; import { escapeCsvField, renderProgress } from "./utils.js"; import { writeFile } from "node:fs/promises"; //#region src/bin/export-ratings.ts /** * Runs the ratings export process for a given user. * @param userId - The CSFD user ID. * @param options - Export options (format, filters, language). */ async function runRatingsExport(userId, options) { try { if (options.format === "letterboxd") csfd.setOptions({ language: "en" }); console.log(`Fetching ratings for user ${userId} (${options.format.toUpperCase()})...`); const ratings = await csfd.userRatings(userId, { ...options.userRatingsOptions, onProgress: renderProgress }); console.log(`Fetched ${ratings.length} ratings.`); let content = ""; let fileName = ""; if (options.format === "letterboxd") { content = ["Title,Year,Rating,WatchedDate", ...ratings.map((r) => { return `${escapeCsvField(r.title ?? "")},${r.year ?? ""},${r.userRating ?? ""},${escapeCsvField(r.userDate ?? "")}`; })].join("\n"); fileName = `${userId}-for-letterboxd.csv`; } else if (options.format === "json") { content = JSON.stringify(ratings, null, 2); fileName = `${userId}-ratings.json`; } else { content = [[ "id", "title", "year", "rating", "date", "type", "url", "colorRating" ].join(","), ...ratings.map((r) => { return [ r.id, escapeCsvField(r.title ?? ""), r.year ?? "", r.userRating ?? "", escapeCsvField(r.userDate ?? ""), escapeCsvField(r.type ?? ""), escapeCsvField(r.url ?? ""), escapeCsvField(r.colorRating ?? "") ].join(","); })].join("\n"); fileName = `${userId}-ratings.csv`; } await writeFile(fileName, content); console.log("Saved in file:", `./${fileName}`); } catch (error) { console.error("Error exporting ratings:", error); throw error; } } //#endregion export { runRatingsExport };