[PHP] Grooveshark Api Token

Dieses Thema im Forum "Webentwicklung" wurde erstellt von DeltaFox, 11. August 2011 .

Schlagworte:
  1. 11. August 2011
    Grooveshark Api Token

    Hallo,
    ich versuche gerade die unoffiziele Grooveshark Api zu nutzen und diese in einem PHP Script mit Hilfe von Curl umzusetzen.
    Das Problem das ich nun nicht gelöst bekomme ist, dass ich immer den Fault Code 256 Invalid Token bekomme.
    Code:
    {"header":{"session":"bd999e82f31ebe91025011bbb54fd87e"},"fault":{"code":256,"message":"invalid token"}}
    Und ich nicht verstehen woran es liegt. Ich habe schon mehrere ähnliche Scripte durchgeschaut und deren ihre Token Funktion übernommen, aber der Fehler besteht weiterhin. Auch habe ich die eigene Funktion von Grooveshark in der JSQueue.swf angeschaut welche es genau gleich macht.

    Ich hoffe ihr könnt mir helfen.

    Funktion GenerateToken:
    PHP:
    $lastRandomizer  '' ;
    for(
    $x = 0 ; $x < 6 ; $x ++){
        
    $val  rand ( 0 , 15 );
        if(
    $val  10 ){
            
    $lastRandomizer  .=  $val ;
        } else {
            
    $lastRandomizer  .=  chr ( 97  + ( $val  10 ));
        }
    }
    $method  "getStreamKeyFromSongIDEx" ;

    $shaKey  $method  ":"  $CommToken  ":neverGonnaLetYouDown:"  $lastRandomizer ;
    $token  $lastRandomizer  sha1 ( shaKey );
    Community Token:
    PHP:
    $page  curl_post ( $CommUrl , $CommID , $cookie , 0 , 1 , 1 );
    $obj  json_decode ( $page );
    $CommToken  $obj ->{ 'result' };
    JSON POST für getStreamKeyFromSongIDEX:
    PHP:
    $SongJson  = array(  "header"  => array(  "country"  => array(  "CC3"  =>  "0" ,
                                                              
    "ID"  =>  "55" ,
                                                               
    "CC4"  =>  "0" ,
                                                            
    "CC2"  =>  "0" ,
                                                             
    "IPR"  =>  "10167" ,
                                                             
    "CC1"  =>  "18014398509481984"
                                                          
    ),
                                        
    "uuid"  =>  $uuid ,
                                        
    "client"  =>  "gslite" ,
                                        
    "clientRevision"  =>  "20110722.09" ,
                                        
    "token"  =>  $token ,
                                        
    "privacy"  =>  0 ,
                                        
    "session"  =>  $sessionID
                    
    ),
                    
    "parameters"  => array(  "country"  => array(  "CC3"  =>  "0" ,
                                                              
    "ID"  =>  "55" ,
                                                               
    "CC4"  =>  "0" ,
                                                            
    "CC2"  =>  "0" ,
                                                             
    "IPR"  =>  "10167" ,
                                                             
    "CC1"  =>  "18014398509481984"
                                                          
    ),
                                            
    "mobile"  =>  false ,
                                            
    "songID"  =>  24378309 ,
                                            
    "prefetch"  =>  false
                    
    ),
                    
    "method"  =>  "getStreamKeyFromSongIDEx"
            
    );
    $SongJson  json_encode ( $SongJson );
    Ich hoffe ihr könnt mir helfen.
     
  2. 11. August 2011
    AW: Grooveshark Api Token

    kann es an der syntax liegen?
    PHP:
    $token  $lastRandomizer  sha1 ( shaKey ); 
    in
    PHP:
    $token  $lastRandomizer  sha1 ( $shaKey ); 
    das $ fehlt bei shaKey;
     
  3. 12. August 2011
    AW: Grooveshark Api Token

    Ohh Danke! Ist mir gar nicht aufgefallen, aber leider bringt es keine Änderung.
    Ich glaub es liegt gar nicht an der Generierung des Tokens selber, weil ich die Tokens die Firefox verwendet so nachgestellt habe und diese übereinstimmen.
    Beispiel:
    Code:
    PHPSESSION: bd999e82f31ebe91025011bbb54fd87e
    SECRETKEY: 0dfc457300a60c4dbb83ea28f2e976c8
    COMMTOKEN: 4e4462fad09c4
    TOKEN: a8c27f73e736a16f906a872026ebf3ce071d224d457fb4
     a8c27f73e736a16f906a872026ebf3ce071d224d457fb4
    
    a8c27f + sha1(getStreamKeysFromSongIDs:4e4462fad09c4:neverGonnaLetYouDown:a8c27f);
    
    Nur ich habe keine Ahnung wo sonst der Fehler liegen könnte.
    Ich hoffe irgendjemand weiß Rat
     
  4. 12. August 2011
    AW: Grooveshark Api Token

    Setze einfach auch mal die Header die Firefox beim senden einer Anfrage mitsendet. Das ist ein Schutz der oftmals eingesetzt wird.
    Also "User-Agent", "Accept", "Accept-Language", "Accept-Encoding", "Accept-Charset"...
     
  5. 12. August 2011
    AW: Grooveshark Api Token

    Hatte ich ganz am Anfang schonmal gesetzt. Habe es jetzt nocheinmal probiert aber bringt leider keine Änderung.

    Trotzdem Danke

    Meine Curl Funktion:
    PHP:
    function  curl_post ( $link $postfields $cookie $refer $ssl $json ){
        
    $ch  curl_init ();
        
    curl_setopt ( $ch CURLOPT_RETURNTRANSFER 1 );
        
    curl_setopt ( $ch CURLOPT_HEADER 1 );
        if(
    $json ){
            
    //curl_setopt($ch, CURLOPT_HTTPHEADER,array('Accept: application/json', 'Content-Type: application/json'));
            
    curl_setopt ( $ch CURLOPT_HTTPHEADER ,array( "Host: grooveshark.com" , "Content-type: application/json" , "Content-length: " . strlen ( $postfields )));
        }
        
    curl_setopt ( $ch CURLOPT_FOLLOWLOCATION 1 ); 
        
    curl_setopt ( $ch CURLOPT_USERAGENT 'Mozilla/5.0 (Windows; U; Windows NT 5.1; en-US; rv:1.8.1.1) Gecko/20061204 Firefox/2.0.0.1' );
        
    curl_setopt ( $ch CURLOPT_CONNECTTIMEOUT , '600' );    
        if(
    $refer ){
            
    curl_setopt ( $ch CURLOPT_REFERER $refer );
        }
        if(
    $ssl ){
            
    curl_setopt ( $ch CURLOPT_SSL_VERIFYPEER 0 );
            
    //curl_setopt($ch, CURLOPT_SSL_VERIFYHOST, 1); 
        
    }
        
    curl_setopt ( $ch CURLOPT_URL $link );
        if(
    $postfields ){
            
    curl_setopt ( $ch CURLOPT_POST 1 );
            
    curl_setopt ( $ch CURLOPT_POSTFIELDS $postfields );
        }
        if(
    $cookie ){
            
    curl_setopt ( $ch CURLOPT_COOKIEJAR $cookie );
            
    curl_setopt ( $ch CURLOPT_COOKIEFILE $cookie );
        }

        
    $page  curl_exec ( $ch );
        if(empty(
    $page )){
            return 
    "Could not connect to host: " . $link . ' Errorcode: ' . curl_errno ( $ch ). '<br>' ;
            die();
        }else{
            return 
    $page ;
        }
            
    curl_close ( $ch );
    }
    Vielleicht hat sich dort auch ein Fehler eingeschlichen.
     
  6. 13. August 2011
    AW: Grooveshark Api Token

    Der Host: Header sollte eigentlich automatisch mitgeschickt werden.
    Hast du auch die Accept Header gesetzt? Die spielen auch eine Rolle! Ich weiß nicht mehr bei welchem Dienst das war, aber ich hatte mal einen der tatsächlich die Accept Header überprüft hatte um automatisierte Scripts zu enttarnen.

    Wenn sonst alles stimmt kann es auch nicht mehr an soviel anderem liegen denke ich.
    Meine Empfehlung: Lad dir die Firefox Extension HTTP Live Headers runter, falls du die nicht sowieso schon hast, und schau dir alle Header einer Anfrage an.
    Diese implementierst du genau so auch in PHP und lässt ihn dir via CURLINFO_HEADER_OUT ausgeben.

    Trotzdem soll das die anderen nicht aufhalten auch ihre Ideen zu posten.
     
  7. 13. August 2011
    AW: Grooveshark Api Token

    Hmm ich nutze eig Tamper Data für Firefox. Aber ich hab nun auch noch mit Live Header die Header ausgelesen und diese in Curl hinzugefügt.

    Einmal für Curl:
    PHP:
    curl_setopt ( $ch CURLOPT_HTTPHEADER ,array( "Accept: text/html,application/xhtml+xml,application/xml;q=0.9,*/*;q=0.8" , "Accept-Language: de-de,de;q=0.8,en-us;q=0.5,en;q=0.3" , "Accept-Encoding: deflate" , "Accept-Charset: ISO-8859-1,utf-8;q=0.7,*;q=0.7" , "Connection: keep-alive" , "Referer: http://grooveshark.com/JSQueue.swf?20110808.01" , "Content-type: application/json" , "Content-length: " . strlen ( $postfields )));
    Und dann habe ich es auch noch mit stream_context_create und file_get_contents probiert:
    PHP:
    $header  = array( 'http'  => array( 'method'  =>  'POST' ,
                                     
    'header'  =>  "User-Agent: Mozilla/5.0 (Windows NT 6.1; rv:5.0) Gecko/20100101 Firefox/5.0\r\n"  .
                                        
                                                 
    "Accept: text/html,application/xhtml+xml,application/xml;q=0.9,*/*;q=0.8\r\n" .
                                                 
    "Accept-Language: de-de,de;q=0.8,en-us;q=0.5,en;q=0.3\r\n" .
                                                 
    "Accept-Encoding: gzip, deflate\r\n" .
                                                 
    "Accept-Charset: ISO-8859-1,utf-8;q=0.7,*;q=0.7\r\n" .
                                                 
    "Connection: keep-alive\r\n"  .
                                                 
    "Content-type: application/json\r\n"  .
                                                 
    "X-Requested-With: XMLHttpRequest\r\n"  .
                                                 
    "Referer: http://grooveshark.com/JSQueue.swf?20110808.01\r\n"  .
                                                 
    "Content-length: "  strlen ( $SongJson ) .  "\r\n"  .
                                                 
    "Cookie: PHPSESSID="  $session  "\r\n"  .
                                                 
    "Host: grooveshark.com\r\n"  .
                                                 
    "Pragma: no-cache\r\n"  .
                                                 
    "Cache-Control: no-cache\r\n\r\n" ,
                                    
    'content'  =>  $SongJson
                                
    )
                            );
    $context  stream_context_create ( $header );
    $result  file_get_contents ( 'http://grooveshark.com/more.php?getStreamKeyFromSongIDEx' false $context );
    Beides brachte keine Änderung.

    Ich hab nun auch angefangen mein Script mit denen aus dem Internet zu vergleiechen.
    Wie es scheint legt Grooveshark nicht so großen Wert auf die Header. Aber ich konnte auch sonst keine Fehler beim Vergleich feststellen. Es ist und bleibt mir ein Rätsel.

    Ein paar Ideen hatte ich dennoch. Welche ich aber gleich wieder verwerfen konnte.
    Die UUID: Wobei ich feststellte das diese zufällig generiert wird.
    Und der Intervall bei der Token generierung welcher bei 16 Minuten liegen soll. Da er solang Aktiv ist und man dann einen neuen braucht. Ich habe das Script aber bei einem Freund getestet der den Tag noch nicht auf Grooveshark war, also noch keinen Token hatte, und es ging wieder nicht.

    Ich werd mal den Flash Code in der JSQueue durchgehen und schauen ob ich noch was anderes finde.

    Viele Dank nochmal, vielleicht fällt jemand ja noch was ein!
     
  8. 14. August 2011
    AW: Grooveshark Api Token

    So nachdem ich alles neugeschrieben hab, funktioniert es aufeinmal.
    Ich weiß nicht woran es lag, aber das soll mich jetzt nichtmehr stören.
    Vielen Dank für die Hilfe.

    Mit fehlt nurnoch der 2te Secret Api Key für die Suche. Kennt jemand einen guten SWF Decompiler? Oder kann mir genau sagen wo ich den Key find?
     
  9. 24. Dezember 2011
    AW: Grooveshark Api Token

    Jau hab ich, wenn du es brauchst oder interesse hast schreib mir einfach ne PM dann lass ich es dir zukommen!
     
  10. Video Script

    Videos zum Themenbereich

    * gefundene Videos auf YouTube, anhand der Überschrift.