12

有没有一种方法可以在不使用公开托管的 Goolge Drive 文件夹的授权的情况下获取文件列表?

示例文件夹:https ://googledrive.com/host/0B1Nmfb7VDM6jNnhjWk9CdU9ueHc/

我想使用该文件夹来托管我将在其他网站的画廊中显示的图像。

4

7 回答 7

24

好的,有一种方法,它非常简单,只需要一些设置。我们需要获取一个可以返回 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(){

});
于 2016-07-11T03:47:53.347 回答
3

有一种列出公用文件夹的简单方法 - 只需使用YQL获取 XML 或 JSON 结果。

于 2013-09-02T12:24:04.320 回答
2

没有办法在未经身份验证的情况下进行。但是,您可以以任何用户身份进行身份验证并使用drive.children.list()获取列表

于 2013-08-08T01:10:18.233 回答
2

一种替代解决方案 - 不使用任何 API 密钥 - 是使用 google app-script 为目录生成一个文本文件,并每天左右将该脚本放在触发器上以在目录更改时刷新它,然后只需制作该 google doc 文件,由 google 应用程序脚本修改,最后带有公共 URL 加/export?format=txt号,或者用于常规文件,例如https://drive.google.com/uc?export=download&id=INSERT_ID_HERE,然后无需授权即可在网络上公开访问

于 2020-04-21T11:50:54.137 回答
0

这是您可以在 PHP 中执行的操作

  • 在您的 Google Cloud Console 中创建项目
  • 进入 Navigation Menu > IAM & Admin > Service Accounts 获取服务帐户 JSON 文件
  • 运行以下代码以列出您请求的文件夹 ID 中的所有文件
    <?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());
        }
    }
于 2020-03-16T15:01:27.367 回答
0

对于那些对此请求仍有问题的人,只需使用此模板:https://www.googleapis.com/drive/v3/files?q=%27{YOUR FOLDER ID}%27+in+parents&key={YOUR API KEY}不带括号。它真的对我有帮助,因为这些“'”字符的问题是拖累

于 2019-07-26T09:26:39.130 回答
-1

您的扩展 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) 记录到控制台,并将每个文件名的超链接添加到正文末尾。

于 2015-10-20T10:43:39.313 回答