Récupérer les pochettes via Deezer

Publié le 17 janvier 2010 par Kbour23

De plus en plus de baladeurs audio ou de players software intègrent désormais la possibilité de visualiser la pochette du morceau en cours de lecture. Celle-ci est intégrée directement au fichier mp3 via l’ID3 v2. Il existe plusieurs sites ou plugins proposant ce service via Amazon ou le store iTunes par exemple. Dans le cadre de recherches personnelles, j’ai refais un système similaire pour Deezer qui via son application AIR ne permet pas le téléchargement en direct. Pour regarder une session à la loupe, j’ai utilisé l’incontournable extension de Firefox, Firebug.

  • Tester en ligne D33zer CD Cover lookup v0.1

L’objectif est maintenant de mettre en place un plugin pour iTunes & SongBird ou à minima un batch.

Le code source (quick & dirty) pour valider mes tests :

<?php
//Fonction cookie_parse found at :
//http://www.seo-blackhat.com/article/the-cookie-backer-php.html
function cookie_parse( $header ) {
$cookies = array();
foreach( $header as $line ) {
if( preg_match( '/^Set-Cookie: /i', $line ) ) {
$line = preg_replace( '/^Set-Cookie: /i', '', trim( $line ) );
$csplit = explode( ';', $line );
$cdata = array();
foreach( $csplit as $data ) {
$cinfo = explode( '=', $data );
$cinfo[0] = trim( $cinfo[0] );
 if( $cinfo[0] == 'expires' ) $cinfo[1] = strtotime( $cinfo[1] );
 if( $cinfo[0] == 'secure' ) $cinfo[1] = "true";
 if( in_array( $cinfo[0], array( 'domain', 'expires', 'path', 'secure', 'comment' ) ) ) {
 $cdata[trim( $cinfo[0] )] = $cinfo[1];
} else {
 $cdata['value']['key'] = $cinfo[0];
 $cdata['value']['value'] = $cinfo[1];
 }
 }
$cookies[] = $cdata;
 }
 }
return $cookies;
}
?>

<?php
if(isset($_POST['album'])){

//On recup un sid
$headers=get_headers("http://www.deezer.com/fr/");
$sid = cookie_parse($headers);
$my_sid = $sid[0]['value']['value'];
print "Genrate a new session: ".$my_sid."<br />";

//On recup la conf
$xml = simplexml_load_file("http://www.deezer.com/fr/xml/config-v7.php");
$data = get_object_vars($xml->variables);
$api_key=$data['var'][1];
$cover_format=$data['var'][4];
print "API key today is : ".$api_key."<br />";
print "Cover url format : ".$cover_format."<br /><br />";

//Construction du JSON kivabien
$json='{"ORDER":0,"SUGGEST":1,"ARTIST_SUGGEST":1,"NB":40,"QUERY":"'.$_POST['album'].'","TAB":1,"FILTER":"ALBUM","START":0}';

$options=array(
);

//On poste sur la gw API 3
$form_url="http://api-v3.deezer.com/1.0/gateway.php?method=deezer_pageSearch&output=3&input=3&api_key=".$api_key."&sid=".$my_sid;
$form_fields = array(
'api_key' => $api_key,
'input' => '3',
'method' => 'deezer_pageSearch',
'output' => '3',
'sid' => $my_sid,
'useragent'=>'Mozilla/5.0 (Windows; U; Windows NT 5.1; fr; rv:1.9.1.7) Gecko/20091221 Firefox/3.5.7 (.NET CLR 3.5.30729)',
'referer'=>'http://cdn-files.deezer.com/swf/naboo-v133.swf',
'headers'=> array("Host" => "api-v3.deezer.com"),
'encodecookies' => TRUE,
'Content-type' =>'application/x-www-form-urlencoded'
);

?>
<pre>
<?php
?>
<br />
<?php
$response=http_post_data($form_url, $json, $form_fields);
$chars = preg_split('/[\s,]+/', $response, -1, PREG_SPLIT_OFFSET_CAPTURE);

foreach($chars as $x) {
if( preg_match( '/^"ALB_PICTURE":/', $x[0] ) )  {
    $tmp = (explode('"',$x[0]));
    echo' <img src="http://cdn-images.deezer.com/images/cover/'.$tmp['3'].'/500x500-000000-80-0-0.jpg" border="1"></br>';
}
}

?>
</pre>
<br />
<a href=".">restart</a>
<?php
} else {
?>
DEEZER CD COVER LOOKUP v0.1<br />
NOM DE L'ALBUM - GROUPE - GENRE
<br />
<br />
<form action="." method="post">
<input type="text" name="album" value="bob marley">
<input type="submit">
</form>
<?php
}
?>
Posted in Développement