Social Parsing
Die Parsing-Services extrahieren strukturierte Daten aus URLs, HTML-Seiten und Profil-Beschreibungen. Sie bilden die Grundlage für URL-Erkennung, Profil-Zuordnung und das Cross-Platform-Linking.
YouTubeUrlParser
Location: app/Services/Social/YouTubeUrlParser.php
Statische Utility-Klasse zum Parsen von YouTube-URLs. Erkennt Channel-URLs, Video-URLs, Handle-Formate und Custom URLs.
Erkannte URL-Formate
youtube.com/channel/UC...(Channel-ID)youtube.com/@handle(Handle-Format)youtube.com/c/customname(Custom URL)youtube.com/user/username(Legacy Username)youtube.com/watch?v=...(Video-URL)youtu.be/...(Short-Video-URL)
Verwendet von
YouTubeChannelResolver,EnsureSocialProfileFromUrl, Watcher-Import
InstagramUrlParser
Location: app/Services/Social/InstagramUrlParser.php
Statische Utility-Klasse zum Parsen von Instagram-URLs. Extrahiert den Handle aus verschiedenen Instagram-URL-Formaten.
Erkannte URL-Formate
instagram.com/usernameinstagr.am/username- Instagram-URLs mit Trailing Slashes, Query-Parametern, etc.
Verwendet von
EnsureSocialProfileFromUrl, Instagram-Import, Collector-Jobs
ProfileDescriptionParser
Location: app/Services/Social/ProfileDescriptionParser.php
Parst Profil-Beschreibungen (YouTube und Instagram Bios) und extrahiert Web-URLs, E-Mail-Adressen und Social-Media-Handles. Die Ergebnisse werden append-only im parsed_links JSONB-Feld des SocialProfile gespeichert.
Public Methods
| Method | Parameter | Return | Beschreibung |
|---|---|---|---|
parseAndStore() | SocialProfile $profile | array | Bio parsen, Ergebnisse mergen und speichern |
parse() | string $text | array | Text parsen und strukturierte Daten zurückgeben |
Return-Struktur von parse()
[
'urls' => ['https://example.com', ...], // Web-URLs (nicht social)
'emails' => ['mail@example.com', ...], // E-Mail-Adressen
'social' => [
'instagram' => ['handle1', 'handle2'], // Social Handles nach Plattform
'twitter' => ['handle3'],
'tiktok' => ['handle4'],
'handle' => ['generic_handle'], // @-Handles ohne Plattform
// ...
],
]
Erkannte Social-Plattformen
Der Parser erkennt URLs und Handles für folgende Plattformen:
| Plattform | URL-Muster |
|---|---|
instagram.com/, instagr.am/ | |
| YouTube | youtube.com/, youtu.be/ |
| Twitter/X | twitter.com/, x.com/ |
| TikTok | tiktok.com/@ |
facebook.com/, fb.com/ | |
| Twitch | twitch.tv/ |
linkedin.com/in/, linkedin.com/company/ | |
| Threads | threads.net/ |
| Snapchat | snapchat.com/add/ |
| Spotify | spotify.com/artist/, spotify.com/show/ |
| Apple Podcasts | podcasts.apple.com/ |
| Apple Music | music.apple.com/ |
| OnlyFans | onlyfans.com/ |
pinterest.com/ | |
reddit.com/u/ | |
| Vimeo | vimeo.com/ |
Verarbeitungslogik
- Social-Media-URLs extrahieren und Handles aus URL-Pfaden parsen
@handle-Mentions als generische Handles erkennen (E-Mail-Teile werden gefiltert)- E-Mail-Adressen via Regex extrahieren
- Web-URLs extrahieren, Social-Domains werden ausgefiltert
- Bare Domains ohne Protokoll erkennen (z.B.
mysite.com) - Merge mit bestehenden
parsed_links(append-only, keine Duplikate) - Sync in die relationale
social_profile_linksTabelle
Abhängigkeiten
SocialProfileLinkSyncer(Constructor Injection)
Verwendet von
InstagramDailyScrapeProcessor,BackfillProfileDescriptions-Command, Daily Scrape Jobs
SocialProfileLinkSyncer
Location: app/Services/Social/SocialProfileLinkSyncer.php
Synchronisiert die im parsed_links JSONB-Feld eines Profils enthaltenen Links in die relationale social_profile_links Tabelle. Diese Tabelle ermöglicht kuratiertes Management: Links können approved/rejected werden, und approved Links erhalten höheres Gewicht beim Cross-Platform-Matching.
Public Methods
| Method | Parameter | Return | Beschreibung |
|---|---|---|---|
sync() | SocialProfile $profile | void | parsed_links in social_profile_links synchronisieren |
Sync-Logik
- Neue Links werden als
pending(ohneapproved_at) angelegt - Bestehende Links werden nicht überschrieben (approved-Status bleibt erhalten)
- Gelöschte Links aus
parsed_linkswerden aus der Tabelle entfernt - Link-Typen:
social(Plattform-Handle),url(Web-URL),email(E-Mail-Adresse)
Abhängigkeiten
SocialProfileLinkModel
Verwendet von
ProfileDescriptionParser::parseAndStore(),SyncParsedLinks-Command
HTML Page Parsers
YouTubeChannelPageParser
Location: app/Services/Social/Parsers/YouTubeChannelPageParser.php
Final Class zum Parsen von YouTube-Kanal-HTML-Seiten. Wird als Fallback verwendet, wenn die Data API keine ausreichenden Informationen liefert (z.B. bei Custom URLs ohne @-Handle).
InstagramProfilePageParser
Location: app/Services/Social/Parsers/InstagramProfilePageParser.php
Final Class zum Parsen von Instagram-Profil-HTML-Seiten. Extrahiert Profildaten aus dem eingebetteten JSON (window._sharedData oder script[type="application/ld+json"]).
Verwendet von
YouTubeChannelResolver(YouTube), Instagram-Import-Prozessoren