解決済み!GoogleドライブAPIを呼び出すとInvalid_grant OAuth2が返されます
問題は私のコードではありませんでした。 Linuxサーバーで手動で時刻を設定すると、Googleのサーバーが私にアクセスを許可しないということになりました。私は時間を設定することが私のサーバー上で次のコマンドを使用:ntpdate 0.europe.pool.ntp.org
オリジナル問題:
私は現在、Googleスプレッドシートからいくつかの値を読み取りNodeJS、中に小さなスクリプトを開発しようとし、そしてそれを書きますよJSON形式のファイルに変換します。
私のMacでは問題なく機能していますが、Ubuntu 14.04.4にアップロードした後、「google-spreadsheet」モジュールの機能の一部が動作しておらず、定義されていません。
ノードモジュールに問題があるかどうか、または自分のコードに問題があるかどうかは100%確信していません。
コールを行うコード:
var GoogleSpreadsheet = require('google-spreadsheet');
var fs = require('fs');
function scheduleBidding(sheetSecretKey) {
this.sheetKey = sheetSecretKey;
}
scheduleBidding.prototype.getBiddingHeaders = function (filePrefix) {
var doc = new GoogleSpreadsheet(this.sheetKey);
var sheet;
var daysSinceYearStart = getDaysIntoYear();
var localSheetKey = this.sheetKey;
var biddingObject = new Object();
var filePath = filePrefix+"staticConfigFiles/googleApiKey";
console.log(filePath);
fs.readFile(filePath, 'utf8', function (err, data) {
creds = JSON.parse(data);
console.log(creds);
doc.useServiceAccountAuth(creds, function (err) {
if(err) throw err;
doc.getInfo(function (err, info) {
if(err) throw err;
console.log(info);
sheet = info.worksheets[0];
var numberOfColumns = sheet.colCount;
sheet.getCells({
'min-row': 1,
'max-row': 1,
'min-col': 2,
'max-col': numberOfColumns,
'return-empty': true
}, function(err, cells) {
sheet.getRows({
offset: 1,
limit: 366
}, function(err, rows){
yesterdaysBid = rows[daysSinceYearStart-2];
todaysBidding = rows[daysSinceYearStart-1];
cells.forEach(function (listItem, indexArray) {
columnName = cells[indexArray].value;
var functionName = String(columnName.toLowerCase());
functionName = functionName.replace(/\s/g, '').replace(":", "");
biddingObject[columnName] = {
"yesterdaysBid": yesterdaysBid[functionName],
"todaysBid": todaysBidding[functionName]
};
newFileName = filePrefix+"scheduleData/"+localSheetKey+".json";
prettyJson = JSON.stringify(biddingObject);
fs.writeFile(newFileName, prettyJson);
console.log("ScheduleBidding JSON has been updated");
});
});
});
});
});
});
function getDaysIntoYear() {
var todaysDate = new Date();
var daysAgo;
//
returnDays = parseInt(todaysDate.getDate())+daysAgo;
return returnDays;
}
};
私はUbuntuのサーバー上でスクリプトを実行したときに、私は次の例外を受け取る:助けを事前に
Error: invalid_grant
www-0 at Request._callback (/SomePath/node_modules/google-spreadsheet/node_modules/google-auth-library/node_modules/gtoken/lib/index.js:215:34)
www-0 at Request.self.callback (/SomePath/node_modules/google-spreadsheet/node_modules/google-auth-library/node_modules/gtoken/node_modules/request/request.js:187:22)
www-0 at Request.EventEmitter.emit (events.js:98:17)
www-0 at Request.<anonymous> (/SomePath/node_modules/google-spreadsheet/node_modules/google-auth-library/node_modules/gtoken/node_modules/request/request.js:1044:10)
www-0 at Request.EventEmitter.emit (events.js:95:17)
www-0 at IncomingMessage.<anonymous> (/SomePath/node_modules/google-spreadsheet/node_modules/google-auth-library/node_modules/gtoken/node_modules/request/request.js:965:12)
www-0 at IncomingMessage.EventEmitter.emit (events.js:117:20)
www-0 at _stream_readable.js:920:16
www-0 at process._tickDomainCallback (node.js:459:13)
感謝を。情報がない場合はお知らせください。
'npm install'を正しく実行しましたか?あなたのように見えます。 Macにインストールしたバージョンを確認し、そのバージョンに正確にマッチするように 'package.json'エントリを変更してください。 – david
はい。それが役に立ちそうなら、package.jsonファイルを投稿できますか?私はnanoコマンドで/node_modules/google-spreadsheet/index.jsで使用するはずの機能を見ることはできますが、 – Thyregod
google-spreadsheetモジュールのバージョンと、package.jsonにリストされているバージョンが一致しています。 – Thyregod