有没有一种方法可以在不使用公开托管的 Goolge Drive 文件夹的授权的情况下获取文件列表?
示例文件夹:https ://googledrive.com/host/0B1Nmfb7VDM6jNnhjWk9CdU9ueHc/
我想使用该文件夹来托管我将在其他网站的画廊中显示的图像。
有没有一种方法可以在不使用公开托管的 Goolge Drive 文件夹的授权的情况下获取文件列表?
示例文件夹:https ://googledrive.com/host/0B1Nmfb7VDM6jNnhjWk9CdU9ueHc/
我想使用该文件夹来托管我将在其他网站的画廊中显示的图像。
好的,有一种方法,它非常简单,只需要一些设置。我们需要获取一个可以返回 JSONP 的 Google Drive URL,然后针对它运行请求。
生成公共 URL。转到: https ://developers.google.com/apis-explorer/?hl=en_GB#p/drive/v3/drive.files.list
在“q”字段中输入以下内容:
'{your_public_folder_id}' in parents
单击按钮下方的“不使用 OAuth 执行”链接。
您现在应该会看到下面列出的所有文件。它还向您显示GET 请求。这就是您需要的 URL。
复制请求 URL。类似于:https ://www.googleapis.com/drive/v3/files?q= '{your_public_folder_id}'+in+parents&key={YOUR_API_KEY}
现在,您需要生成 API 密钥。转到 Google 控制台:https ://console.developers.google.com/ 在左侧菜单中选择“凭据”。单击“创建凭据”并选择 API 密钥。单击“浏览器密钥”复制生成密钥。
您现在可以执行以下操作:
var api_key = '{YOUR_API_KEY}';
var folderId = '{your_public_folder_id}';
var url = "https://www.googleapis.com/drive/v3/files?q='" + folderId + "'+in+parents&key=" + api_key;
var promise = $.getJSON( url, function( data, status){
// on success
});
promise.done(function( data ){
// do something with the data
}).fail(function(){
});
有一种列出公用文件夹的简单方法 - 只需使用YQL获取 XML 或 JSON 结果。
没有办法在未经身份验证的情况下进行。但是,您可以以任何用户身份进行身份验证并使用drive.children.list()获取列表
一种替代解决方案 - 不使用任何 API 密钥 - 是使用 google app-script 为目录生成一个文本文件,并每天左右将该脚本放在触发器上以在目录更改时刷新它,然后只需制作该 google doc 文件,由 google 应用程序脚本修改,最后带有公共 URL 加/export?format=txt
号,或者用于常规文件,例如https://drive.google.com/uc?export=download&id=INSERT_ID_HERE
,然后无需授权即可在网络上公开访问
这是您可以在 PHP 中执行的操作
<?php
require __DIR__ . '/vendor/autoload.php';
if (php_sapi_name() != 'cli') {
throw new Exception('This application must be run on the command line.');
}
$client = new Google_Client();
// set the location manually
$client->setAuthConfig('credentials.json');
$client->setApplicationName("My Application");
$client->setScopes(Google_Service_Drive::DRIVE_METADATA_READONLY);
$service = new Google_Service_Drive($client);
// Print the names and IDs for up to 100 files.
$optParams = array(
'pageSize' => 100,
'fields' => 'nextPageToken, files(id, name)',
'q' => "'YOUR_FOLDER_ID' in parents",
);
$results = $service->files->listFiles($optParams);
if (count($results->getFiles()) == 0) {
print "No files found.\n";
} else {
print "Files:\n";
foreach ($results->getFiles() as $file) {
printf("%s (%s)\n", $file->getName(), $file->getId());
}
}
对于那些对此请求仍有问题的人,只需使用此模板:https://www.googleapis.com/drive/v3/files?q=%27{YOUR FOLDER ID}%27+in+parents&key={YOUR API KEY}
不带括号。它真的对我有帮助,因为这些“'”字符的问题是拖累
您的扩展 google 驱动器 url 是这样的,因此请使用以下扩展 url 来获取所有以“.html”扩展名结尾的文件。此示例使用 jquery 使用 ajax 调用。
根据您的需要调整脚本。
<script type="text/javascript">
var dir = "https://d95b2b8c54c1827d7a316594f5436a81b5bb2b76.googledrive.com/host/0B1Nmfb7VDM6jNnhjWk9CdU9ueHc/";
var fileextension = ".html";
$.ajax({
//This will retrieve the contents of the folder if the folder is configured as 'browsable'
url: dir,
success: function (data) {
//Lsit all png file names in the page
$(data).find("a:contains(" + fileextension + ")").each(function () {
var filename = this.href.replace(window.location.host, "").replace("http://", "").replace("https://", "");
console.log(filename);
filename = filename.split("/").pop();
$("body").append($("<a href=" + dir + filename + ">" + filename + "</a>"));
});
});
}
});
</script>
这会将所有 Finename(.html) 记录到控制台,并将每个文件名的超链接添加到正文末尾。