0

我有这个脚本,用于将专辑从 Deezer 保存到我的服务器。专辑地址没问题,你可以自己试试。它确实会生成一个文件,但它不是我想要看到的图像,而是一个损坏的文件。我猜这与他们在访问从 API 获得的原始链接时提供的(我猜)301 有关。但如果是这样,我不知道如何解决这个问题。

<?php
// Deezer
$query = 'https://api.deezer.com/2.0/search?q=madonna';
$file = file_get_contents($query);
$parsedFile = json_decode($file);
$albumart = $parsedFile->data[0]->artist->picture;
$artist =  $parsedFile->data[0]->artist->name;

$dir = dirname(__FILE__).'/albumarts/'.$artist.'.jpg';
file_put_contents($dir, $albumart);
?>
4

2 回答 2

0

两个问题:

1)$albumart包含一个 URL(在您的情况下为http://api.deezer.com/2.0/artist/290/image)。你需要file_get_contents在那个网址上做。

<?php 
// Deezer 
$query = 'https://api.deezer.com/2.0/search?q=madonna'; 
$file = file_get_contents($query); 
$parsedFile = json_decode($file); 
$albumart = $parsedFile->data[0]->artist->picture; 
$artist =  $parsedFile->data[0]->artist->name; 

$dir = dirname(__FILE__).'/albumarts/'.$artist.'.jpg'; 
file_put_contents($dir, file_get_contents($albumart));    // << Changed this line
?>

2)重定向可能是一个问题(正如你所建议的那样)。要解决这个问题,请使用 curl 函数。

// Get file using curl.
// NOTE: you can add other options, read the manual
$ch = curl_init($albumart);
curl_setopt($ch, CURLOPT_RETURNTRANSFER, true);
$data = curl_exec($ch);
curl_close($ch);

// Save output
file_put_contents($dir, $data);

请注意,您应该将curl()其用于处理从外部 URL 获取内容的原则。更安全,你有更好的控制。一些主机还阻止使用file_get_contents无论如何访问外部 URL。

于 2012-07-24T04:25:22.357 回答
0

为什么不获取文件的标头(标头包含重定向)。

$headerdata=get_headers($albumart);
echo($headerdata[4]);//show the redirect (for testing)
$actualloc=str_replace("Location: ","",$headerdata[4]);//remove the 'location' header string

file_put_contents($dir, $actualloc);

我认为这是标题中的第 4 条记录,如果不使用 print_r($hearderdata);

这将返回图像文件的正确 url。

于 2012-08-14T10:28:51.860 回答