# WCX Index Lokalt index för WCX-publiceringar. Projektet bygger ett SQLite-baserat index från JSON-data som genereras av det befintliga scraper-scriptet. ## Nuvarande flöde ```text WCX-site ↓ befintligt scraper-script ↓ import/wcx_site_index.json ↓ scripts/import_site.py ↓ database/wcx.db ``` Importscriptet: * lägger till nya filmer * uppdaterar befintliga filmer när sitens `update`-datum är nyare * lämnar oförändrade filmer orörda * lagrar speltid som antal sekunder ## Katalogstruktur ```text /storage/disk1/WCX/ ├── database/ │ └── wcx.db ├── import/ │ └── wcx_site_index.json └── scripts/ ├── schema.sql └── import_site.py ``` ## Förutsättningar Projektet använder: * Python 3 * SQLite 3 * jq, valfritt för inspektion av JSON På Ubuntu/Debian: ```bash sudo apt update sudo apt install sqlite3 jq ``` Python-modulerna `json`, `sqlite3` och `pathlib` ingår i Pythons standardbibliotek. Inga externa Python-paket behövs. ## Skapa databasen Databasen skapas från `schema.sql`. ```bash mkdir -p /storage/disk1/WCX/database sqlite3 /storage/disk1/WCX/database/wcx.db \ < /storage/disk1/WCX/scripts/schema.sql ``` Kontrollera tabellen: ```bash sqlite3 /storage/disk1/WCX/database/wcx.db ".schema movie" ``` ## Databasmodell Tabellen `movie` innehåller: | Kolumn | Beskrivning | | ------------------ | ------------------------------------------ | | `id` | Stabilt och unikt ID från siten | | `name` | Filmens titel | | `aka` | Alternativt namn | | `nationality` | Nationalitet | | `age` | Ålder | | `shoot_location` | Inspelningsplats | | `shoot_date` | Inspelningsdatum | | `duration_seconds` | Speltid i sekunder | | `description` | Manuell beskrivning | | `rating` | Manuell rating | | `web_url` | Länk till detaljsidan | | `thumbnail` | Länk till thumbnail | | `published` | Ursprungligt publiceringsdatum | | `updated` | Senaste uppdateringsdatum från siten | | `created_at` | När posten skapades i databasen | | `modified_at` | När posten senast uppdaterades i databasen | ## JSON-indata Importscriptet läser: ```text /storage/disk1/WCX/import/wcx_site_index.json ``` Filen ska innehålla en JSON-array. Exempel: ```json { "id": "sweet-cherry_41678", "titel": "Sweet Cherry", "details": "https://www.woodmancastingx.com/casting-x/sweet-cherry_41678.html", "duration": "1:37:00", "thumb": "https://example.com/thumbnail.jpg", "published": "2026-07-12" } ``` Vid en uppdaterad publicering kan även följande fält finnas: ```json { "update": "2026-07-15" } ``` Importscriptet accepterar både `update` och `updated`. ## Fältmappning | JSON-fält | Databaskolumn | | ------------------------ | ------------------ | | `id` | `id` | | `titel` | `name` | | `details` | `web_url` | | `duration` | `duration_seconds` | | `thumb` | `thumbnail` | | `published` | `published` | | `update` eller `updated` | `updated` | Speltiden konverteras till sekunder. Exempel: ```text 37:35 → 2255 1:37:00 → 5820 ``` ## Kör importen Gör scriptet körbart om det inte redan är gjort: ```bash chmod +x /storage/disk1/WCX/scripts/import_site.py ``` Kör importen: ```bash /storage/disk1/WCX/scripts/import_site.py ``` Exempel på resultat: ```text Poster i JSON: 1250 Tillagda: 3 Uppdaterade: 1 Oförändrade: 1246 ``` ## Importregler ### Ny film Om filmens ID inte finns i databasen skapas en ny post. ### Befintlig film utan `update` Om filmen redan finns och site-posten saknar `update` görs ingen ändring. ### Befintlig film med `update` Posten uppdateras när: * databasen saknar ett `updated`-värde, eller * sitens `update`-datum är nyare än databasens `updated`-värde Vid en uppdatering skrivs följande sitefält över: * `name` * `duration_seconds` * `web_url` * `thumbnail` * `published` * `updated` ID och manuella metadatafält påverkas inte. Datumen lagras som `YYYY-MM-DD`, vilket gör att de kan jämföras kronologiskt som text. ## Inspektera databasen Visa antal filmer: ```bash sqlite3 /storage/disk1/WCX/database/wcx.db \ "SELECT COUNT(*) FROM movie;" ``` Visa några poster: ```bash sqlite3 -header -column /storage/disk1/WCX/database/wcx.db \ "SELECT id, name, duration_seconds, published, updated FROM movie LIMIT 10;" ``` Visa en specifik film: ```bash sqlite3 -header -column /storage/disk1/WCX/database/wcx.db \ "SELECT * FROM movie WHERE id = 'susana-melo_6707';" ``` ## Testa uppdateringslogiken Ett enkelt test är att medvetet ändra en post: ```bash sqlite3 /storage/disk1/WCX/database/wcx.db \ "UPDATE movie SET duration_seconds = 1, updated = NULL WHERE id = 'susana-melo_6707';" ``` Kör sedan importen igen: ```bash /storage/disk1/WCX/scripts/import_site.py ``` Posten ska då uppdateras från JSON-filen och `duration_seconds` ska återställas till sitens värde. ## Återskapa databasen Under utveckling kan databasen enkelt återskapas eftersom all automatisk site-data kan importeras igen. ```bash rm /storage/disk1/WCX/database/wcx.db sqlite3 /storage/disk1/WCX/database/wcx.db \ < /storage/disk1/WCX/scripts/schema.sql /storage/disk1/WCX/scripts/import_site.py ``` Radera inte databasen på detta sätt när den senare innehåller manuellt registrerad metadata utan att först ta en backup. ## Versionshantering Källkod och dokumentation ska versionshanteras i Git. Databasen och importerade datafiler bör normalt inte checkas in. Föreslagen `.gitignore`: ```gitignore database/*.db database/*.db-shm database/*.db-wal import/*.json __pycache__/ *.pyc ``` ## Nästa steg Planerade kommande delar: * OCR-behandling av thumbnails för nya filmer * manuell redigering av metadata * export av komplett index * integration med Emby * schemalagd körning