Zum Hauptinhalt springen

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/username
  • instagr.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

MethodParameterReturnBeschreibung
parseAndStore()SocialProfile $profilearrayBio parsen, Ergebnisse mergen und speichern
parse()string $textarrayText 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:

PlattformURL-Muster
Instagraminstagram.com/, instagr.am/
YouTubeyoutube.com/, youtu.be/
Twitter/Xtwitter.com/, x.com/
TikToktiktok.com/@
Facebookfacebook.com/, fb.com/
Twitchtwitch.tv/
LinkedInlinkedin.com/in/, linkedin.com/company/
Threadsthreads.net/
Snapchatsnapchat.com/add/
Spotifyspotify.com/artist/, spotify.com/show/
Apple Podcastspodcasts.apple.com/
Apple Musicmusic.apple.com/
OnlyFansonlyfans.com/
Pinterestpinterest.com/
Redditreddit.com/u/
Vimeovimeo.com/

Verarbeitungslogik

  1. Social-Media-URLs extrahieren und Handles aus URL-Pfaden parsen
  2. @handle-Mentions als generische Handles erkennen (E-Mail-Teile werden gefiltert)
  3. E-Mail-Adressen via Regex extrahieren
  4. Web-URLs extrahieren, Social-Domains werden ausgefiltert
  5. Bare Domains ohne Protokoll erkennen (z.B. mysite.com)
  6. Merge mit bestehenden parsed_links (append-only, keine Duplikate)
  7. Sync in die relationale social_profile_links Tabelle

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

MethodParameterReturnBeschreibung
sync()SocialProfile $profilevoidparsed_links in social_profile_links synchronisieren

Sync-Logik

  • Neue Links werden als pending (ohne approved_at) angelegt
  • Bestehende Links werden nicht überschrieben (approved-Status bleibt erhalten)
  • Gelöschte Links aus parsed_links werden aus der Tabelle entfernt
  • Link-Typen: social (Plattform-Handle), url (Web-URL), email (E-Mail-Adresse)

Abhängigkeiten

  • SocialProfileLink Model

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