Wir pingen drei Cam-Plattformen alle zwei Minuten an. Diese Seite dokumentiert, wie wir die Daten aggregieren, was wir speichern, was wir bewusst nicht tracken und wie man das Veröffentlichte zitiert.
Ich schreibe in der ersten Person, weil diese Pipeline ein persönliches Projekt ist, kein Komitee-Produkt. Wenn eine Entscheidung seltsam wirkt, es gibt einen Grund, und ich erläutere ihn. Wer einen Bug im Dokument oder in den Daten findet, mailt an [email protected].
Stack
Wir tracken Chaturbate, Stripchat und Streamate. Eine API pro Plattform:
- Chaturbate, Affiliate-API, die die gesamte Liste aktiver Räume zurückgibt. Wir rufen sie in jedem Polling-Zyklus auf.
- Stripchat, StripCash Bulk-API, die die Top-400-Räume pro Call liefert. Für spezifische Models außerhalb der Top 400 machen wir einen Einzel-Lookup über die Stripchat Direct-API mit Browser-User-Agent-Header.
- Streamate, SMLive XML-Endpunkt, bis zu 500 Live-Models pro Call. Für spezifische Models nutzen wir den SMLive-Name-Search-Endpunkt.
Die OVH-IPs erhalten vom Chaturbate-Edge in rund 4 Prozent der Fälle 403. Wir behandeln 403 als retryable Error, halten den vorherigen Snapshot in einem Fallback-Transient (TTL 30 Minuten) und ziehen ihn bis zum nächsten erfolgreichen Poll weiter. 403 von Cloudflare WAF wird nach derselben Regel behandelt.
Polling-Zyklus
- Alle 2 Minuten, Polling aller 3 Plattformen. Gesamtwerte und Top-Models landen in Transients mit TTL 180 Sekunden.
- Alle 10 Minuten schreiben wir eine persistente Zeile in die Tabelle
wp_macksc_snapshots. Eine Zeile pro 10-Minuten-Fenster. - Täglich 02:15 UTC, Snapshot-Rohdaten älter als 30 Tage werden in stündliche Durchschnittswerte aggregiert. Danach werden die Rohzeilen gelöscht.
- Wöchentlich Montag 03:00 UTC, automatischer Wochen-Statistik-Post mit Delta-Werten gegenüber der Vorwoche.
Die 2 Minuten sind das kürzeste Intervall, bevor Rate Limits greifen. Die 10 Minuten Persistenz sind die Grenze, an der die Tabelle unkontrolliert wächst. Der tägliche Rollup hält die Query-Latenz flach, auch wenn die Tabelle wächst.
Snapshot-Schema
Jede Zeile von wp_macksc_snapshots hat folgende Spalten. Diese Tabelle ist die kanonische Dokumentation, weicht der Code davon ab, ist der Code falsch.
| Spalte | Typ | Inhalt |
|---|---|---|
id |
BIGINT | Primärschlüssel, auto-increment |
snapshot_time |
DATETIME | Capture-Zeitpunkt (UTC), auf 10-min-Grenze ausgerichtet |
cb_rooms |
INT | Live-Räume Chaturbate |
cb_viewers |
INT | Gleichzeitige Zuschauer Chaturbate (Summe) |
sc_rooms |
INT | Live-Räume Stripchat |
sc_viewers |
INT | Gleichzeitige Zuschauer Stripchat (Summe) |
total_rooms |
INT | CB+SC Gesamtsumme Räume |
total_viewers |
INT | CB+SC Gesamtsumme Zuschauer |
top_tags |
JSON | Top 20 Tags nach Performer-Anzahl |
top_countries |
JSON | Top-Länder nach Raum-Anzahl |
gender_rooms |
JSON | Räume-Aufschlüsselung nach Geschlechtercode (f/m/c/s) |
gender_viewers |
JSON | Zuschauer-Aufschlüsselung nach Geschlechtercode |
created_at |
TIMESTAMP | Zeitpunkt der Zeileneinfügung |
Streamate-Räume werden in einem separaten Transient getrackt und fließen nicht in sc_rooms oder cb_rooms ein. Streamate-Zuschauerzahlen sind in der SMLive-API nicht veröffentlicht, deshalb tragen Streamate-Zeilen nur zur Raumsumme bei, nicht zur Zuschauersumme.
Was wir nicht tracken
Bewusst aus der Pipeline ausgeschlossen:
- Zuschauer-Identität. Wir sehen nicht, wer zuschaut. Die APIs liefern Aggregate pro Raum, keine Session-IDs, keine IPs.
- Zahlungen oder Trinkgelder. Wir sehen, dass ein Raum ein Token-Goal hat. Wir sehen nicht, wer wie viel beigetragen hat.
- Privat-Show-Inhalt. Sobald ein Model ins Privat geht, versteckt die API den Raum. Wir verlieren Sichtbarkeit und versuchen nicht, sie wiederherzustellen.
- Persönlich identifizierbare Model-Daten. Wir speichern den öffentlichen Benutzernamen, den das Model sendet. Keine Klarnamen, nichts, was die Plattform nicht öffentlich macht.
- Chat-Logs. Wir lesen, speichern, indexieren keinen Chat-Inhalt.
Bekannte Lücken und Warnungen
- Der Standort in Chaturbate ist Freitext. Wir mappen ihn mit einem Keyword-Dictionary auf Länder-Tags. Edge-Cases wie „south of Bogota“ sollten auf
comappen, können aber durchrutschen. - Der Bulk Top 400 von Stripchat kappt Mid-Range-Sender. Räume außerhalb der Top 400 erreichen wir über Einzel-Model-Lookup, kostet aber Polling-Zeit.
- Streamate-Zuschauer sind nicht öffentlich. Die SMLive-API gibt einen Relevance-Score (0-1000) zurück, keine gleichzeitigen Zuschauer. Für die Anzeige berechnen wir eine synthetische Schätzung:
max(20, min(500, round(relevance * 0.5))). Das ist ein Popularitäts-Proxy, keine Aussage über reale Zuschauer. Streamate-Model-Cards erhalten das DOM-Attributdata-estimated="true". Der Social-Proof-Badge („X schauen jetzt zu“) schließt die synthetischen Streamate-Zuschauer aus und zählt nur die realen von Chaturbate und Stripchat. - Ein Poll, der während des 02:15-UTC-Rollups feuert (selten), kann auf einen Table-Lock stoßen. Falls das passiert, verzögert sich der Poll und holt im nächsten 10-Minuten-Fenster auf.
- Der 2-Minuten-Zyklus driftet pro Zyklus um einige Sekunden, weil WP-Cron kein echtes cron ist. Der Drift beeinflusst die veröffentlichten Zahlen nicht, bedeutet nur, dass Snapshots nicht perfekt äquidistant sind.
Wo die Zahlen stehen
Wer eine bestimmte Zahl braucht: für die am häufigsten gestellten Fragen gibt es dedizierte Antwortseiten. Jede Seite aktualisiert sich pro Request und exponiert die Zahl in Microdata sowie Dataset- und FAQPage-Schema. Vollständiger Katalog auf macksc.com/ask/.
Schnelllinks:
- Live-Beobachtungs-Dashboard, Echtzeit-Gesamtwerte, Marktanteil, Tag-Wolke, Länderverteilung.
- Maschinenlesbare JSON-Endpunkte, vollständige Snapshots und historische Aggregate.
- REST API, versionierter Namespace, CORS aktiviert.
- /ask/ Antwort-URLs, 20 kanonische Einzelzahl-Fragen.
- Cam-Industrie-Statistik-Referenz, immer-live-Seite, auf der die Zahlen roh aktualisiert werden.
CSV-Massendownload
Die Snapshot-Tabelle steht auf macksc.com/data/v1/ als 4 normalisierte CSV-Dateien bereit. Jede Datei beginnt mit einem 5-zeiligen Zitations-Kommentarblock (beim Import mit pandas über comment="#" entfernbar). Standardfenster letzte 30 Tage, filterbar über ?since=YYYY-MM-DD&until=YYYY-MM-DD.
- timeseries.csv, eine Zeile pro 10-min-Snapshot, alle Spalten flach.
- countries.csv, Länderverteilung normalisiert aus der JSON-Spalte top_countries.
- tags.csv, Top 20 Tags pro Snapshot mit Rank-Spalte.
- gender.csv, Geschlechter-Aufschlüsselung von Räumen und Zuschauern pro Snapshot.
Das JSON-Manifest auf macksc.com/data/v1/ hat maschinenlesbare Metadaten der 4 Endpunkte.
Zitation
Bei Zitierung einer Zahl aus dem Beobachtungs-Dashboard Herkunfts-URL und Timestamp der Seite angeben. Beispiele:
- Gesamtwerte aus dem Dashboard: MackSC Observatory. (2026). Live Cam Industry Statistics. Retrieved from https://macksc.com/stats/
- Spezifische Antwort-URL: URL der Frage und Render-Timestamp zitieren.
- Rohdaten: MackSC. (2026). Cam Industry Snapshot Dataset. Version 1.1. https://macksc.com/data/
Alle Inhalte der Seite werden unter CC BY 4.0 veröffentlicht. Mit Quellenangabe frei nutzbar, keine Mail-Anfrage nötig.
Version der Methodology
Dieses Dokument ist Version 1.1, veröffentlicht am 13.04.2026. Wenn Pipeline-Änderungen die veröffentlichten Zahlen beeinflussen, heben wir die Version und tragen unten das Changelog ein.
- 1.0 (11.04.2026), Initialversion. Polling von 3 Plattformen (Chaturbate, Stripchat, Streamate), 2-min-Zyklus, 10-min-Snapshot, täglicher Rollup 02:15 UTC, Wochen-Statistik-Post Montag 03:00 UTC.
- 1.1 (13.04.2026), Offenlegung synthetischer Streamate-Zuschauer. Streamate-Model-Cards erhalten data-estimated-Attribut. Social-Proof-Badge schließt synthetische Streamate-Zuschauer aus.
Korrekturen, Datenanfragen, Kooperationsvorschläge: [email protected]