# Newsletter Exporter

Der Exporter generiert eine JSON-Datei aus allen versendeten Newsletter der letzten 12 Monate. Er liest die Meta-Tags (pxa:) aus den `index.html`-Dateien der Newsletter und schreibt das Ergebnis in `export.json`.

## Aufruf

```
https://nl.fiylo.net/export.php?key=<API_KEY>
```

### GET-Parameter

| Parameter | Pflicht | Beschreibung |
|-----------|---------|--------------|
| `key`     | Ja      | API-Key zur Authentifizierung (in `.env` definiert) |
| `output`  | Nein    | `json` — gibt das generierte JSON zusätzlich als HTTP-Antwort zurück |

### Beispiele

**Nur Datei schreiben (Standard):**
```
/export.php?key=xxx
```
→ Schreibt `export.json`, gibt leere 200-Antwort zurück.

**JSON als Ausgabe:**
```
/export.php?key=xxx&output=json
```
→ Schreibt `export.json` **und** gibt das JSON als HTTP-Antwort mit `Content-Type: application/json` zurück.

## Authentifizierung

Der API-Key wird aus der `.env`-Datei im selben Verzeichnis gelesen (`API_KEY=...`). Ohne gültigen Key wird ein `403 Unauthorized` zurückgegeben.

## Voraussetzungen in den Newsletter-Dateien

Jeder Newsletter-Ordner muss eine `index.html` enthalten, die folgende Meta-Tags im `<head>` gesetzt hat:

| Meta-Tag | Pflicht | Beschreibung |
|----------|---------|--------------|
| `pxa:title` | Ja | Titel des Newsletters |
| `pxa:date_year` | Ja | Versendejahr (z.B. `2026`) |
| `pxa:date_month` | Ja | Versendemonat (z.B. `07`) |
| `pxa:date_day` | Nein | Versendetag (z.B. `21`). Wenn gesetzt, wird geprüft ob das Sendedatum ≤ heute |
| `pxa:cat` | Nein | Kategorie des Newsletters |
| `og:image` | Nein | URL des Vorschaubilds |

Beispiel:
```html
<meta property="pxa:title" content="fiylo News Juli 2026">
<meta property="pxa:date_year" content="2026">
<meta property="pxa:date_month" content="07">
<meta property="pxa:date_day" content="21">
<meta property="pxa:cat" content="snl">
<meta property="og:image" content="https://nl.fiylo.net/assets/og-juli.jpg">
```

## Filterregeln

Ein Newsletter wird **nicht** in die JSON aufgenommen wenn:

1. **Pflichtfelder fehlen** — `pxa:title`, `pxa:date_year` oder `pxa:date_month` sind nicht gesetzt
2. **Älter als 12 Monate** — das Versendedatum liegt weiter als 12 Monate zurück
3. **Noch nicht versendet** — wenn `pxa:date_day` gesetzt ist und das daraus berechnete Sendedatum in der Zukunft liegt

Newsletter **ohne** `pxa:date_day` werden immer aufgenommen (alle älteren Newsletter wurden bereits versendet).

## JSON-Ausgabe

Die JSON ist nach Datum absteigend sortiert (neueste zuerst).

### Struktur

```json
[
  {
    "title": "fiylo News Juli 2026",
    "year": "2026",
    "month": "07",
    "url": "https://nl.fiylo.net/2026/2607-adler-schiffe/",
    "image": "https://nl.fiylo.net/assets/og-juli.jpg",
    "day": "21",
    "cat": "snl"
  }
]
```

### Felder

| Feld | Immer vorhanden | Typ | Beschreibung |
|------|-----------------|------|--------------|
| `title` | Ja | string | Titel des Newsletters |
| `year` | Ja | string | Versendejahr |
| `month` | Ja | string | Versendemonat |
| `url` | Ja | string | URL des Newsletters |
| `image` | Ja | string \| null | OG-Image URL |
| `day` | Nein | string | Versendetag — nur wenn `pxa:date_day` vorhanden |
| `cat` | Nein | string | Kategorie — nur wenn `pxa:cat` vorhanden |


### Newsletter Kategorien

| Abkürzung | Bezeichnung |
|------|-----------------|
| `snl` | Sondernewsletter |
| `nbfnl` | Neu bei fiylo Newsletter |
| `anl` | Allgemeiner Newsletter |
| `tnl` | Themennewsletter |
| `lanl` | Location Award Newsletter |


## Ordnerstruktur

```
public/
├── 2025/
│   ├── 2501-newsletter-a/
│   │   └── index.html
│   └── 2506-newsletter-b/
│       └── index.html
├── 2026/
│   ├── 2607-adler-schiffe/
│   │   └── index.html
│   └── 2608-kommender/          ← day in Zukunft → nicht in JSON
│       └── index.html
├── export.php
├── export.json                   ← wird vom Exporter geschrieben
├── .env                          ← API_KEY=...
└── ...
```

Ignorierte Ordner/Dateien: `.git`, `.DS_Store`, `assets`, `dev`, `index.php`, `export.php`, `export.json`
