Google Drive API javascript
问题描述:
我试图使用Google驱动器来列出文件。Google Drive API javascript
使用https://*.com/a/11280257中的答案我发现了一个问题,我找不到原因。
var clientId = '*********.apps.googleusercontent.com';
var apiKey = '##########';
var scopes = 'https://www.googleapis.com/auth/drive';
function handleClientLoad() {
gapi.client.setApiKey(apiKey);
window.setTimeout(checkAuth,1);
}
function checkAuth() {
gapi.auth.authorize({client_id: clientId, scope: scopes, immediate: true},handleAuthResult);
}
function handleAuthResult(authResult) {
var authorizeButton = document.getElementById('authorize-button');
if (authResult && !authResult.error) {
authorizeButton.style.visibility = 'hidden';
makeApiCall();
}
else {
authorizeButton.style.visibility = '';
authorizeButton.onclick = handleAuthClick;
}
}
function handleAuthClick(event) {
gapi.auth.authorize({client_id: clientId, scope: [scopes], immediate: false}, handleAuthResult);
return false;
}
function makeApiCall() {
gapi.client.load('drive', 'v2', makeRequest);
}
function makeRequest()
{
var request = gapi.client.drive.files.list({'maxResults': 5 });
request.execute(function(resp) {
for (i=0; i<resp.items.length; i++) {
var titulo = resp.items[i].title;
var fechaUpd = resp.items[i].modifiedDate;
var userUpd = resp.items[i].lastModifyingUserName;
var userEmbed = resp.items[i].embedLink;
var userAltLink = resp.items[i].alternateLink;
var fileInfo = document.createElement('li');
fileInfo.appendChild(document.createTextNode('TITLE: ' + titulo + ' - LAST MODIF: ' + fechaUpd + ' - BY: ' + userUpd));
document.getElementById('content').appendChild(fileInfo);
}
});
}
我有这样的错误:
Uncaught TypeError: Cannot read property 'files' of undefined
在该行
var request = gapi.client.drive.files.list({'maxResults': 5 });
答
使用
var request = gapi.client.request({
'path': '/drive/v2/files',
'method': 'GET',
'params': {'maxResults': '1'}
});
,而不是
var request = gapi.client.drive.files.list({'maxResults': 5 });
解决了这个问题!
答
代码看起来没问题,并且您正确等待,直到gapi.client.load完成。可能只是加载Drive JS文件或其他问题(可能是错误的JS文件缓存?)的错误。我修改你的例子有点对的jsfiddle运行,看看http://jsfiddle.net/Rbg44/4/为完整的例子:
HTML:
<button id="authorize-button">Authorize</button>
<div id="content">Files:</div>
JS:
var CLIENT_ID = '...';
var API_KEY = '...';
var SCOPES = '...';
function handleClientLoad() {
gapi.client.setApiKey(API_KEY);
window.setTimeout(checkAuth,1);
}
function checkAuth() {
var options = {
client_id: CLIENT_ID,
scope: SCOPES,
immediate: true
};
gapi.auth.authorize(options, handleAuthResult);
}
function handleAuthResult(authResult) {
var authorizeButton = document.getElementById('authorize-button');
if (authResult && !authResult.error) {
authorizeButton.style.visibility = 'hidden';
makeApiCall();
} else {
authorizeButton.style.visibility = '';
authorizeButton.onclick = handleAuthClick;
}
}
function handleAuthClick(event) {
var options = {
client_id: CLIENT_ID,
scope: SCOPES,
immediate: false
};
gapi.auth.authorize(options, handleAuthResult);
return false;
}
function makeApiCall() {
gapi.client.load('drive', 'v2', makeRequest);
}
function makeRequest() {
var request = gapi.client.drive.files.list({'maxResults': 5 });
request.execute(function(resp) {
for (i=0; i<resp.items.length; i++) {
var titulo = resp.items[i].title;
var fechaUpd = resp.items[i].modifiedDate;
var userUpd = resp.items[i].lastModifyingUserName;
var userEmbed = resp.items[i].embedLink;
var userAltLink = resp.items[i].alternateLink;
var fileInfo = document.createElement('li');
fileInfo.appendChild(document.createTextNode('TITLE: ' + titulo +
' - LAST MODIF: ' + fechaUpd + ' - BY: ' + userUpd));
document.getElementById('content').appendChild(fileInfo);
}
});
}
$(document).ready(function() {
$('#authorize-button').on('click', handleAuthClick);
$.getScript('//apis.google.com/js/api.js', function() {
gapi.load('auth:client', handleClientLoad);
});
});
你能在你的浏览器会检查如果在调用gapi.client.load()时发生的请求中存在任何问题,请使用开发工具?
答
你需要这样写:
gapi.client.load('drive', 'v2', null);
+1
这是一个有用的回复。它使谷歌的示例代码工作。 –
感谢分享!这适用于我。我发现奇怪的是,在API文档中作为示例发布的代码无法按预期工作...... – Nielsm