mirror of
https://git.stupid.fish/teidesu/scripts.git
synced 2025-07-27 18:22:10 +10:00
60 lines
1.3 KiB
TypeScript
60 lines
1.3 KiB
TypeScript
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,
|
|
)
|
|
}
|