gpt4 book ai didi

android - 从 Android 应用程序访问公共(public) Google Drive 文件夹而不进行身份验证

转载 作者:行者123 更新时间:2023-12-04 12:01:28 25 4
gpt4 key购买 nike

我希望我的应用能够从预定义的共享公共(public) Google Drive 文件夹中读取数据,而无需用户登录或选择 Google 帐户。
背景/环境
使用我的桌面浏览器,我在我的 Google Drive 上创建了一个设置为公开的公共(public)文件夹。知道链接的任何人都可以访问(读取)驱动器,因此不需要授权:
Desktop screen capture of shared Google Drive folder
在我的 Android Studio 项目中,我进入了 File > Project Structure > Dependencies并添加了 com.google.android.gms:play-services-drive:10.2.0 Android Studio image of Google Play Services as a module dependency
我现在可以创建 new GoogleApiClient.Builder() .
问题
我查看了各种示例,但在大多数情况下,驱动器是由 Android 应用程序创建的。这不是我想要处理的情况。
这个问题是关于访问使用“文件夹 ID”或任何您称之为 0B6X74x23H.... 的公开驱动器的问题。在文件夹最初共享和公开时分配的。
我检查了demo code provided by Google ,但这可能不适用于公用文件夹,因为它说:

...need to register an OAuth 2.0 client


至少,我可以使用 http-client 来驱动这个过程,转到共享链接 https://drive.google.com/drive/folders/0B6X74x23Hx7DNE13M0ZIbVI....?usp=sharing没有身份验证,也不需要跳过箍。但是,当然,使用定义的 API 并简单地指定公共(public)共享文件夹以列出内容并在需要时从公共(public)文件夹下载文件会更简洁。
当我尝试这段代码时:
        Scope publicFolder = new Scope(EXISTING_FOLDER_ID);
mGoogleApiClient = new GoogleApiClient.Builder(mActivity)
.addApi(Drive.API)
.addScope(publicFolder)
.addConnectionCallbacks(this)
.addOnConnectionFailedListener(this)
.build();
mGoogleApiClient.connect();
此方法触发: GoogleApiClient.OnConnectionFailedListener.onConnectionFailed()结果包含 statusCode=SIGN_IN_REQUIRED .但当然,公开文件夹不需要登录。

最佳答案

这是 Jsoup 的解决方法

implementation 'org.jsoup:jsoup:1.11.3'

val url = "https://drive.google.com/drive/folders/xxxxxxxxxxxxxxxxxx" // shared folder link
val doc = Jsoup.connect(url).get()
doc.outputSettings().prettyPrint(false)

val files = doc.select("div.WYuW0e")
for (file in files){
val fileName = file.text()
val fileID = file.attr("data-id")

val downloadLink = "https://drive.google.com/uc?export=download&id=$fileID"
//the downloadLink may open a 'Google Drive can't scan this file for viruses' page

// below we check for the new link
val doc2 = Jsoup.connect(downloadLink).get()
doc2.outputSettings().prettyPrint(false)
val elem = doc2.select("[id='uc-download-link']")
val newLink = if (elem.size != 0){
"https://drive.google.com" + elem.first().attr("href")
} else {
downloadLink
}
}

关于android - 从 Android 应用程序访问公共(public) Google Drive 文件夹而不进行身份验证,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/44143307/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com