From 3057b2a78c35153588758af5931d676b75d2bab6 Mon Sep 17 00:00:00 2001 From: desu-bot Date: Wed, 14 May 2025 09:48:24 +0000 Subject: [PATCH] chore: update public repo --- scripts/media/lastfm-csv-to-sqlite.ts | 60 +++++++++++++++++++++++++++ 1 file changed, 60 insertions(+) create mode 100644 scripts/media/lastfm-csv-to-sqlite.ts diff --git a/scripts/media/lastfm-csv-to-sqlite.ts b/scripts/media/lastfm-csv-to-sqlite.ts new file mode 100644 index 0000000..b4b9005 --- /dev/null +++ b/scripts/media/lastfm-csv-to-sqlite.ts @@ -0,0 +1,60 @@ +import { createReadStream } from 'node:fs' +import { nodeReadableToFuman } from '@fuman/node' +import Database from 'better-sqlite3' +import { question } from 'zx' +import { CsvReader } from '../../utils/csv.ts' + +const csvPath = process.argv[2] ?? await question('path to csv > ') + +// convert csv generated by https://mainstream.ghan.nl/export.html to an sqlite database + +const db = new Database('assets/lastfm-import.db') +db.exec(` + CREATE TABLE IF NOT EXISTS scrobbles ( + date_uts TEXT, + artist_mbid TEXT, + artist_name TEXT, + album_mbid TEXT, + album_name TEXT, + track_mbid TEXT, + track_name TEXT + ); +`) + +const insertQuery = db.prepare(` + INSERT INTO scrobbles ( + date_uts, + artist_mbid, + artist_name, + album_mbid, + album_name, + track_mbid, + track_name + ) VALUES (?, ?, ?, ?, ?, ?, ?) +`) + +const file = nodeReadableToFuman(createReadStream(csvPath)) +const csv = new CsvReader(file, { + schema: ['uts', 'utc_time', 'artist', 'artist_mbid', 'album', 'album_mbid', 'track', 'track_mbid'], +}) + +let i = 0 +while (true) { + const obj = await csv.read() + if (!obj) break + + i += 1 + if (i % 1000 === 0) { + console.log('inserted', i) + } + + insertQuery.run( + obj.uts, + obj.artist_mbid, + obj.artist, + obj.album_mbid, + obj.album, + obj.track_mbid, + obj.track, + ) +}