我希望我的应用能够从预定义的共享公共Google云端硬盘文件夹中读取,而无需用户登录或选择Google帐户。
使用我的桌面浏览器,我在Google云端硬盘上创建了一个公共文件夹,该文件夹已设置为公开。任何有链接的人都可以访问(读取)驱动器,因此无需授权:
在我的Android Studio项目中,我已进入File > Project Structure > Dependencies
并添加了com.google.android.gms:play-services-drive:10.2.0
我现在可以创建new GoogleApiClient.Builder()
。
我查看了各种示例,但在大多数情况下,驱动程序是由Android应用程序创建的。这不是我试图管理的情况。
此问题是关于使用"文件夹ID"访问已公开的驱动器。或者您最初共享和公开文件夹时分配的0B6X74x23H....
。
我已经检查了demo code provided by Google,但据推测,这不适用于公用文件夹,因为它说:
...需要注册OAuth 2.0客户端
至少,我可以使用http-client驱动该过程,在没有身份验证的情况下转到共享链接https://drive.google.com/drive/folders/0B6X74x23Hx7DNE13M0ZIbVI....?usp=sharing
,而不需要跳过箍。但是,当然使用已定义的API并简单地指定公共共享文件夹以列出内容并且如果需要,从公共文件夹下载文件将更加清晰。
当我尝试这段代码时:
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
。但当然,对于公开的文件夹,不需要登录。
答案 0 :(得分:0)
这是 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
}
}