FHEM Forum

FHEM => Anfängerfragen => Thema gestartet von: FrauMeier am 16 Januar 2022, 19:17:40

Titel: [gelöst] Regex Problem mit mehreren Treffern
Beitrag von: FrauMeier am 16 Januar 2022, 19:17:40
Moin,

Ich will von der Radioplayer webseite Titel und Interpret auslesen. Das läuft in HTTPMOD aber noch nicht rund weil ich über Tabellen die Parameter übergebe und so die Regex kompliziert wird. Das bestmögliche das ich hinbekomme gibt mir zwei Treffer zurück, ausgewertet wird nur der erste, und wie soll es anders sein: ich brauche den zweiten.
Gibt es ein Funktion bei der ich nur den zweiten Treffer der Regex auswerten kann?

Suchtext:
callback({"responseStatus":"SUCCESS","total":2,"results":{"72":[{"type":"SI","rpId":"72","serviceName":"RADIO 21 Hannover","name":"","artistName":"","song":false,"description":"RADIO 21 – das ist bester ROCK N' POP aus den 70ern, 80er, 90ern, 00ern und von heute. Ehrliche, echte und handgemachte Musik von den Giganten des Rock: AC/DC, Pink Floyd,...","imageUrl":"https://assets.radioplayer.de/stationimages/72_programme_image.png","startTime":"","stopTime":""},{"type":"PE_E","rpId":"72","serviceName":"RADIO 21 Hannover","name":"Enjoy The Silence","artistName":"Depeche Mode","song":true,"description":"","imageUrl":"https://assets.radioplayer.org/track-visuals/600/600/8538e728-ca0b-4321-b7e5-cff6565dd4c0_600_600.jpg","startTime":"1642108476","stopTime":"1642108701"}]}})

und meine Titel Regex:(?<=\,"name":)(.*?)(?=\","artistName)

Ich nutze Lookaround zum finden der Infos, aber auf der Seite ist alles doppelt und es ist alles in einer Zeile.

Ich hab auch versucht das lookaround in ein anderes lookaround eizubinden, aber das funktioniert nicht (k.a. warum). Wenn ich das lookbehind ausweite bis es eindeutig wird, dann funktioniert es zwas mit einer seite, aber ich muss mit der gleichen Regex unterschiedliche URL absuchen können, daher ist das keine option.

Hat jemand eine Idee wie ich hier weiterkomme?
Titel: Antw:Regex Problem mit mehreren Treffern
Beitrag von: JensS am 16 Januar 2022, 20:57:19
Hab's selbst noch nicht gebraucht aber in HTTPMOD gibt es das Attribut "enforceGoodReadingNames 1", welches dir alle Key:Value-Paare automatisch in extra Readings schreibt.

Gruß Jens
Titel: Antw:Regex Problem mit mehreren Treffern
Beitrag von: betateilchen am 16 Januar 2022, 22:01:48
Zitat von: JensS am 16 Januar 2022, 20:57:19
Hab's selbst noch nicht gebraucht aber in HTTPMOD gibt es d...

stimmt, aber was hat das mit der gestellten Frage zu tun?

Zitat von: FrauMeier am 16 Januar 2022, 19:17:40
Ich will von der Radioplayer webseite Titel und Interpret auslesen. Das läuft in HTTPMOD aber noch nicht rund
...
Hat jemand eine Idee wie ich hier weiterkomme?

Dein Antwortstring ist doch fast reinrassiges JSON - warum quälst Du Dich dann mit HTTPMOD ab, anstatt einfach das JSON zu verarbeiten?
Titel: Antw:Regex Problem mit mehreren Treffern
Beitrag von: Jamo am 16 Januar 2022, 22:04:25
gehe mal auf https://regex101.com/
Oben in die Zeile, bei Regular Expression, trägst Du folgendes ein:
callback.*,"name":"(.*?)","artistName":"(.*?)","song"
Unten, im grossen Feld Test String trägst Du deinen suchtext ein:
callback({"responseStatus":"SUCCESS","total":2,"results":{"72":[{"type":"SI","rpId":"72","serviceName":"RADIO 21 Hannover","name":"","artistName":"","song":false,"description":"RADIO 21 – das ist bester ROCK N' POP aus den 70ern, 80er, 90ern, 00ern und von heute. Ehrliche, echte und handgemachte Musik von den Giganten des Rock: AC/DC, Pink Floyd,...","imageUrl":"https://assets.radioplayer.de/stationimages/72_programme_image.png","startTime":"","stopTime":""},{"type":"PE_E","rpId":"72","serviceName":"RADIO 21 Hannover","name":"Enjoy The Silence","artistName":"Depeche Mode","song":true,"description":"","imageUrl":"https://assets.radioplayer.org/track-visuals/600/600/8538e728-ca0b-4321-b7e5-cff6565dd4c0_600_600.jpg","startTime":"1642108476","stopTime":"1642108701"}]}})
Auf der Rechten Seite bekommst Du dann die gewünschten Ergebnisse in Group 1 und Group 2.
Das musst Du jetzt nur noch in dein HTTPMOD übertragen.
Titel: [gelöst] Antw:Regex Problem mit mehreren Treffern
Beitrag von: FrauMeier am 17 Januar 2022, 15:06:10
Danke für die Antworten.

@JensS enforceGoodReadingNames 1 hat  leider nichts geändert.

@ betateilchen: im JSON bin ich noch weniger zu hause.

@ Jamo
callback.*,"name":"(.*?)","artistName":"(.*?)","song"
Das ist ein Volltreffer, und so schlicht. Ich hatte da viel zu Kompliziert angefangen. Vielen Dank!

Noch ein paar Details für Nachahmer: Die Ergebnisse der beiden capture Groups werden im Webintereface nicht angezeigt, aber intern mit index versehen und abrufbar. Wenn Reading1 Musik heißt, dann steht der Titel in "Musik-1" und der Künstler in "Musik-2".