先行研究
私の質問は、受信した特定のエラーメッセージを解決する方法を扱っているため、この質問を重複として閉じないでください。私の目的が達成可能かどうかの一般的な質問ではありません。詳細、質問しました。
関連する質問と、それらがここに当てはまらない理由
- 2012 年 7 月 27 日に尋ねたこの質問は、(1) 古すぎる (10 か月後には新しい解決策/方法が存在する可能性がある)、(2) 私が経験している特定のエラー メッセージを扱っていないため、該当しません。
- 2012 年 10 月 12 日に尋ねたこの質問は、同様の理由で当てはまりません。
- 以下のコードは here からコピーされ、hereからフォークされました。これらは、スタック オーバーフローの他の質問/回答交換からそのように参照されているため、おそらく実用的なソリューションです。
目的
プログラム的に、私はしようとしています:
- メールの受信トレイを検索します。
- Excel (.xls) 添付ファイルを検索します。
- これらの .xls ファイルの添付ファイルを Google ドライブにアップロードします。
- アップロード中に、.xls ファイルを Google スプレッドシート ファイル形式に変換します。
問題
processInbox() (この質問の下部に示されているコード) を実行すると、失敗し、以下に示すエラー メッセージが表示されます。
エラーメッセージ
Request failed for returned code 403.
Server response:
{
"error":{
"errors":[
{
"domain":"usageLimits",
"reason":"accessNotConfigured",
"message":"AccessNotConfigured"
}
],
"code":403,
"message":"AccessNotConfigured"
}
}
(line 13, file "DriveUpload")
質問
私は何を間違っていますか?どうすれば修正できますか?たとえば、Google ドライブなどにアクセスするためにプロジェクトをセットアップするのに関連して、APIコンソール
で何か特別なことをする必要がありますか? 私は何が欠けていますか?
注: どのアプリケーションにもまだ oAuth をうまく実装していません。
エラーの原因
13行目
(これは、エラー メッセージによって参照されるコード行です。)
var uploadRequest = UrlFetchApp.fetch("https://www.googleapis.com/upload/drive/v2/files/?uploadType=media&convert=true&key="+key, params); // convert=true convert xls to google spreadsheet
コード
私が作業しているコードの完全な本体を参照用に以下に示します。エラーの原因となっている「13 行目」を抽出し、上で強調表示して、問題の最も近い原因に注目できるようにしました。
DriveUpload.js
function uploadXls(file) {
authorize();
var key = "xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx"; // <-- developer key
var metadata = { title: file.getName() }
var params = {method:"post",
oAuthServiceName: "drive",
oAuthUseToken: "always",
contentType: "application/vnd.ms-excel",
contentLength: file.getBytes().length,
payload: file.getBytes()
};
// convert=true convert xls to google spreadsheet
var uploadRequest = UrlFetchApp.fetch("https://www.googleapis.com/upload/drive/v2/files/?uploadType=media&convert=true&key="+key, params);
var uploadResponse = Utilities.jsonParse(uploadRequest.getContentText());
var params = {method:"put",
oAuthServiceName: "drive",
oAuthUseToken: "always",
contentType: "application/json",
payload: Utilities.jsonStringify(metadata)
};
var metaRequest = UrlFetchApp.fetch("https://www.googleapis.com/drive/v2/files/"+uploadResponse.id+"?key="+key, params)
return DocsList.getFileById(uploadResponse.id);
}
function authorize() {
var oauthConfig = UrlFetchApp.addOAuthService("drive");
var scope = "https://www.googleapis.com/auth/drive";
oauthConfig.setConsumerKey("anonymous");
oauthConfig.setConsumerSecret("anonymous");
oauthConfig.setRequestTokenUrl("https://www.google.com/accounts/OAuthGetRequestToken?scope="+scope);
oauthConfig.setAuthorizationUrl("https://accounts.google.com/OAuthAuthorizeToken");
oauthConfig.setAccessTokenUrl("https://www.google.com/accounts/OAuthGetAccessToken");
}
function processInbox() {
// get all threads in inbox
var threads = GmailApp.getInboxThreads();
for (var i = 0; i < threads.length; i++) {
// get all messages in a given thread
var messages = threads[i].getMessages();
// iterate over each message
for (var j = 0; j < messages.length; j++) {
// log message subject
var subject = messages[j].getSubject()
//Logger.log(subject);
if ( subject == "with xls attach" ){
Logger.log(messages[j].getSubject());
var attach = messages[j].getAttachments()[0];
var name = attach.getName();
var type = attach.getContentType();
//var data = attach.getDataAsString();
Logger.log( name + " " + type + " " );
var file = uploadXls(attach);
SpreadsheetApp.open(file);
}
}
}
};