Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/swift/19.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Google drive api 为什么对gapi.client.drive.realtime.get的响应为空?_Google Drive Api - Fatal编程技术网

Google drive api 为什么对gapi.client.drive.realtime.get的响应为空?

Google drive api 为什么对gapi.client.drive.realtime.get的响应为空?,google-drive-api,Google Drive Api,下面是一个成功进行身份验证的页面,然后尝试使用drive.realtime.get方法以三种方式获取现有实时文档的JSON导出。console.log调用的结果在注释中内联显示 id为“EXISTING-file-id”的文件已存在,并且已使用实时api添加了内容。我能够在浏览器中获取JSON导出的数据 返回 {“appId”:“CLIENT-ID”,“revision”:10,“data”:{“ID”:“root”,“type”:“Map”,“value”:{“blah”:{“json”:“a

下面是一个成功进行身份验证的页面,然后尝试使用drive.realtime.get方法以三种方式获取现有实时文档的JSON导出。console.log调用的结果在注释中内联显示

id为“EXISTING-file-id”的文件已存在,并且已使用实时api添加了内容。我能够在浏览器中获取JSON导出的数据 返回

{“appId”:“CLIENT-ID”,“revision”:10,“data”:{“ID”:“root”,“type”:“Map”,“value”:{“blah”:{“json”:“anything”},“key”:{“json”:“val”},“key2”:{“json”:“val2”}}

但是,在Chrome、Firefox和Safari中,对gapi.client.drive.realtime.get和gapi.client.rpcRequest的响应总是空的:
{“result”:{}}

在Chrome和Firefox中,对gapi.client.request的响应主体是一个字符串,当文档内容使用实时api更改时,该字符串会部分更改。这可能是一些gzip内容(响应头包括{content encoding:“gzip”},但我无法压缩它。响应头中的etag也会随着文档的更改而更改

在Safari中,gapi.client.request-response正文包含与Chrome和Firefox(eyJH…)相同的字符串,但导出文档的正确内容显示在控制台日志中,与我使用带有googleapis.com url的浏览器窗口时相同

<!DOCTYPE html><html><head>
  <script type="text/javascript" src="https://apis.google.com/js/api.js"></script>
  <script type="text/javascript">
    var fileId = 'EXISTING-FILE-ID';
    var start = function() {
      // load apis (then call authorize)
      gapi.load('auth:client,drive-realtime', function() {
        gapi.client.load('drive', 'v2', function() {
          authorize();
        });
      });
    };
    // authorize with drive scope
    var authorize = function() {
      gapi.auth.authorize({
        'client_id': 'CLIENT-ID',
        'scope': ['https://www.googleapis.com/auth/drive',
                  'openid'],
        'immediate': true
      }, function() {
        realtimeget(fileId);
      });
    };
    // try to get realtime document export in 3 different ways
    var realtimeget = function(id) {
      gapi.client.drive.realtime.get({
        'fileId': id
      }).execute(function() {
        console.log(JSON.stringify(arguments));
        // {"0":{"result":{}},"1":"[\n {\n  \"id\": \"gapiRpc\",\n  \"result\": {}\n }\n]\n"} 
      });
      gapi.client.rpcRequest('drive.realtime.get', 'v2', {
        'fileId': id
      }).execute(function() {
        console.log(JSON.stringify(arguments));
        // {"0":{"result":{}},"1":"[\n {\n  \"id\": \"gapiRpc\",\n  \"result\": {}\n }\n]\n"} 
      });
      gapi.client.request({
        'path': '/drive/v2/files/' + id + '/realtime',
        'method': 'GET',
      }).execute(function() {
        console.log('gapi.client.request:');
        console.log(arguments[0]);
        // false
        console.log(arguments[1]);
        // {"gapiRequest":{"data":{"body":"eyJhcHBJZCI6IjEwNjY4MTY3MjA5NzQiLCJyZXZpc2lvbiI6MTAsImRhdGEiOnsiaWQiOiJyb290IiwidHlwZSI6Ik1hcCIsInZhbHVlIjp7ImJsYWgiOnsianNvbiI6ImFueXRoaW5nIn0sImtleSI6eyJqc29uIjoidmFsIn0sImtleTIiOnsianNvbiI6InZhbDIifX19fQ==","headers":{"date":"Thu, 08 Aug 2013 19:17:19 GMT","content-encoding":"gzip","x-goog-safety-encoding":"base64","server":"GSE","etag":"\"Q5ElJByAJoL0etObruYVPRipH1k/fDOlc7uypufY3ROxh-RtfV86Kmg\"","content-type":"text/plain; charset=UTF-8","cache-control":"private, max-age=0, must-revalidate, no-transform","x-goog-safety-content-type":"application/json","content-length":"183","expires":"Thu, 08 Aug 2013 19:17:19 GMT"},"status":200,"statusText":"OK"}}} 
      });
    };
  </script>
</head>
<body onload="start();"></body></html>

var fileId='EXISTING-FILE-ID';
var start=function(){
//加载API(然后调用授权)
load('auth:client,drive realtime',function(){
load('drive','v2',function(){
授权();
});
});
};
//使用驱动器作用域进行授权
var authorize=function(){
gapi.auth.authorize({
“客户id”:“客户id”,
'范围':['https://www.googleapis.com/auth/drive',
“openid”],
“立即”:真
},函数(){
realtimeget(fileId);
});
};
//尝试以3种不同的方式获得实时文档导出
var realtimeget=函数(id){
gapi.client.drive.realtime.get({
“文件id”:id
}).execute(函数(){
log(JSON.stringify(参数));
//{“0”:{“result”:{},“1”:“[\n{\n\“id\”:“gapiRpc\”,\n\“result\”:{}\n}\n]\n}”
});
gapi.client.rpcRequest('drive.realtime.get','v2','{
“文件id”:id
}).execute(函数(){
log(JSON.stringify(参数));
//{“0”:{“result”:{},“1”:“[\n{\n\“id\”:“gapiRpc\”,\n\“result\”:{}\n}\n]\n}”
});
gapi.client.request({
“路径”:“/drive/v2/files/”+id+“/realtime”,
'方法':'获取',
}).execute(函数(){
log('gapi.client.request:');
log(参数[0]);
//假的
log(参数[1]);
//{“gapiRequest”:{“数据”:{“正文”:“Eyjhchbjzci6ijjjjy4mty3mja5nzqilcjyzzpc2lvbii6mtasimrhdgeionsiawqioijyb290iiiiiiiiwidhlwzsi6ik1hccisionshbhvlij7imjwgii6imfuexroaw5nin0simtlesi6eyjqc2uidjoidmfsin0simtletiionsianvbi6inzhbdiifx19fq=”,“标题”:“日期”:“2013年8月19日,17:19:19:19:19:19”编码“内容”、“安全性”:“GOOGZ-GZG-GMT-GZG-GMT-GZG”编码:“base64”、“服务器”:“GSE”、“etag”:“Q5ElJByAJoL0etObruYVPRipH1k/FDOLC7UYPUFY3ROSH-RtfV86Kmg\”、“内容类型”:“文本/普通;字符集=UTF-8”、“缓存控制”:“私有,最大年龄=0,必须重新验证,无转换”、“x-goog-safety-content-type”:“应用程序/json”、“内容长度”:“183”、“过期”:“2013年8月8日星期四19:17:19 GMT”、“状态”:200、“状态文本”:“OK”}} 
});
};

如果您只是按原样运行此内联,我认为问题在于您需要等待内容被保存,然后才能执行获取操作

在进行更改后向文档添加侦听器,并在isPending和isSaving都为false时触发realtimeget


看看这段代码,单独的页面加载不会起任何作用,因为它每次都会创建一个新文档。

如果您只是按原样内联运行此代码,我认为问题在于您需要等待内容被保存,然后才能执行get

在进行更改后向文档添加侦听器,并在isPending和isSaving都为false时触发realtimeget


看看这段代码,单独的页面加载没有任何作用,因为它每次都会创建一个新文档。

我们正在研究客户端库的问题,但现在我建议只使用XHR访问导出URL:

var id = '{DOCUMENT ID}';
var accessToken = gapi.auth.getToken()['access_token'];
var xhr = new XMLHttpRequest();
xhr.open('GET', 'https://www.googleapis.com/drive/v2/files/' + id + '/realtime?access_token=' + accessToken);
xhr.onload = function() {
  console.log(xhr.responseText);
};
xhr.onerror = function() {
  // Handle error
};
xhr.send();

我们正在研究客户端库的问题,但目前我建议只使用XHR访问导出URL:

var id = '{DOCUMENT ID}';
var accessToken = gapi.auth.getToken()['access_token'];
var xhr = new XMLHttpRequest();
xhr.open('GET', 'https://www.googleapis.com/drive/v2/files/' + id + '/realtime?access_token=' + accessToken);
xhr.onload = function() {
  console.log(xhr.responseText);
};
xhr.onerror = function() {
  // Handle error
};
xhr.send();

为了简洁起见,我缩减了代码示例。单独的页面加载将跳过
insertfile
,并使用从此代码创建的硬编码
fileId
。生成的实时模型根将看到{key:val}但它仍然不会出现在导出中。如果代码清晰,我可以发布准确的代码。您可以将第20行从
},insertfile);
更改为
},function(){loadrealtime('FILEID-from-FIRST-RUN');})
对于第二次运行时编辑以等待文档保存完成,但响应仍然为空,这有点难以判断发生了什么。如果发布完整的示例,可能会有所帮助。预计本地模型可能与get()的结果不同在一段时间内。在您已授权该文件的窗口中,尝试运行以下命令:{YOUR_file_ID}/realtime?access_token={YOUR_access_token}。(您可以通过调用gapi.auth.getToken()来获取令牌)将该url放在浏览器中返回404。我正在本地运行该url,这可能是个问题吗?为了简洁起见,我减少了代码示例。单独的页面加载将跳过
insertfile
,并使用从该代码创建的硬编码
fileId
。生成的实时模型根将看到