6.4 KiB
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
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
/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:
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.
mkdir -p /storage/disk1/WCX/database
sqlite3 /storage/disk1/WCX/database/wcx.db \
< /storage/disk1/WCX/scripts/schema.sql
Kontrollera tabellen:
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:
/storage/disk1/WCX/import/wcx_site_index.json
Filen ska innehålla en JSON-array.
Exempel:
{
"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:
{
"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:
37:35 → 2255
1:37:00 → 5820
Kör importen
Gör scriptet körbart om det inte redan är gjort:
chmod +x /storage/disk1/WCX/scripts/import_site.py
Kör importen:
/storage/disk1/WCX/scripts/import_site.py
Exempel på resultat:
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 databasensupdated-värde
Vid en uppdatering skrivs följande sitefält över:
nameduration_secondsweb_urlthumbnailpublishedupdated
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:
sqlite3 /storage/disk1/WCX/database/wcx.db \
"SELECT COUNT(*) FROM movie;"
Visa några poster:
sqlite3 -header -column /storage/disk1/WCX/database/wcx.db \
"SELECT id, name, duration_seconds, published, updated
FROM movie
LIMIT 10;"
Visa en specifik film:
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:
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:
/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.
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:
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