2026-07-17 10:16:43 +02:00
2026-07-17 17:56:23 +02:00
2026-07-17 10:20:32 +02:00

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 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:

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
Description
No description provided
Readme 492 KiB
Languages
Python 87.9%
Shell 12.1%