実現したいこと
ネットワーク関連はまだ始めたばかりなのでわからないことが多いですが宜しくおねがいします。
実現したいことはGoogleAppsScriptを利用してprivateなScrapBoxのデータを取得することです。
データを取得するには"https://scrapbox.io//api/pages/:projectName/:pageTitle/text"にアクセスする必要がありますが、privateなため認証が必要です。
問題
ScrapBoxはGoogleのOpenIDを利用しているためどこにIDやパスワードをリクエストしたら良いのかわかりません。
最初は"https://scrapbox.io/google"にリクエストを送りましたが、
https://scrapbox.io/google のリクエストに失敗しました(エラー: 403)。サーバー応答の一部: {"message":"Your session has been expired. Please reload. (CSRF Token does not match)"}
というエラーメッセージが出ました。
ブラウザのツールから"https://accounts.google.com/o/oauth2/v2/auth?prompt=select_account&response_type=code&redirect_uri=https%3A%2F%2Fscrapbox.io%~"(長いため省略)が取り出せました。
しかしここにリクエストを送ったところ
- That’s an error.
Error: invalid_request
Parameter not allowed for this message type: password
というエラーメッセージが出たためpasswordを抜いたものをリクエストしたら200が帰ってきました。
当然ですが認証はされていません。
できたこと
ブラウザのクッキーを取り出してGASに保存し、scrapBoxのデータを取り出せるか・・・こちらは取り出すことができました
ソースコード
Javascript
1function myFunction() { 2 var payload = { 3 "EmailAddress" : "xxx@gmail.com", 4 "password" : "yyyy" 5 } 6 // POSTオプション 7 var options = { 8 "method" : "POST", 9 "payload" : payload, 10 "followRedirects" : true, 11 "muteHttpExceptions" : true 12 } 13// var response = UrlFetchApp.fetch("https://scrapbox.io/google"); //Error403 14 var response = UrlFetchApp.fetch("https://accounts.google.com/o/oauth2/v2/auth?prompt=select_account&response_type=code&redirect_uri=https%3A%2F%2Fscrapbox.io%2Fauth%2Fgoogle%2Fcallback&~",options); 15 Logger.log(response.getResponseCode()); 16 Logger.log(response) 17 18 19 var cookies = response.getHeaders()["Set-Cookie"]; 20 var headers = { "Cookie" : cookies }; 21 var options = { 22 method : "get", 23 headers : headers, 24 followRedirects: true, 25 }; 26 27 var responseSB = UrlFetchApp.fetch("https://scrapbox.io/api/pages/zzzzz/wwwwww/text",options); 28 Logger.log(responseSB);//Error401 29 30}
回答1件
あなたの回答
tips
プレビュー