如何获取Google云端硬盘公共托管文件夹的文件列表?

时间:2013-08-08 00:45:34

标签: google-drive-api

是否有办法为公开托管的Goolge云端硬盘文件夹提供不使用授权的文件?

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

我想使用该文件夹托管我将在其他网站的图库中显示的图片。

7 个答案:

答案 0 :(得分:15)

确定有一种方法,它非常简单,只需要一点设置。我们需要获取可以返回JSONP的Google云端硬盘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请求这是您需要的网址。

复制请求网址。例如: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/ 在左侧菜单中选择'凭据'。 点击“创建凭据”#39;并选择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(){

});

答案 1 :(得分:3)

列出公用文件夹的方法很简单 - 只需使用YQL即可获得XML或JSON结果。

答案 2 :(得分:2)

没有办法没有经过验证。但是,您可以作为任何用户进行身份验证,并使用drive.children.list()

获取列表

答案 3 :(得分:0)

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

答案 4 :(得分:0)

这是您可以使用PHP进行的方式

  • 在您的Google Cloud Console中创建项目
  • 进入导航菜单> IAM&Admin>服务帐户
  • ,获取服务帐户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());
        }
    }

答案 5 :(得分:0)

一种不使用任何API密钥的替代解决方案是不使用任何API密钥,而是使用google app-script生成目录的文本文件,并将该脚本每天放置在触发器上,以便在目录更改时刷新它,然后只需简单地制作由google apps脚本修改的google doc文件,并在其末尾加上公共网址加/export?format=txt,对于普通文件,例如https://drive.google.com/uc?export=download&id=INSERT_ID_HERE,然后将其公开未经授权即可在网络上访问

答案 6 :(得分:-1)

您展开的Google驱动器网址为this,因此请使用扩展网址,如下所示,以#34; .html&#34;延期。此示例使用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)记录到控制台,并将每个文件名的超链接添加到正文的末尾。