未经验证的使用每日限额超过。继续使用需要注册错误 [英] Daily Limit for Unauthenticated Use Exceeded. Continued use requires signup error

查看:371
本文介绍了未经验证的使用每日限额超过。继续使用需要注册错误的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧!

问题描述

我试图使用node.js从谷歌驱动器下载文件。这是我第一次尝试使用谷歌SDK,所以我只是按照说明并从样本中复制代码。我可以成功地从我的gdrive中存在的文件中获取元数据,但每当我尝试下载文件时,都会抛出错误。

  var fs = require(请参阅下面的代码片段,以下是该文档中提供的示例。 'FS'); 
var readline = require('readline');
var google = require('googleapis');
var googleAuth = require('google-auth-library');
var request = require(request);

//如果修改这些范围,请删除先前保存的凭证
// at〜/ .credentials / drive-nodejs-quickstart.json
// var SCOPES = [' https://www.googleapis.com/auth/drive.metadata.readonly'];
var SCOPES = ['https://www.googleapis.com/auth/drive'];
/ * var TOKEN_DIR =(process.env.HOME || process.env.HOMEPATH ||
process.env.USERPROFILE)+'/.credentials/'; * /
var TOKEN_DIR = process.env.USERPROFILE +'/.credentials/';
var TOKEN_PATH = TOKEN_DIR +'drive-nodejs-quickstart.json';

//从本地文件加载客户机密。
fs.readFile('client_secret.json',function processClientSecrets(err,content){
if(err){
console.log('Error loading client file:'+ err) ;
return;
}
//授权客户端使用加载的凭证,然后调用
// Drive API
authorize(JSON.parse(content) ,listFiles);
});

/ **
*用给定的凭证创建一个OAuth2客户端,然后执行
*给定的回调函数。
*
* @param {对象}凭据授权客户端凭据。
* @param {function} callback与授权客户端进行通话的回调。
* /
函数authorize(credentials,callback){
var clientSecret = credentials.installed.client_secret;
var clientId = credentials.installed.client_id;
var redirectUrl = credentials.installed.redirect_uris [0];
var auth = new googleAuth();
var oauth2Client = new auth.OAuth2(clientId,clientSecret,redirectUrl);

//检查我们以前是否存储过令牌。
fs.readFile(TOKEN_PATH,function(err,token){
if(err){
getNewToken(oauth2Client,callback);
} else {
oauth2Client。 credentials = JSON.parse(token);
callback(oauth2Client);
}
});
}

/ **
*在提示用户授权后获取并存储新令牌,然后
*使用授权的OAuth2客户端执行给定的回调。
*
* @param {google.auth.OAuth2} oauth2Client获取令牌的OAuth2客户端。
* @param {getEventsCallback}回调与授权的
*客户端进行通话的回调。
* /
函数getNewToken(oauth2Client,回调){
var authUrl = oauth2Client.generateAuthUrl({
access_type:'offline',$ b $ scope:SCOPES
});
console.log('通过访问此URL授权此应用程序:',authUrl);
var rl = readline.createInterface({
input:process.stdin,
output:process.stdout
});
rl.question('从该页面输入代码:',function(code){
rl.close();
oauth2Client.getToken(code,function(err,token) {
if(err){
console.log('尝试检索访问令牌时发生错误,错误);
返回;
}
oauth2Client.credentials = token;
storeToken(token);
callback(oauth2Client);
});
});
}

/ **
*将令牌存储到磁盘将在以后的程序执行中使用。
*
* @param {Object}标记要存储到磁盘的标记。
* /
函数storeToken(令牌){
尝试{
fs.mkdirSync(TOKEN_DIR);
} catch(err){
if(err.code!='EEXIST'){
throw err;
}
}
fs.writeFile(TOKEN_PATH,JSON.stringify(token));
console.log('Token stored to'+ TOKEN_PATH);
}

/ **
*列出最多10个文件的名称和ID。
*
* @param {google.auth.OAuth2} auth一个授权的OAuth2客户端。
* /
函数listFiles(auth){
var service = google.drive('v3');
service.files.list({
auth:auth,
pageSize:10,
fields:nextPageToken,files(id,name)
},function (err,response){
if(err){
console.log('API返回错误:'+ err);
return;
}
var files = response.files;
if(files.length == 0){
console.log('No files found。');
} else {
for( var i = 0; i< files.length; i ++){
var file = files [i];
if(file.name.indexOf('Expense')> -1){
downloadFile(file.id);
}


}
}
});
}

/ **
*下载文件内容。
*
* @param {File}文件Drive File实例。
* @param {Function}回调函数在请求完成时调用。
* /


函数downloadFile(fileId){
// file ['exportLinks'] ['application / pdf'];

// var fileId ='0BwwA4oUTeiV1UVNwOHItT0xfa2M';
var service = google.drive('v3');
var dest = fs.createWriteStream('/ test.doc');
service.files.get({
fileId:fileId,
alt:'media'
})
.on('end',function(){
console.log('Done');
})
.on('error',function(err){
console.log('Error during download',err) ;
})
.pipe(dest);

}

我只在最近一小时内尝试了17-20个请求并不认为我已经使用了所有的配额。我已经检查过我的项目中启用了GDrive api。请帮忙。

解决方案

基于此文档,错误403意味着您已达到Google Drive API的最高请求率。限制根据请求的种类而有所不同。建议的操作是批量处理。尝试减少客户端的HTTP连接数。



另一个解决方法是在开发者控制台中检查Google+ API的状态。它应该设置为 ON 。打开后等待几分钟,并确保您获得新的令牌。



检查以下相关的SO问题:


I am trying to download a file from google drive using node.js. This is my first attempt to use google sdks so I just followed the instructions and copied the code from the samples. I can succesfully get the metadata from the files present in my gdrive , but whenever I am trying to download a file, it is throwing the error. Please find ahead the code snippet I am using below which is nothing but the examples provided in the documentation.

            var fs = require('fs');
            var readline = require('readline');
            var google = require('googleapis');
            var googleAuth = require('google-auth-library');
            var request = require("request");

            // If modifying these scopes, delete your previously saved credentials
            // at ~/.credentials/drive-nodejs-quickstart.json
            //var SCOPES = ['https://www.googleapis.com/auth/drive.metadata.readonly'];
            var SCOPES = ['https://www.googleapis.com/auth/drive'];
            /* var TOKEN_DIR = (process.env.HOME || process.env.HOMEPATH ||
                process.env.USERPROFILE) + '/.credentials/'; */
            var TOKEN_DIR = process.env.USERPROFILE + '/.credentials/'; 
            var TOKEN_PATH = TOKEN_DIR + 'drive-nodejs-quickstart.json';

            // Load client secrets from a local file.
            fs.readFile('client_secret.json', function processClientSecrets(err, content) {
              if (err) {
                console.log('Error loading client secret file: ' + err);
                return;
              }
              // Authorize a client with the loaded credentials, then call the
              // Drive API.
              authorize(JSON.parse(content), listFiles);
            });

            /**
             * Create an OAuth2 client with the given credentials, and then execute the
             * given callback function.
             *
             * @param {Object} credentials The authorization client credentials.
             * @param {function} callback The callback to call with the authorized client.
             */
            function authorize(credentials, callback) {
              var clientSecret = credentials.installed.client_secret;
              var clientId = credentials.installed.client_id;
              var redirectUrl = credentials.installed.redirect_uris[0];
              var auth = new googleAuth();
              var oauth2Client = new auth.OAuth2(clientId, clientSecret, redirectUrl);

              // Check if we have previously stored a token.
              fs.readFile(TOKEN_PATH, function(err, token) {
                if (err) {
                  getNewToken(oauth2Client, callback);
                } else {
                  oauth2Client.credentials = JSON.parse(token);
                  callback(oauth2Client);
                }
              });
            }

            /**
             * Get and store new token after prompting for user authorization, and then
             * execute the given callback with the authorized OAuth2 client.
             *
             * @param {google.auth.OAuth2} oauth2Client The OAuth2 client to get token for.
             * @param {getEventsCallback} callback The callback to call with the authorized
             *     client.
             */
            function getNewToken(oauth2Client, callback) {
              var authUrl = oauth2Client.generateAuthUrl({
                access_type: 'offline',
                scope: SCOPES
              });
              console.log('Authorize this app by visiting this url: ', authUrl);
              var rl = readline.createInterface({
                input: process.stdin,
                output: process.stdout
              });
              rl.question('Enter the code from that page here: ', function(code) {
                rl.close();
                oauth2Client.getToken(code, function(err, token) {
                  if (err) {
                    console.log('Error while trying to retrieve access token', err);
                    return;
                  }
                  oauth2Client.credentials = token;
                  storeToken(token);
                  callback(oauth2Client);
                });
              });
            }

            /**
             * Store token to disk be used in later program executions.
             *
             * @param {Object} token The token to store to disk.
             */
            function storeToken(token) {
              try {
                fs.mkdirSync(TOKEN_DIR);
              } catch (err) {
                if (err.code != 'EEXIST') {
                  throw err;
                }
              }
              fs.writeFile(TOKEN_PATH, JSON.stringify(token));
              console.log('Token stored to ' + TOKEN_PATH);
            }

            /**
             * Lists the names and IDs of up to 10 files.
             *
             * @param {google.auth.OAuth2} auth An authorized OAuth2 client.
             */
            function listFiles(auth) {
              var service = google.drive('v3');
              service.files.list({
                auth: auth,
                pageSize: 10,
                fields: "nextPageToken, files(id, name)"
              }, function(err, response) {
                if (err) {
                  console.log('The API returned an error: ' + err);
                  return;
                }
                var files = response.files;
                if (files.length == 0) {
                  console.log('No files found.');
                } else {
                  for (var i = 0; i < files.length; i++) {
                    var file = files[i];
                    if(file.name.indexOf('Expense') > -1) {
                        downloadFile(file.id);
                    }


                  }
                }
              });
            }

            /**
             * Download a file's content.
             *
             * @param {File} file Drive File instance.
             * @param {Function} callback Function to call when the request is complete.
             */


            function downloadFile(fileId) {
            //file['exportLinks']['application/pdf'];

              //var fileId = '0BwwA4oUTeiV1UVNwOHItT0xfa2M';
                    var service = google.drive('v3');
                    var dest = fs.createWriteStream('/test.doc');
                    service.files.get({
                       fileId: fileId,
                       alt: 'media'
                    })
                    .on('end', function() {
                      console.log('Done');
                    })
                    .on('error', function(err) {
                      console.log('Error during download', err);
                    })
                    .pipe(dest);

            }

I have only tried 17-20 requests in the last hour and don't think I have used all my quotas. I have checked that the GDrive api is enabled in my project. Please help.

解决方案

Based from this documentation, error 403 means that you have reached Google Drive API's maximum request rate. The limit varies depending on the kind of requests. The suggested action is to Batch the requests. Try to reduce the number of HTTP connections your client has to make.

Another workaround is to check the status for Google+ API in developer console. It should be set to ON. Wait for a few minutes after turning on, and ensure that you get a fresh token.

Check these related SO questions:

这篇关于未经验证的使用每日限额超过。继续使用需要注册错误的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!

查看全文
相关文章
登录 关闭
扫码关注1秒登录
发送“验证码”获取 | 15天全站免登陆