Creative Commons Lizenzvertrag

Montag, 6. August 2012

Google Music API

In meinem Radio Player, ein Programm welches Radiostreams, CDs und MP3-Files abspielt und dann die Titel in verschiedene soziale Netzwerke posten kann wollte ich auch das abspielen von Songs die bei Google Music gespeichert sind ermöglichen. Leider stellt Google dazu (bisher?) keine API zur Verfügung. Allerdings gibt es dazu Alternativen. ich habe bisher folgende gefunden:
Da mein Radio Player in größten Teils in C# geschrieben ist verwende ich natürlich letztere API.

Diese API stellt nur minimale Funktionen zur Verfügung, welche aber erstmal völlig ausreichend sind. Man kann damit seine Playlists ermitteln, die in der jeweiligen Playlist enthaltenen Songs und man kann alle Songs laden. Die Songs befinden sich dann in einer Liste und jeder Eintrag gibt die Beschreibung des Songs wieder. Alle Rohdaten erhält die API von Google Music im JSON-Format und deserialisiert sie entsprechend. Auf Grund der Datenmenge geschieht dies asynchron. Funktionen wie der Abruf von Alben, Künstlern, Autoplaylists usw. sind nicht vorhanden. Da aber in der Beschreibung der Songs die Informationen über Album, Genre usw. enthalten sind  könnte man diese auch auf der Clientseite realisieren, wenn man so etwas benötigt. Außerdem enthält die API noch Funktionen zum Erzeugen und Löschen von Playlists.

Mit der Hilfe der ID durch die jeder Song eindeutig gekennzeichnet ist kann dann die URL ermittelt werden unter der dieser gespeichert ist. Die erhaltene URL kann dann zum Streamen benutzt werden oder auch um den Song wieder zurückzuspeichern. Auch diese Funktion ist asynchron, was sich in meinem Programm allerdings als hinderlich darstellte. Deswegen habe ich die   Klasse API  um eine synchrone Funktion "GetSongURLSync" erweitert

   1:  public String GetSongURLSync(String id)
   2:          {
   3:              return JSON.DeserializeObject<GoogleMusicSongUrl>(client.DownloadStringSync(new Uri(String.Format("https://play.google.com/music/play?u=0&songid={0}&pt=e", id)))).URL;
   4:          }

und der in der Datei API.cs hinzugefügt. Zusätzlich musste noch die Klasse GoogleHTTP in der Datei GoogleHTTP.cs un die Funktion "DownloadStringSync" erweitert werden.

   1:  public String DownloadStringSync(Uri address)
   2:          {
   3:              HttpWebRequest request = SetupRequest(address);
   4:              request.Method = "GET";
   5:              WebResponse response = request.GetResponse();
   6:              String responseString = "";
   7:              using (Stream stream = response.GetResponseStream())
   8:              {
   9:                  StreamReader reader = new StreamReader(stream, Encoding.UTF8);
  10:                  responseString = reader.ReadToEnd();
  11:              } 
  12:              return responseString;
  13:          }

Durch diese 2 Erweiterungen ist es nun möglich die URL des Songs synchron zu ermitteln und damit war es für mich viel einfacher diese in meinem Programm zu verwenden.

Zum Abschluss noch der Hinweis das es Google Music außerhalb der USA offiziell noch nicht gibt. Wer noch keine Anmeldung dort hat kann dies aber tun. Man benötigt nur während der Anmeldeprozedur eine IP-Adresse aus den USA, welche man ja über einen entsprechenden Proxy ohne Probleme bekommt. Wer erst einmal angemeldet ist kann den Dienst dann aber überall benutzen. Der Proxy ist dann nicht mehr erforderlich.

0 Kommentare:

Kommentar veröffentlichen

Marmel powered by Instant Communities