SEPIA-Framework / sepia-docs

Documentation and Wiki for SEPIA. Please post your questions and bug-reports here in the issues section! Thank you :-)
https://sepia-framework.github.io/
238 stars 16 forks source link

YouTube music player (and Google account login) #138

Closed gu3nter closed 2 years ago

gu3nter commented 3 years ago

Hallo habe mir vor kurzen YouTube Premium inklusive YouTube music geholt. Jetzt meine Frage: So weit ich verstanden habe gibt es keine offizielle YouTube music Api seitens Google, was schade ist da YouTube music erheblich mehr Inhalte als YouTube hat.

Habe mich nach einer möglichen Lösung umgesehen und folgendes GitHub Projekt gefunden, was aus meiner Meinung nach die fehlende Api lösen könnte

https://github.com/sigma67/ytmusicapi

Hier müsste dann aber auch ein embeded Player für gecodet werden, was ich leider nicht kann :( Dieser Player müsste nach meinem Verständnis dann wie die Api Lösung die Cookie Übergabe regeln können. So viel zu meiner Halbwissens Theorie, ob das technisch möglich ist weiß ich leider nicht genau.

So jetzt meine eigentlich Bitte, ist es möglich YouTube music mit dem oben genannten GitHub Projekt zu realisieren? Falls ja würde ich mich sehr darüber freuen, SEPIA ist der geilste shit ever ;)

fquirin commented 3 years ago

Hmm, das feedback zu dieser API bei Reddit ist etwas hart :-/ :see_no_evil: : I tried to play around with their API but it's such a mess, full of jumbled tokens for no clear reason and clear obscuring of the data in the responses. Security through obscurity I guess.

Die Annahme ist, dass diese selbstgebaute API (die wahrscheinlich aus den API requests der Youtube Music Webseite zusammengebaut wurde) andere Ergebnisse liefert als die Youtube Data API?

Was ich nicht so ganz verstehe ist, wie man die Suchergebnisse nachher nutzt um die Musik zu erreichen? Baut man aus den Song/Playlist/etc. IDs dann wieder Youtube Video Links? :thinking:

Hast du vielleicht ein Beispiel für content, den man in Youtube Music findet aber nicht im normalen Youtube? Dann kann ich vielleicht besser verstehen wo genau sich die beiden Services trennen.

SEPIA ist der geilste shit ever

:star_struck:

gu3nter commented 3 years ago

Ob es mit einem Login in Chrome auf dem Pi geht, kann ich leider derzeit nicht testen, da der Browser aktuell immer abstürzt, wenn ich Youtube oder Youtube Music öffne, scheint aber ein generelles Problem zu sein.

Hier ein Beispiel: Bibi Blocksberg Folge 3 gibt es auf Youtube nicht, wird somit leider auch nicht von Sepia gefunden. Auf Youtube Music gibt es alle Folgen.

Hier der Link zur Folge 3: https://music.youtube.com/playlist?list=OLAK5uy_mRFH_VSXNOSSphE4VAx1cNrmjvHQGPj1s&feature=share

oder auch für Youtube premium: https://www.youtube.com/playlist?list=OLAK5uy_mRFH_VSXNOSSphE4VAx1cNrmjvHQGPj1s

Wäre ja mega, falls der interne Player das jetzt schon könnte, aber wie gesagt, das kann ich derzeit leider nicht testen, was auf jeden Fall nicht zu gehen schein, ist, dass Sepia auch die Inhalte von Youtube Music durchsucht. deshalb mein Future request.

Falls ich es hinbekomme, versuche ich mal oben genanntes youtube music api zu testen, falls es gut funktioniert, würde ich ich freuen, wenn du es in Sepia einbinden könntest.

fquirin commented 3 years ago

was auf jeden Fall nicht zu gehen schein, ist, dass Sepia auch die Inhalte von Youtube Music durchsucht

Schade, meine Hoffnung war, dass die Youtube Data API eventuell deinen API key als music key erkennt :-/. Irgendwie scheint Google hier noch nicht so richtig "offen" zu sein.

Falls ich es hinbekomme, versuche ich mal oben genanntes youtube music api zu testen, falls es gut funktioniert, würde ich ich freuen, wenn du es in Sepia einbinden könntest.

Ich könnte die Suche natürlich im SEPIA Server integrieren, ich sehe hier nur ein paar Herausforderungen:

Statt die Youtube API auf dem Server zu ändern könnte man allerdings auch ein spezielles Media Player Widget basteln, das mit dem Python Server direkt kommuniziert. Das hat zwar die gleichen Problemchen wie oben beschrieben, lässt sich aber schneller anpassen wenn etwas kaputt geht ^^.

...Wenn sie nicht geblockt sind müsste man sich wahrscheinlich aber mindestens mit dem eigenen Youtube Music account im client anmelden ...

Für diesen Teil habe ich gerade mal etwas implementiert, was lange Zeit nicht richtig geklappt hatte: Direkter Remote Zugriff auf den Client via Desktop Chrome :smiley: . Damit könnte man remote auf den Client gehen und sich mit dem Google Account anmelden in Youtube Music etc.. Um das zu testen müsstest du dir einmal die neue run.sh und setup.sh für den Client runterladen:

Im Setup gibt es dann die neuen Punkte ENABLE/DISABLE remote debugging. Nach dem ENABLE kommt auch eine kleine Anleitung was man danach machen muss. Feedback ob das verständlich ist wäre hilfreich ;-)

gu3nter commented 3 years ago

top schonmal danke, werde ich heute Abend testen und geben dir Bescheid

gu3nter commented 3 years ago

habe es nun getestet, jedoch noch keinen remote zugriff nicht zum laufen gebracht.

Meine dones:

  1. run.sh und setup.sh aus dem dev von github auf den pi ersetzt.
  2. neu gestartet bash setup.sh ausgeführt dann 14 ausgewählt.
  3. im pi unterem anderen putty Fenster ssh -L 0.0.0.0:9223:localhost:9222 localhost -N in die shell eingegeben irgendwas mit yes bestätigt und das pi passwort eingegeben

switch auf windows pc für remote zugriff: im chrome chrome://inspect/#devices eingegeben und http://[client-IP]:9223 unter den network targets eingegeben ([client-IP] mit der ip des pi´s ersetzt)

jetzt meine frage was muss ich tun, damit ich jetzt den pi "fernsteuerung sehen kann?

gu3nter commented 3 years ago

edit: habe es jetzt geschafft remote drauf zu kommen.

Wenn ich mich remote bei youtube music einlogge, kann ich über sepia einen bestimmten song (bibi Blocksberg folge 3) abspielen (link von youtube music wurde in den teach options gesetzt). --> es scheint, dass das iframe reibungslos geht.

Wenn jetzt die Suche noch in den youtube music Inhalten gehen würden, wäre alles perfekt

PS: wenn ich den client neustarte wird jedoch der google login verworfen, d.h. ich muss mich anch jedem neustart neu über remote bei youtube music einloggen

Nachtrag zu dem gewünschten Feedback der Anleitung: Prinzipiell ist alles gut verständlich, jedoch hat es bei mir nur funktioniert wenn ich http:// weggelassen habe. Also hier

im chrome chrome://inspect/#devices eingegeben und OHNE http:// [client-IP]:9223 unter den network targets eingeben

fquirin commented 3 years ago

Wenn ich mich remote bei youtube music einlogge, kann ich über sepia einen bestimmten song (bibi Blocksberg folge 3) abspielen (link von youtube music wurde in den teach options gesetzt). --> es scheint, dass das iframe reibungslos geht.

Das klingt schon mal gut, danke für den Test :+1:

PS: wenn ich den client neustarte wird jedoch der google login verworfen, d.h. ich muss mich anch jedem neustart neu über remote bei youtube music einloggen

:-( komisch eigentlich, der Client löscht seinen Cache nicht. Ist das tatsächlich mit einen Neustart verbunden oder läuft der Login auch so einfach recht schnell ab? Vielleicht gibts da noch irgendwo diesen "eingeloggt bleiben" Haken? Ich habe leider noch keine Möglichkeit gefunden das zu automatisieren, vielleicht müsste man dazu ein Browser Plugin schreiben :thinking:

im chrome chrome://inspect/#devices eingegeben und OHNE http:// [client-IP]:9223 unter den network targets eingeben

ok das macht Sinn ^^. Ich optimiere mal die Beschreibung :-)

gu3nter commented 3 years ago

OK dann teste ich das nochmal mit dem Loginverlust. Soll ich dann die youtubelusicapi GitHub Sache testen, falls ich es hin bekomme? Falls es zuverlässig funktioniert, könntest du das dann bitte auch in Sepia integrieren?

Gruß Rene

fquirin commented 3 years ago

Wenn die 'ytmusicapi' funktioniert müsste man noch einen Micro-Service drumherum bauen, sonst kann ich die API nicht vom SEPIA Server (oder music-player Widget) ansprechen. Optimalerweise wäre der Micro-Service noch kompatibel mit der Youtube-Data API, dann könnte man ihn direkt als drop-in Ersatz für die integrierte API nutzen (müsste nur in den Server Settings eine URL Option hinzufügen ^^). Es sei denn ich habe übersehen, dass die 'ytmusicapi' schon einen Endpoint bereitstellt für HTTP REST Anfragen. Für die Integration von Python Code hatte ich schon mal diesen Server/Micro-Service Container gebaut: SEPIA Python-Bridge, da könnte man ansetzen.

gu3nter commented 3 years ago

Habe nun alles ausgiebig getestet: Fazit die ytmusicpit funktioniert reibungslos

Habe aber festgestellt, dass wie schon weiter oben erwähnt, dass der Login nach einem Neustart verloren geht und somit dann auch der cookie für die ytmusicapi nicht mehr funktioniert. Wird der Login verworfen, werden auch keine zuverlässigen Suchergebnisse mehr gefunden, denke mal das war das Problem bei der von dir erwähnten Person von reddit.

--> es wäre super, wenn du die ytmusicapi in Sepia einbinden könntest, bei fragen Suchbeispielen stehe ich gerne zu Verfügung.

fquirin commented 3 years ago

Habe nun alles ausgiebig getestet: Fazit die ytmusicpit funktioniert reibungslos

ok, cool :-). Wie hast du das gemacht, über ein Python Script verschiedene Suchanfragen eingegeben und dann aus den Ergebnissen Links gebaut? Soweit ich gesehen habe gibt es da keinen fertigen Server an den man HTTP Requests schicken kann oder? Den müssten wir dann noch drumherum bauen :slightly_smiling_face: , sonst können wir keine Anfragen vom Server oder Client senden :grimacing:

gu3nter commented 3 years ago

Morgen,

habe es vorerst einfach ganz "leicht" gemacht: Das heißt ich habe noch keine Links gebaut, wollte nur fürs erste herausfinden, ob die Suchanfragen zu den gleichen ergebnissen führen, wie wenn ich das selbst bei youtube musik mache. Folgendes Beispiel:

Suchergebnis das ich selbst auf Youtube Musik gesucht habe für "holly jolly christmas": https://music.youtube.com/watch?v=p0kK3fI_3vo&feature=share

--> p0kK3fI_3vo ist die video id

  1. oben genanntes github installiert
  2. in der Datei headers_auth.json den cookie, den ich über das neue remote feature auslesen konnte eingetragen
  3. eine python3 Datei (ytmusictest.py) erstellt mit folgendem Inhalt: from ytmusicapi import YTMusic ytmusic = YTMusic('headers_auth.json') search_results = ytmusic.search("holly jolly christmas") print(search_results)
  4. python datei mit python3 ytmusictest.py ausgeführt

Folgender output wurde generiert: [{'category': 'Top result', 'resultType': 'song', 'title': 'Holly Jolly Christmas', 'album': {'name': 'Christmas (Deluxe Special Edition)', 'id': 'MPREb_Rv8i9mhXY7J'}, 'feedbackTokens': {'add': 'AB9zfpJjSGX4jeTjBGR9v_JI0wxVsqMlgmEH8rVUi1pe_udLYrLxpHyXAmu4XOES-ts5JDcKQBpA0lbu5kjaVI5JLIL-6nLJFQ', 'remove': 'AB9zfpLZxkF1vrGk7L2mcFMKX-UPSU95gwHNq8OtI7To8YV1Un0RaUChcPBwTgoX2keGnB63fz6s6mcIvFgXLX8X-HlvO4NTOg'}, 'videoId': 'p0kK3fI_3vo', 'duration': '2:00', 'year': None, 'artists': [{'name': 'Michael Bublé', 'id': 'UCJWJd67r42sByfpOe6S__zw'}], 'isExplicit': False, 'thumbnails': [{'url': 'https://lh3.googleusercontent.com/iLnoj1uA4nDdk_K8krbOm2ROUj2tGFhq-t3kFU2jEnDY5pKUYFdp-iaSkyg5XJ0QRyJLxPYvo1w_Ntwc=w60-h60-l90-rj', 'width': 60, 'height': 60}, {'url': 'https://lh3.googleusercontent.com/iLnoj1uA4nDdk_K8krbOm2ROUj2tGFhq-t3kFU2jEnDY5pKUYFdp-iaSkyg5XJ0QRyJLxPYvo1w_Ntwc=w120-h120-l90-rj', 'width': 120, 'height': 120}]}, {'category': 'Songs', 'resultType': 'song', 'title': 'A Holly Jolly Christmas (Single Version)', 'album': {'name': 'Have A Holly Jolly Christmas', 'id': 'MPREb_wvyK3q5awSj'}, 'feedbackTokens': {'add': 'AB9zfpKv-_NUUCcHETN4BLu794O3P10scOixVkYzt0dYfViJDWVXBYFxRbIY6O91ckpSwEkA-sbvNl8s5RvrNSTKmL75cOCtfQ', 'remove': 'AB9zfpLwtlifDeOsdZYovL7AqCCLlLcIJKEfDODhOYxZ0vaZhzAK2tJTnn7Ofvn3QxhjJGV2RvpaGc6xW-Xef6-y7rnDqlWC4Q'}, 'videoId': 'P_dI6fVZwd0', 'duration': '2:16', 'year': None, 'artists': [{'name': 'Burl Ives', 'id': 'UCl2j2shAiHLlGu0JSm-4dCQ'}], 'isExplicit': False, 'thumbnails': [{'url': 'https://lh3.googleusercontent.com/Hldm9sUr7OPk4usvhvfF1e2Ayx91J46MxRWwuKcTE69yGTN4oWkseOeQkfyAFzXGW9ct2jhIsMlBh24c=w60-h60-l90-rj', 'width': 60, 'height': 60}, {'url': 'https://lh3.googleusercontent.com/Hldm9sUr7OPk4usvhvfF1e2Ayx91J46MxRWwuKcTE69yGTN4oWkseOeQkfyAFzXGW9ct2jhIsMlBh24c=w120-h120-l90-rj', 'width': 120, 'height': 120}]}, {'category': 'Songs', 'resultType': 'song', 'title': 'Holly Jolly Christmas', 'album': {'name': 'Christmas (Deluxe Special Edition)', 'id': 'MPREb_GGth15Ne4Wa'}, 'feedbackTokens': {'add': 'AB9zfpKeqvAqK27czFsQwSujKcLbNdZBHA9e_CuxZXjvKlL8QHUNTvhM4BsBm64yvpVEgjZqRS6oAjd24nk3SmbWCHYzx6QbPQ', 'remove': 'AB9zfpKMNjExo-bGwwCJ_icq3IDZ5Ii6Z9PDJOzSffTo27lr3-aFubgPxrh5JJyfcikaH8PNiLr2rKNKRKT_Y6UqvmbYhXEShg'}, 'videoId': 'o3nMx12r5ic', 'duration': '2:02', 'year': None, 'artists': [{'name': 'Michael Bublé', 'id': 'UCJWJd67r42sByfpOe6S__zw'}], 'isExplicit': False, 'thumbnails': [{'url': 'https://lh3.googleusercontent.com/Nmok94CxIvB6oWJjw8F7Yw9efyUNvV0HSZWHkuYj7Qetptylt47u8nIWo5GOz8pFXIcotzQ0hjJCBmR3=w60-h60-l90-rj', 'width': 60, 'height': 60}, {'url': 'https://lh3.googleusercontent.com/Nmok94CxIvB6oWJjw8F7Yw9efyUNvV0HSZWHkuYj7Qetptylt47u8nIWo5GOz8pFXIcotzQ0hjJCBmR3=w120-h120-l90-rj', 'width': 120, 'height': 120}]}, {'category': 'Songs', 'resultType': 'song', 'title': 'Holly Jolly Christmas', 'album': {'name': 'God Rest Ye Merry Gentlemen', 'id': 'MPREb_GZFp41PrmnK'}, 'feedbackTokens': {'add': 'AB9zfpLYIuOcT59acId9qWb_wPjSifYyskaaflR7WUNCS7KtTIp7GW0_odcizyJSvt4E1teFTD-jc44ilLNPCUyooWNVD7FoNg', 'remove': 'AB9zfpJ0ARvIJtJCz3XSA4PigMmgzjgUEeUcjXTvMVZA37j-FLrKpw0Bq9xIIX6leNxjsBQfLbZDRfqzqCsv4F0LqyXujvoStQ'}, 'videoId': 'JIpVktqKP4g', 'duration': '1:10', 'year': None, 'artists': [{'name': 'False Idle', 'id': 'UCT7UssEJYgDW3XK1ekPgpqA'}], 'isExplicit': True, 'thumbnails': [{'url': 'https://lh3.googleusercontent.com/O_dZNrFmlb0KmDN-Ya71MoGIUxjHRBNdoesG1mzwc6jvrI-GV83vw-QnLNhC0yjOTJt-X8e0o9ONXP3Eog=w60-h60-l90-rj', 'width': 60, 'height': 60}, {'url': 'https://lh3.googleusercontent.com/O_dZNrFmlb0KmDN-Ya71MoGIUxjHRBNdoesG1mzwc6jvrI-GV83vw-QnLNhC0yjOTJt-X8e0o9ONXP3Eog=w120-h120-l90-rj', 'width': 120, 'height': 120}]}, {'category': 'Videos', 'resultType': 'video', 'title': 'Holly Jolly Christmas', 'views': '28M', 'videoId': 'Dkq3LD-4pmM', 'duration': '2:02', 'year': None, 'artists': [{'name': 'Michael Bublé', 'id': 'UCJWJd67r42sByfpOe6S__zw'}], 'thumbnails': [{'url': 'https://i.ytimg.com/vi/Dkq3LD-4pmM/sddefault.jpg?sqp=-oaymwEWCJADEOEBIAQqCghqEJQEGHgg6AJIWg&rs=AMzJL3mAtzkXtoPwS9zOs1ABThzB7lzv7Q', 'width': 400, 'height': 225}]}, {'category': 'Videos', 'resultType': 'video', 'title': 'Burl Ives - Holly Jolly Christmas (Lyrics)', 'views': '516K', 'videoId': 'nk0eKmiMEFo', 'duration': '2:34', 'year': None, 'artists': [{'name': 'Jesus4Life', 'id': 'UCMHQoiq6PnPWb_gGD6eAQEg'}], 'thumbnails': [{'url': 'https://i.ytimg.com/vi/nk0eKmiMEFo/sddefault.jpg?sqp=-oaymwEWCJADEOEBIAQqCghqEJQEGHgg6AJIWg&rs=AMzJL3nnrs0IezP7F0QFqqxmUkjWVs5ROw', 'width': 400, 'height': 225}]}, {'category': 'Videos', 'resultType': 'video', 'title': 'Holly Jolly Christmas', 'views': '24K', 'videoId': 'nqu1K2Dw9L4', 'duration': '1:46', 'year': None, 'artists': [{'name': 'Meghan Trainor', 'id': 'UC_VCJd8skzwcPktsMLqTz1g'}], 'thumbnails': [{'url': 'https://i.ytimg.com/vi/nqu1K2Dw9L4/sddefault.jpg?sqp=-oaymwEWCJADEOEBIAQqCghqEJQEGHgg6AJIWg&rs=AMzJL3nypuwNdijgtd5LWN6dM0w2DWaSjg', 'width': 400, 'height': 225}]}, {'category': 'Community playlists', 'resultType': 'playlist', 'title': 'A Holly Jolly Christmas Topic', 'itemCount': '80', 'author': 'WesTsYde', 'browseId': 'VLPLElD0nLnf41l8zk83po3A690vMy6U_o4L', 'thumbnails': [{'url': 'https://yt3.ggpht.com/fpNnwJCPjOcuS5mTNwVT4Ry2eIeggBHcGgnVzTA7XsoA9Co8F7pEqA5H7lrCErN5GdoEKBbnpgY=s192', 'width': 192, 'height': 192}, {'url': 'https://yt3.ggpht.com/fpNnwJCPjOcuS5mTNwVT4Ry2eIeggBHcGgnVzTA7XsoA9Co8F7pEqA5H7lrCErN5GdoEKBbnpgY=s576', 'width': 576, 'height': 576}, {'url': 'https://yt3.ggpht.com/fpNnwJCPjOcuS5mTNwVT4Ry2eIeggBHcGgnVzTA7XsoA9Co8F7pEqA5H7lrCErN5GdoEKBbnpgY=s1200', 'width': 1200, 'height': 1200}]}, {'category': 'Community playlists', 'resultType': 'playlist', 'title': 'Hollyjolly christmas', 'itemCount': '31', 'author': 'Laura Paola Rodríguez López', 'browseId': 'VLPLl3Vbq-Nhgyrha-dH4VAFh9b3Kp0kKWpS', 'thumbnails': [{'url': 'https://yt3.ggpht.com/SDnE_tuP8U7krQnBvikSb61Y6jvahROrVeEfW-IJZ4lTambJunQInfN3z4mTEquZGT9-Ye5bQQ=s192', 'width': 192, 'height': 192}, {'url': 'https://yt3.ggpht.com/SDnE_tuP8U7krQnBvikSb61Y6jvahROrVeEfW-IJZ4lTambJunQInfN3z4mTEquZGT9-Ye5bQQ=s576', 'width': 576, 'height': 576}, {'url': 'https://yt3.ggpht.com/SDnE_tuP8U7krQnBvikSb61Y6jvahROrVeEfW-IJZ4lTambJunQInfN3z4mTEquZGT9-Ye5bQQ=s1200', 'width': 1200, 'height': 1200}]}, {'category': 'Community playlists', 'resultType': 'playlist', 'title': 'holly jolly christmas', 'itemCount': '35', 'author': 'Sono Sisso', 'browseId': 'VLPL_rAmQkqqIj1Iufj-MRRPS_MRam2goHoP', 'thumbnails': [{'url': 'https://i.ytimg.com/vi/siVbx6EwE9o/sddefault.jpg?sqp=-oaymwEWCJADEOEBIAQqCghqEJQEGHgg6AJIWg&rs=AMzJL3mRNMlDfgus9xbnoecH5TMpWmrhIA', 'width': 400, 'height': 225}, {'url': 'https://i.ytimg.com/vi/siVbx6EwE9o/hq720.jpg?sqp=-oaymwEXCKAGEMIDIAQqCwjVARCqCBh4INgESFo&rs=AMzJL3ltl53WpJioQTa9Ow2-EVmUBG0LTQ', 'width': 800, 'height': 450}, {'url': 'https://i.ytimg.com/vi/siVbx6EwE9o/hq720.jpg?sqp=-oaymwEXCNUGEOADIAQqCwjVARCqCBh4INgESFo&rs=AMzJL3mIR2QzknFZ475lk1IZgBz-62wgXw', 'width': 853, 'height': 480}]}, {'category': 'Albums', 'resultType': 'album', 'title': 'Holly Jolly Christmas Music!', 'type': 'Album', 'duration': None, 'year': '2017', 'artists': [{'name': 'Christmas Hits', 'id': 'UC67PxIJF9rMwmK9w4hGDxKw'}, {'name': 'Christmas Songs', 'id': 'UC_4Hvm0j5cwNafTdBc8m8cQ'}, {'name': 'Merry Christmas', 'id': 'UCTsZWHIpXrwN4-YjHrwvOeQ'}], 'browseId': 'MPREb_gay5WC9LAmf', 'isExplicit': False, 'thumbnails': [{'url': 'https://lh3.googleusercontent.com/debCqT9n1gtMT7VVgc_znvePDMWfLocGHGfnO_0IQ6C1G7qKeycRmB5Ere9CSQqtk8wfBcBeoi41-AVvRw=w60-h60-l90-rj', 'width': 60, 'height': 60}, {'url': 'https://lh3.googleusercontent.com/debCqT9n1gtMT7VVgc_znvePDMWfLocGHGfnO_0IQ6C1G7qKeycRmB5Ere9CSQqtk8wfBcBeoi41-AVvRw=w120-h120-l90-rj', 'width': 120, 'height': 120}, {'url': 'https://lh3.googleusercontent.com/debCqT9n1gtMT7VVgc_znvePDMWfLocGHGfnO_0IQ6C1G7qKeycRmB5Ere9CSQqtk8wfBcBeoi41-AVvRw=w226-h226-l90-rj', 'width': 226, 'height': 226}, {'url': 'https://lh3.googleusercontent.com/debCqT9n1gtMT7VVgc_znvePDMWfLocGHGfnO_0IQ6C1G7qKeycRmB5Ere9CSQqtk8wfBcBeoi41-AVvRw=w544-h544-l90-rj', 'width': 544, 'height': 544}]}, {'category': 'Albums', 'resultType': 'album', 'title': 'Merry Christmas (Have a Holly Jolly Christmas)', 'type': 'Album', 'duration': None, 'year': '2021', 'artists': [{'name': 'Various Artists', 'id': None}], 'browseId': 'MPREb_4F9MWIFLRrX', 'isExplicit': False, 'thumbnails': [{'url': 'https://lh3.googleusercontent.com/VB4w1sdgY92IFpyKc1enhuxVDjrSFY0QySu9BBO4bmiVK9bglOljZr9qfqjjQ5hVIFfbSAZAc9G6Ge6Z=w60-h60-l90-rj', 'width': 60, 'height': 60}, {'url': 'https://lh3.googleusercontent.com/VB4w1sdgY92IFpyKc1enhuxVDjrSFY0QySu9BBO4bmiVK9bglOljZr9qfqjjQ5hVIFfbSAZAc9G6Ge6Z=w120-h120-l90-rj', 'width': 120, 'height': 120}, {'url': 'https://lh3.googleusercontent.com/VB4w1sdgY92IFpyKc1enhuxVDjrSFY0QySu9BBO4bmiVK9bglOljZr9qfqjjQ5hVIFfbSAZAc9G6Ge6Z=w226-h226-l90-rj', 'width': 226, 'height': 226}, {'url': 'https://lh3.googleusercontent.com/VB4w1sdgY92IFpyKc1enhuxVDjrSFY0QySu9BBO4bmiVK9bglOljZr9qfqjjQ5hVIFfbSAZAc9G6Ge6Z=w544-h544-l90-rj', 'width': 544, 'height': 544}]}, {'category': 'Albums', 'resultType': 'album', 'title': 'Holly Jolly Christmas', 'type': 'Album', 'duration': None, 'year': '1964', 'artists': [{'name': 'The Quinto Sisters', 'id': 'UCe-7N0UtWLWn55lFYET39zQ'}], 'browseId': 'MPREb_SdeAZNl5PZN', 'isExplicit': False, 'thumbnails': [{'url': 'https://lh3.googleusercontent.com/JAzL2HevZxOHG3WUcg7_oanX19SOnuab0YAGiFhFpd68Tld136xGDnXUZccyuSOJWmhcij-r5WATqSDv0A=w60-h60-l90-rj', 'width': 60, 'height': 60}, {'url': 'https://lh3.googleusercontent.com/JAzL2HevZxOHG3WUcg7_oanX19SOnuab0YAGiFhFpd68Tld136xGDnXUZccyuSOJWmhcij-r5WATqSDv0A=w120-h120-l90-rj', 'width': 120, 'height': 120}, {'url': 'https://lh3.googleusercontent.com/JAzL2HevZxOHG3WUcg7_oanX19SOnuab0YAGiFhFpd68Tld136xGDnXUZccyuSOJWmhcij-r5WATqSDv0A=w226-h226-l90-rj', 'width': 226, 'height': 226}, {'url': 'https://lh3.googleusercontent.com/JAzL2HevZxOHG3WUcg7_oanX19SOnuab0YAGiFhFpd68Tld136xGDnXUZccyuSOJWmhcij-r5WATqSDv0A=w544-h544-l90-rj', 'width': 544, 'height': 544}]}, {'category': 'Artists', 'resultType': 'artist', 'artist': 'Burl Ives', 'shuffleId': 'RDAOTj34Z3DaFQ1y_qR4V86rVQ', 'radioId': 'RDEMTj34Z3DaFQ1y_qR4V86rVQ', 'browseId': 'UCl2j2shAiHLlGu0JSm-4dCQ', 'thumbnails': [{'url': 'https://lh3.googleusercontent.com/Qu-DyIAtcJL1ysW88M7LsM3SiEQ7SUlwDLNZMci1tDHHtlhLfkmAldP8bxNihZjBhLkn35mgtkesP-1c=w60-h60-p-l90-rj', 'width': 60, 'height': 60}, {'url': 'https://lh3.googleusercontent.com/Qu-DyIAtcJL1ysW88M7LsM3SiEQ7SUlwDLNZMci1tDHHtlhLfkmAldP8bxNihZjBhLkn35mgtkesP-1c=w120-h120-p-l90-rj', 'width': 120, 'height': 120}]}, {'category': 'Artists', 'resultType': 'artist', 'artist': 'Holly Jolly Christmas Carols', 'shuffleId': 'RDAOv_l_-ZyZBx1B5t3GwH-Ucg', 'radioId': 'RDEMv_l_-ZyZBx1B5t3GwH-Ucg', 'browseId': 'UC8lTTKI7XIOA-f3h1mCMvPA', 'thumbnails': [{'url': 'https://lh3.googleusercontent.com/zBxizzH-fyBsoCRDLalegBOym8aVUR5NzWKP3cpG3rZ20ZlH4AMM08Y7NcCd3UHqHfJWIVW4nbKJhIQ=w60-h60-l90-rj', 'width': 60, 'height': 60}, {'url': 'https://lh3.googleusercontent.com/zBxizzH-fyBsoCRDLalegBOym8aVUR5NzWKP3cpG3rZ20ZlH4AMM08Y7NcCd3UHqHfJWIVW4nbKJhIQ=w120-h120-l90-rj', 'width': 120, 'height': 120}]}, {'category': 'Artists', 'resultType': 'artist', 'artist': 'Holly Jolly Christmas Ringtone', 'shuffleId': 'RDAOZ2x8kzkMgtklbPcqlFzdzg', 'radioId': 'RDEMZ2x8kzkMgtklbPcqlFzdzg', 'browseId': 'UCywVWKpONAMzpLBQNLl4oFQ', 'thumbnails': [{'url': 'https://lh3.googleusercontent.com/-zrNjwks5RVI3ILw0wPi3M_3iro-VH46VMQSucoPqhwHhzD_4eAQPr9izOUjse4CoU92iT3q8S0tLII=w60-h60-l90-rj', 'width': 60, 'height': 60}, {'url': 'https://lh3.googleusercontent.com/-zrNjwks5RVI3ILw0wPi3M_3iro-VH46VMQSucoPqhwHhzD_4eAQPr9izOUjse4CoU92iT3q8S0tLII=w120-h120-l90-rj', 'width': 120, 'height': 120}]}]

--> Video id vom python script: 'videoId': 'p0kK3fI_3vo',

Das ganze habe ich dann mit ein paar liedern getestet und immer war die "erste" video id, die die ich auch im browser bekommen habe

Denke mit irgendeinem Regex könnte man diese dann extrahieren und einen Link zusammen bauen

fquirin commented 3 years ago

Hi,

also ich habe testweise mal einen Microservice drumherum gebaut, der die Ergebnisse in Youtube Data API v3 Format zurück gibt: https://github.com/fquirin/python-ytmusicapi-server

Guck doch mal, ob der bei dir auch läuft :slightly_smiling_face: . Ich habe es erstmal komplett ohne authentication gemacht, da kriegt man auch schon Ergebnisse. Du kannst ja mal prüfen was passiert wenn man die Zeile ytmusic = YTMusic() # With auth.: YTMusic('headers_auth.json') ändert ^^.

Wenn das klappt füge ich dem SEPIA Assist Server mal eine Option hinzu, so dass man den API Server selbst definieren kann und dann müsste das als drop-in Ersatz funktionieren :crossed_fingers:

[EDIT] Noch ein Hinweis: Die Ergebnisse sind ziemlich random gerade, eventuell müsste man den Filter noch korrekt einstellen auf Video, Song, o.ä.. Ich weise nicht ob man da mehrere Typen gleichzeitig angeben kann.

gu3nter commented 3 years ago

Hammer bester Man, vielen Dank werde es die Tage testen

gu3nter commented 3 years ago

Habe nun alles getestet, funktioniert wunderbar, vielen Dank. Wenn du das jetzt noch in Sepia einbauen könntest wäre das super.

Wa auch noch top wäre wenn man nach eigenen Playlisten suchen könnte und die dann abspielen könnte. Habe gerade die Funktion der ytmusicapi getestet: ytmusic.get_library_playlists()

--> Ergebnis es werden alle id´s und titel der eigenen Playlists zurück gegeben.

Was aktuell noch bissal blöd ist, dass der Login nach jedem Neustart verloren geht, evtl können wir dem Problem auch noch auf die Schliche kommen.

Wenn nicht ist das auch vollkommen in Ordnnung.

Danke für alles

gu3nter commented 2 years ago

Sorry für die Späte Antwort habe erst vorgestern den pull request gesehen: https://github.com/SEPIA-Framework/sepia-assist-server/commit/f9d051c53583d075046e3c2c271e2a065688bbb1

--> muss noch ein wenig mehr in der Datei anpassen, damit es geht, aber somit funktioniert SEPIA mit der ytmusicapi reibungslos, vielen Dank.

Hier meine weiteren Anpassungen https://github.com/gu3nter/sepia-assist-server/commit/1ce5f085841458873b838525cf29208d23913d0d

fquirin commented 2 years ago

Hi,

die "überflüssigen" URL Parameter würde ich drin lassen, die originale YouTube API braucht die (teilweise) und für die custom API sollte es auch nicht stören weil die ignoriert werden bisher. Den leeren Key könnte man noch optimieren, stimmt, oder man schreibt einfach was beliebiges rein wie "test" :-)

Wenn alles glatt läuft mache ich vor Weihnachten wahrscheinlich noch einen offiziellen release, mal gucken :-).

gu3nter commented 2 years ago

Ui das wäre cool. Ok, wenn die überflüssigen parameter egal sind dann geht ja auch schon so wie von dir erstellt :). Hatte das garnicht getestet, sorry.

Könntest du mir bitte sagen, wie ich https://github.com/fquirin/python-ytmusicapi-server das im autostart ausführen kann?

fquirin commented 2 years ago

Benutzt du den Cronjob für SEPIA? Dann könntest du es einfach in die on-reboot.sh ans Ende schreiben, sowas wie:
cd [my-ytmusicapi-server] && nohup run.sh &> log.out&

Oder das gleiche direkt als Cronjob via cronjob -e und dann @reboot sleep 80 && cd [my-ytmusicapi-server] && nohup run.sh &> log.out&.

Das alles ist nicht super elegant, am Besten wäre es einen systemd Service zu erstellen. Das habe ich schon länger vor für SEPIA aber komme doch nie dazu irgendwie :sweat_smile:

gu3nter commented 2 years ago

Super danke für die Antwort, werde ich dann testen, was für mich am besten ist

fquirin commented 2 years ago

Die neuen YouTube Settings sind jetzt verfügbar via SEPIA-Home v2.6.1 :slightly_smiling_face:

gu3nter commented 2 years ago

Vielen Dank, du bist der Beste

gu3nter commented 2 years ago

So eine Frage hätte ich dann doch noch, wenn das ok ist :).

Weiter oben hatte ich ja schonmal erwähnt, dass bei mir nach jedem reboot der Login bei Youtube verloren geht Ob Youtube oder Youtube Music, da ist kein unterschied, falls du kein Youtube Mic Bbo hast). Könntest du das bitte bei dir testen, ob dein Login behalten wird nach einem reboot?

Evtl mache ich ja auch etwas flasch, wüsste aber nicht was;)

fquirin commented 2 years ago

ich habe gerade mal getestet was passiert wenn ich mich mit dem normalen Google Account bei Youtube einlogge und danach neu starte. Tatsächlich ist der Login dann einfach wieder weg. Du könntest versuchen das sepia-client/run.sh Script zu verändern. Unter 'chromedatadir' gibt es die 'exited_cleanly' Zeilen, die würde ich testweise mal rausnehmen. Wenn das auch nicht hilft könnte man auch das 'user-data-dir' flag entfernen und dann den Browser einmal über den Remote Zugriff einstellen: default_chrome_flags="--user-data-dir=$chromedatadir ....

gu3nter commented 2 years ago

Cool danke für die Tipps. Teste das später Mal und gebe Rückmeldung, ob es geklappt hat

gu3nter commented 2 years ago

Habe gerade ein Paar Tests mit den von genannten Einstellungen gemacht, jedoch bisher ohne Erfolg.

Werde morgen weitere Tests machen. Eine Frage muss ich nach jedem change der run.sh den chromium Ornder löschen?

fquirin commented 2 years ago

Eine Frage muss ich nach jedem change der run.sh den chromium Ornder löschen?

Eigentlich nicht. Wenn du ihn löschst musst du dich danach aber auf jeden Fall neu einloggen, da werden die ganzen User-Settings gespeichert. Wenn du den 'user-data-dir' Flag entfernst sollte der Ordner gar nicht mehr benutzt werden.

gu3nter commented 2 years ago

Laut Google geht der automatische Login mit dem chromium-browser wohl nicht mehr https://askubuntu.com/questions/1322559/sync-chromium-with-a-google-account-does-not-work-any-more-solutions Könnte man für den Sepia Client den Chrome Browser oder einen anderen verwenden? Falls ja wie ;)

fquirin commented 2 years ago

Soweit ich den Link verstehe bezieht sich das nur auf die "sync API" also den Teil der deinen Account mit anderen Browsern synchronisieren würde. Das sollte auf den lokalen Account eigentlich keine Auswirkungen haben.

Diesen Flag zu entfernen hatte nichts gebracht? --user-data-dir=$chromedatadir Was mich eigentlich verwirrt ist, dass der SEPIA Login ja gespeichert bleibt, das heißt Cache und Browser Storage werden nicht gelöscht.

Könnte man für den Sepia Client den Chrome Browser oder einen anderen verwenden?

Grundsätzlich kannst du jeden Browser nutzen, wenn er denn für das OS verfügbar ist. Beim Raspberry Pi gibt es glaube ich keinen Chrome mehr, zumindest nicht offiziell, nur Chromium. Firefox müsste verfügbar sein (sudo apt install firefox-esr), habe ich bisher aber gemieden, weil er noch mehr RAM benötigt und keine native WebSpeechAPI Implementierung hat. Die ganze Konfiguration, sprich die Flags fürs Startscript müsste man noch rausfinden ;-)

gu3nter commented 2 years ago

Konnte das Problem lösen, evtl. auch für YouTube Logins relevant, falls sich dort jemand einloggen möchte:

  1. den remote Access in den Settings aktivieren
  2. einen neuen Tab mit der Adresse "chrome://settings/syncSetup" öffnen
  3. den haken bei "Allow Chronium sign-in" deaktivieren

nun sollte der google login nach einem Neustart erhalten bleiben

PS: musste nichts an der Run.sh verändern :)

gu3nter commented 2 years ago

danke für deine Mühe @fquirin

fquirin commented 2 years ago

Nice :sunglasses: . Ich frage mich ob es dafür einen Browser Flag gibt :thinking:

SHU-red commented 2 years ago

I have no idea how i could get this working so fast. But im pretty sure, this is because of the awesome documentaion-work done by @fquirin

Here i created a dockerized version of your YTM microservice which seems to be working in my case: https://hub.docker.com/repository/docker/shur3d/ytmusicapi_microservice

SHU-red commented 2 years ago

Can someone now give me a hint

Sorry you guys are much more advanced than me and i did not really understand every aspect of your discussion ...

EDIT: I did see the "API keys" section in the documentation https://github.com/SEPIA-Framework/sepia-docs/wiki/API-keys

But i think YTM is not fully integrated yet?

gu3nter commented 2 years ago

Here a short "how to" how i got it working.

  1. get reomote chromium access to sepia server
  2. enter chrome://settings/syncSetup
  3. deactivate "Allow Chronium sign-in"
  4. log in into youtube.com or youtube.music.com
  5. to get the awesome mircorserive working correct you have to follow the documentation of https://ytmusicapi.readthedocs.io/en/latest/usage.html
  6. get the cookie as explaint in point 5 and save it in headers_auth.json
  7. adapt the main.py of the mircoservice https://github.com/fquirin/python-ytmusicapi-server/blob/main/main.py change line 42 from "ytmusic = YTMusic() # With auth.: YTMusic('headers_auth.json')" to "ytmusic = YTMusic('headers_auth.json') headers_auth.json has to be at the same directory as the microservice itself
  8. exit remote browser
  9. go to http://[IP OF SEPIA SERVER]:20721/tools/index.html#!core-settings
  10. serach section "Write key-value pair to config. Will take effect after server reload."
  11. enter youtube_api_url = http\://localhost\:30010/search (use localhost of mircroservice is running on the same machine as sepia and microserive is started under port 30010)
  12. click on "write to config"
  13. reboot speia service
  14. done YT Music shall work now in combinaton with sepia
fquirin commented 2 years ago

A quick tip: maybe try it with your normal browser first before using the DIY client in remote. It should be a bit easier to get started and to debug problems ;-)

SHU-red commented 2 years ago

@gu3nter

14. done YT Music shall work now in combinaton with sepia

I now guess, that the correct setting in my client is:

And then i should only request something?

Does not work for me. "Sorry but could not find anything to play"

fquirin commented 2 years ago

Default musc app: Embedded Player

This should be "YouTube Widget" or you can simply say "play XY on Youtube".

SHU-red commented 2 years ago

OK, that is still a problem for me.

It works to request something like "Play the Song Carry On My Wayward Son"

What then happens is:

  1. Youtube video seems to be found because i can see the adress of the links for the Sepia reply pointing to a Youtube Video for this song
  2. A youtube embedded video appears but it says "Video not available" and stays black

As example this is where the link on the right side of the found title points to https://www.youtube.com/embed/tz6u9suVNlY

Even if i open this in the browser its not accesssible Seems that the embed-part is not working?

And in General: What i want to achieve is

Is this even possible? There is no big use for me if i can not access MY Music and MY Playlists from YouTube Music

fquirin commented 2 years ago

Play the Song Carry On My Wayward Son

Funny, I had this song in mind as well this morning :smiley:

I quickly tried it in my desktop browser test version, in general it seems to work (I simply used the URL but it opens the same player widget):

image

Is this even possible? There is no big use for me if i can not access MY Music and MY Playlists from YouTube Music

As far as I understand @gu3nter is doing exactly that.

SHU-red commented 2 years ago

OK i have no idea, why there is no connection .... docker? ports stuff? But the request comes from within docker ....

I quickly tried it in my desktop browser test version, in general it seems to work (I simply used the URL but it opens the same player widget):

Screenshot_20220407_134518

As far as I understand @gu3nter is doing exactly that.

OK ... i have no idea what to do I already got an youtube api token via the google cloud site but i dont know if it is working or not

fquirin commented 2 years ago

Can you press F12 in Vivaldi to check the dev console for errors? I thought it might be an SSL/HTTPS issue but I've tried again in Firefox and with insecure origins and the video was still working vor me :thinking: Does the video open in Youtube if you press the button on the top right of the card (open in new tab/external) or the text in the center?

gu3nter commented 2 years ago

I havent tried playing Playlists, i think this is not possivle witch the current Microservice, because it is searching for Songs not Playlists from my point of view. I havent used YouTube music or YouTube the last time, i will try i thease days and let you know if i have the same problem as you at the moment

gu3nter commented 2 years ago

Tried it right now, frist try same behavior like shu-red told. Rebooted sepia Server, after that the song played, dont know the reason why i Had top reboot, but this solved the issue.

PS: as far as i know, every content which ist found in YouTube music can be played via YouTube premium, so no need to play only the yt music as music

SHU-red commented 2 years ago

Can you press F12 in Vivaldi to check the dev console for errors? I thought it might be an SSL/HTTPS issue but I've tried again in Firefox and with insecure origins and the video was still working vor me thinking Does the video open in Youtube if you press the button on the top right of the card (open in new tab/external) or the text in the center?

Yes for each request the errors get more and more for this issue:

  1. Indicate whether to send a cookie in a cross-site request by specifying its SameSite attribute
    1. Because a cookie’s SameSite attribute was not set or is invalid, it defaults to SameSite=Lax, which prevents the cookie from being sent in a cross-site request. This behavior protects user data from accidentally leaking to third parties and cross-site request forgery.

      Resolve this issue by updating the attributes of the cookie:

      • Specify SameSite=None and Secure if the cookie should be sent in cross-site requests. This enables third-party use.
      • Specify SameSite=Strict or SameSite=Lax if the cookie should not be sent in cross-site requests.
    2. AFFECTED RESOURCES
      1. 16 cookies
        1. Name | Domain & Path -- | -- PREF | .youtube.com/ SID | .youtube.com/ __Secure-1PSID | .youtube.com/ HSID | .youtube.com/ SSID | .youtube.com/ APISID | .youtube.com/ SAPISID | .youtube.com/ __Secure-1PAPISID | .youtube.com/ SID | .google.com/ __Secure-1PSID | .google.com/ HSID | .google.com/ SSID | .google.com/ APISID | .google.com/ SAPISID | .google.com/ __Secure-1PAPISID | .google.com/ SIDCC | .google.com/
SHU-red commented 2 years ago

Tube premium, so no need to play only the yt music as music

Yes, but i would like do consequently only stream music in high quality. Thats why you can deactivate in the native YTM-player to stream videos if you just want to listen to good quality music.

What im trying to get here is a "as-good-as-possbile"-replacement for my current google home speaker And one of my main use-cases is for sure: Listening to Music through YT Music

So it would also be absolutely enough for me to stream this via the Embedded Player and being able to use the Sepia-native controls for media

fquirin commented 2 years ago

Because a cookie’s SameSite attribute was not set or is invalid, it defaults to SameSite=Lax, which prevents the cookie ...

This is an "expected" error, because of the embedding and settings Youtube is not allowed to store cookies. I get this on all browsers but it shouldn't stop the video from working :thinking: . Maybe there are some other browsers settings messing with the video:

Just for testing could you try a different browser? Chrome, Firefox, Edge, Chromium maybe?

SHU-red commented 2 years ago

Hmh,

In Vivaldi:

In Chromium

In my network

Then i got something working: Sitting here in Germany i tried "Nena - 99 Luftballons" --> It worked, even if it only worked after refreshing it directly in the browser url

Nontheless --> This is now the only song working for me XD

Can there be some sort of geoblocking stuff? I dont get it anymore ... But 99% of the /embed/ urls are not working for me ...

SHU-red commented 2 years ago

Same from my cellphone ...I really need to think about if there is something in my home network going wrong ...

fquirin commented 2 years ago

It also does not work if opening the url https://www.youtube.com/embed/tz6u9suVNlY directly via browser ... In Chromium: Same Result

That really seems like an issue not related to SEPIA :grimacing:

Nontheless --> This is now the only song working for me XD

:laughing: ok, weird, I'm in Germany as well and can play all of your previous URLs :thinking: . You are not using any VPN or something? Usually if a Youtube video doesn't work because of your location it says "not available in your region".