TDS-ARKIVET – hur det gjordes (2026-10-19, av Claude åt jdc) ============================================================== Källa: https://tds.fandom.com/ (Tower Defense Simulator Wiki, innehåll CC BY-SA) INNEHÅLL I DEN HÄR MAPPEN index.html Hemsidan (svart/grå/lila/limegrön, dropdownmenyer, ikonfilter) alla-sidor.html Lista A–Ö över alla ~2 650 wikisidor .html En fil per wikiartikel ("/" i namn blir "__") pics/ ALLA bilder (filnamn = md5 av original-URL:en) data.json Torn + fiender med egenskaper (används av filtret) menu.json Listor till dropdownmenyerna (kartor, spellägen, evenemang …) verktyg/ Skripten nedan, så det går att köra om HUR 1. wget --mirror gick INTE: fandom (Cloudflare) svarar 403 på /wiki/-sidor för allt som inte är en riktig webbläsare. MediaWiki-API:t (api.php) är öppet. 2. Lista alla artiklar: api.php?action=query&list=allpages&apnamespace=0 (utan omdirigeringar) -> verktyg/titles.txt (2 646 st + huvudsidan). 3. verktyg/grab.py: hämtar varje sida som färdig HTML via api.php?action=parse, laddar ner varje bild från static.wikia.nocookie.net till pics/ och skriver om bild- och wikilänkar till lokala filer. OBS: bildservern kräver headern Referer: https://tds.fandom.com/ annars 403. 6 parallella trådar, hoppar över sidor som redan finns (går att återuppta). Kör: python3 verktyg/grab.py verktyg/titles.txt 4. verktyg/data.py: läser wikitexten för alla sidor i Category:Towers och Category:Enemies, plockar fälten ur infoboxarna: torn: hidden_detection / lead_detection / flying_detection, role, placement, basecost, basedamage, baserange … fiende: hidden / fly / lead / ghost, immunity, base_hp, speed … + kategorier (Bosses, Historical Content = borttagen, Early/Mid/Late-Game, Golden …) -> data.json, bilder -> pics/. Kör: python3 verktyg/data.py 5. verktyg/post.py: engångsflytt från den första mappstrukturen (wiki/, img/, ikon/) till den platta strukturen med allt i tds/ och bilderna i pics/. FILTRET PÅ HEMSIDAN Klickade ikoner kombineras med OCH: Flying + Lead = bara det som har båda. För torn betyder Flying/Hidden/Lead att tornet kan SE sådana fiender. Filtret sparas i adressen (t.ex. index.html#k=tower&f=Flying,Lead) så det går att länka direkt. Borttaget innehåll döljs om inte "Visa borttagna" är på. UPPDATERA ARKIVET SENARE Radera de .html-filer som ska hämtas om (grab.py hoppar över befintliga), kör grab.py, kör sedan data.py för nya torn/fiender. KNAPPEN "⟳ UPPDATERA TORN" (tillagd 2026-10-19) index.html -> uppdatera.php (PHP, körs av Apache som www-data; Python finns inte i webbcontainern). Gör samma sak som data.py + grab.py men bara för torn: hämtar tornlistan, infoboxarna och ikonerna, sparar data.json (fienderna lämnas orörda) och bygger om alla tornens wikisidor med nya bilder. Tar ca 3–4 min. Loggen strömmas till ett fönster på sidan. Spärrar: bara en körning åt gången (.uppdatera.lock) och minst 5 min mellan körningar (.uppdatera.senast). tds/ och tds/pics/ har chmod 777 så att www-data får skriva. Avbryter utan att röra data.json om API:t inte svarar eller färre än 20 torn tolkas. ÄNDRAT SENARE 2026-10-19 - Sidan visar bara TORN. Fienderna finns kvar i data.json men filtreras bort i index.html. - Varje torn har ett nivåreglage (0 = grundtorn … max). För varje nivå visas uppgraderingens namn, bild, kostnad (+ total kostnad) och vad den ger, och Flying/Hidden/Lead tänds när tornet får dem ("NY!" på exakt den nivån). Uppgraderingarna tolkas ur {{Upgrade|Level=…|Upgrade Title=…|Cost=…|Image=…|Information=…}} (första förekomsten per nivå = vanligt läge, PvP-tabellen kommer efter). Äldre format "Upgrade Title = Level 1 - Namn - Kostnad" stöds också. - "Nivå på alla torn"-reglaget sätter alla kort på samma nivå, och filtret räknar då bara förmågor som tornen har på den nivån. Sparas i adressen (#lvl=2&f=Flying). - Sidor i Category:Candidates for deletion (t.ex. trollsidan "Adachi") räknas inte som torn. - uppdatera.php är nu den som gäller för torn (data.py har inte uppgraderingarna). - DPS per nivå: uppdatera.php plockar första "stats-table" ur varje torns RENDERADE wikisida (DPS räknas fram av wikins mallar, finns inte i wikitexten) och sparar kolumnerna i data.json under "st". Kortet visar huvud-DPS (Total/Combined/DPS/Max DPS, eller Income för farmar) stort med ökning från förra nivån, ett stapeldiagram över alla nivåer (klickbart) och övriga värden för nivån. Saknas för Mine, Moderator, Railgunner, Time Dilator (ingen tabell på wikin). - Uppgraderingsvägar: torn med {{PathTabber|väg A|väg B}} (Juggernaut, Enforcer, Kingpin, Pursuit, Hacker) sparar "paths" (uppgraderingar per väg) och st.alt (statistik för väg B ur "Bottom Path Stats"-tabellen). Knapparna Väg A / Väg B på kortet byter väg; nivåer efter förgreningen visas som 4A/4B. Flying/Hidden/Lead följer bokstaven i wikins text. - Talformat på sidan är svenskt (1 675 och 0,125 i stället för 1,675 och 0.125). - Torn med orimliga wikisiffror (uppgradering ≥ $500 000 eller > 5 000 DPS, t.ex. klottrade Golden Snowballer) får en varning och räknas inte med i topplistorna. - Rubrikdelen överst (titel, text, siffror) är borttagen.