Google Drive API从V2更改为V3,从响应中删除revision.items。这些项目有一个url列表,是.txt,.pdf等文件。(我使用的是直接的HTTP协议,没有包装器)。 在V3中似乎没有办法做到这一点。但是有一个?alt = media参数,它应该返回一个文件,但尝试403时会出错403。
任何线索?
https://developers.google.com/drive/v3/reference/revisions/get
答案 0 :(得分:2)
对于Google文档,由于无法使用Drive API v3检索修订文件,因此我使用新的解决方法对其进行了修改。新的解决方法是使用Drive API v2。 Drive API v2的drive.revisions.get
不仅可以检索修订列表,还可以检索导出链接。我想到了导出链接的使用。这成为当前形势的新解决方案。
此示例使用修订版ID下载电子表格。
curl -sSLG \
-H 'Authorization: Bearer ### Access token ###' \
"https://www.googleapis.com/drive/v2/files/### FileID ###/revisions?fields=items(exportLinks%2Cid)"
curl -sSLG \
-H 'Authorization: Bearer ### Access token ###' \
"https://docs.google.com/spreadsheets/export?id=### FileID ###&revision=### revision number ###&exportFormat=xlsx" \
-o outputfilename.xlsx
参考:https://developers.google.com/drive/v2/reference/revisions/get
在Google文档除外的情况下,修订ID只是文件ID。因此,您不仅可以使用修订版ID下载(模式1),还可以下载普通文件(模式2)。
模式1:
curl -sSLG \
-H 'Authorization: Bearer ### Access token ###' \
"https://www.googleapis.com/drive/v3/files/### FileID ###/revisions/### RevisionID ###?alt=media" \
-o outputfilename
模式2:
curl -sSLG \
-H 'Authorization: Bearer ### Access token ###' \
"https://www.googleapis.com/drive/v3/files/### RevisionID ###?alt=media" \
-o outputfilename
参考:https://developers.google.com/drive/v3/reference/revisions/get
答案 1 :(得分:0)
目前在驱动器v3上似乎不可行。
修订API适用于非谷歌文档/幻灯片/表格(二进制文件),如上所述。对于原生谷歌文档文件,如果你尝试它会抱怨使用导出端点(文件/ id / export)。尝试导出结束点会导致错误,例如
"error": {
"errors": [
{
"domain": "global",
"reason": "invalidParameter",
"message": "Invalid field selection revisions=11175",
"locationType": "parameter",
"location": "fields"
}
],
"code": 400,
"message": "Invalid field selection revisions=11175"
}
我试过像“rev”,“revision”,“revisions”这样的字段而没有运气。 我在这里打开了一个功能请求https://issuetracker.google.com/u/1/issues/62825716
答案 2 :(得分:0)
我使用 this sample app 处理 OAUTH2 任务。
然后我添加了这个功能来进行驱动器调用。 exportLinks 是否为空无关紧要;只需构建如下 URL。
private async Task GetRevisionRedirect(string accessToken, string fileId, string revId)
{
Log("Making API Call to get revision binary stream...");
// builds the request
string userinfoRequestUri = "https://docs.google.com/feeds/download/documents/export/Export?id=" + fileId + "&revision=" + revId + "&exportFormat=docx";
// sends the request
HttpWebRequest userinfoRequest = (HttpWebRequest)WebRequest.Create(userinfoRequestUri);
userinfoRequest.Method = "GET";
userinfoRequest.Headers.Add(string.Format("Authorization: Bearer {0}", accessToken));
userinfoRequest.ContentType = "application/x-www-form-urlencoded";
userinfoRequest.Accept = "Accept=text/html,application/xhtml+xml,application/xml;q=0.9,*/*;q=0.8";
// gets the response
WebResponse userinfoResponse = await userinfoRequest.GetResponseAsync();
using (StreamReader userinfoResponseReader = new StreamReader(userinfoResponse.GetResponseStream()))
{
// reads response body
System.IO.Stream streamDoc = userinfoResponseReader.BaseStream;
var fileStream = File.Create("d:\\test.docx");
streamDoc.CopyTo(fileStream);
fileStream.Flush();
fileStream.Close();
}
}