0

我的 Google Drive 中有我想要下载到我的服务器的 mp3 文件。

Google Drive API 给了我这样的下载网址:

https://docs.google.com/uc?id=0B-8ZjfWGsMOwZVdmQnBXX1pnTEE&export=download

此代码不起作用:

$data = file_get_contents("https://docs.google.com/uc?id=0B-8ZjfWGsMOwZVdmQnBXX1pnTEE&export=download");
file_put_contents("./test.mp3", $data);

我必须改变什么才能让它工作?

4

2 回答 2

0

问题是未登录(错误 403)谷歌的用户无法访问这些文件。

使用起来会很简单,file_get_contents但不幸的是,您必须向 Google 进行身份验证或更改您的 mp3 的权限。

在一个快速的谷歌搜索中,我发现这个博客解释了一个类:http ://hublog.hubmed.org/archives/001954.html

您可以搜索“google api auth php oauth class drive fetch files”的关键字。

于 2013-09-27T08:40:20.703 回答
0

您好,我遇到了同样的问题,最后一个答案不是,因为 getWebContentLink 应该是为未经授权的用户提供的可下载链接,正如谷歌开发者网站上所说

“如果您想允许未经授权的用户直接在 Web 浏览器中而不是通过 API 下载文件,请使用 webContentLink。您可以将用户重定向到此 URL,或将其作为可点击链接提供。”

我的代码(以及上面的谷歌声明)的问题是我从我的 web 应用程序上传的文件默认情况下是不可共享的。实际上并非所有文件。

所以当我添加到我的代码中时,适当的权限是这样的:

//the function
function insertGooglePermission($service, $fileId, $value, $type, $role) {
    set_include_path(get_include_path() . PATH_SEPARATOR . APP_ROOT . '/conf/google-drive/src');
    include_once APP_ROOT . '/conf/google-drive/vendor/autoload.php';

    $newPermission = new Google_Service_Drive_Permission();
    $newPermission->setValue($value);
    $newPermission->setType($type);
    $newPermission->setRole($role);
    try {
        return $service->permissions->insert($fileId, $newPermission);
    } catch (Exception $e) {
        print "ERROR: " . $e->getMessage();
    }
    return NULL;
}

//and the usage
insertGooglePermission($service, $createdFile->getId(), "default", "anyone", "reader");

403 错误消失了。我必须告诉您,授予此权限使其能够被碰巧知道文件 ID 的任何人访问,所以我认为这可能是有风险的......因为我的需要它是完美的。

希望它有助于享受

于 2016-03-03T15:14:46.313 回答