質問をすることでしか得られない、回答やアドバイスがある。

15分調べてもわからないことは、質問しよう!

新規登録して質問してみよう
ただいま回答率
85.49%
Google Apps Script

Google Apps ScriptはGoogleの製品と第三者のサービスでタスクを自動化するためのJavaScriptのクラウドのスクリプト言語です。

OAuth 2.0

OAuth 2.0(Open Authorization 2.0)は、APIを通して保護されたリソース(サードパーティのアプリケーション)へアクセスする為のオープンプロトコルです。

JavaScript

JavaScriptは、プログラミング言語のひとつです。ネットスケープコミュニケーションズで開発されました。 開発当初はLiveScriptと呼ばれていましたが、業務提携していたサン・マイクロシステムズが開発したJavaが脚光を浴びていたことから、JavaScriptと改名されました。 動きのあるWebページを作ることを目的に開発されたもので、主要なWebブラウザのほとんどに搭載されています。

Q&A

解決済

1回答

614閲覧

OAuth 2.0 認証をとるためのコードを書きたい

penguin520

総合スコア345

Google Apps Script

Google Apps ScriptはGoogleの製品と第三者のサービスでタスクを自動化するためのJavaScriptのクラウドのスクリプト言語です。

OAuth 2.0

OAuth 2.0(Open Authorization 2.0)は、APIを通して保護されたリソース(サードパーティのアプリケーション)へアクセスする為のオープンプロトコルです。

JavaScript

JavaScriptは、プログラミング言語のひとつです。ネットスケープコミュニケーションズで開発されました。 開発当初はLiveScriptと呼ばれていましたが、業務提携していたサン・マイクロシステムズが開発したJavaが脚光を浴びていたことから、JavaScriptと改名されました。 動きのあるWebページを作ることを目的に開発されたもので、主要なWebブラウザのほとんどに搭載されています。

0グッド

1クリップ

投稿2022/03/29 12:03

お世話になっております。

GASをつかって、BASEのAPIに繋ごうとしています。
OAuth認証をとるコードを書くのが初めてのため、うまくいっていません。
一度チュートリアルのようなもので習得したいのですが、
OAuth 2.0 のリフレッシュトークンを取得するまでの事が書かれている書籍などがあればおしえていただけないでしょうか。
いろいろ探したのですが、接続される側の事が書かれた本は多いのですが、接続しようとする場合の事が書かれたものがみつかりませんでした。

よろしくお願いします。

気になる質問をクリップする

クリップした質問は、後からいつでもMYページで確認できます。

またクリップした質問に回答があった際、通知やメールを受け取ることができます。

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

penguin520

2022/03/30 10:41

ありがとうございます。そのページは参考にしてコードを書いてみたのですが、思うような挙動をしてくれず困っておりまして。まず、そのfreeのコードを使ってfreeで認証が現在とれるのかも確認していません。 Oauthの仕組みが異なることが原因なのか、時代が移ってアップデートされたのか、BASEのAPIがベータ版なので、一工夫いるのか、いろいろ考えたのですが。この壁を乗り越えることができるできないで、かなり違うので必死になっております。 ありがとうございます。
penguin520

2022/04/04 16:00

ありがとうございます!!! 無事、認証まで通りました!! いつか、ビールおごります とりあえず、BASEのAPIが操作できるようになったら、こちらもコードを公開したいと思います。 現在、400エラーが出ていて、エラーメッセージがUnicodeのため読めていない状況です。 手順のqiitaのおかげで、2日はスケジュールが早まりました。 本当にありがとうございます!!
退会済みユーザー

退会済みユーザー

2022/04/06 23:07

認証が通ったようでよかったです。 エラーメッセージがUnicodeになるのは、レスポンスをそのまま表示しているせいかもしれません。 const res = UrlFetchApp.fetch('https://api.thebase.in/~~' ,options); const resObj = JSON.parse(res.getContentText()); console.log(resObj) のように、レスポンスをgetContentText()してそれをJSONにパースすると読めるようになると思います。 (記事の最後に追加しました)
penguin520

2022/04/08 11:30

ありがとうございます!!! 月曜日に、さっそくコードに修正をかけてみます、ぜったいにビールおごらせてください!! とりあえず、BASE API に接続はできているんですが、「スコープが無効です」とのエラーが返ってきて、 https://api.thebase.in/1/items などから、データーを取得できておりません。 通信はできていて、スコープが「なし」とドキュメントにある  https://api.thebase.in/1/users/me からは、レスポンスを取得できているので、なにか足りていないというところで止まっております。 おなじく、スコープ「なし」となっている https://api.thebase.in/1/delivery_companies からもレスポンスは取得できている状況です。 公開API活用ガイド (I・O BOOKS)  という本を中古で注文しまして、勉強しようと思っております。 データさえ やりとりできれば なので、もう一歩がんばろうと思っています。
退会済みユーザー

退会済みユーザー

2022/04/08 11:54 編集

APIの申請画面で、利用権限の「商品情報を見る」「商品情報を更新する」にチェックを入れましたか? https://camo.qiitausercontent.com/88c465d7d63bb46f9b220ec3d829037cc0ea8f49/68747470733a2f2f71696974612d696d6167652d73746f72652e73332e61702d6e6f727468656173742d312e616d617a6f6e6177732e636f6d2f302f323631313132312f61346337636431342d656335392d336335372d613739612d6363633165663530303831642e706e67 の下の方にあるチェック欄です。(画像では見切れていますが、この下に「商品情報を更新する」のチェックもあります) ここにチェックが入っていないと、GAS側で .setScope('read_items write_items'); と設定していても、スコープ無効のエラーになると思います。 現状設定されている利用権限は、 https://developers.thebase.in/apps から、今利用しているアプリのアイコンをクリックすると、見ることができます。 ただし、利用権限は後から変更できないので、もしチェックを入れずに登録してしまっている場合は、新しくアプリを登録申請し、そのときにチェックを入れる必要があります。 参考: https://qiita.com/Qnoir/items/98741f6b4266e6960b9d#%E5%95%86%E5%93%81%E3%82%92%E8%BF%BD%E5%8A%A0%E3%81%99%E3%82%8B%E4%BE%8B # ビールの件ありがとうございます(笑)いつかお願いしますね。
penguin520

2022/04/08 12:37

ありがとうございます。 【・getDriveService_()関数内に、スコープを設定する行を追加。】 たぶん。これをおこなっていません。 >「商品情報を見る」「商品情報を更新する」にチェック これについては、チェックをつけて申請しており、BASEに問い合わせたところ、今日、「仕様に問題はない」と返答をもらっていまして。たんに、スコープを記述していないからだと思います。 ># ビールの件ありがとうございます(笑)いつかお願いしますね。 はい!いつか、お会いすることがあったら、必ず、やきとりとセットで、ごちそうさせてください。 本当に、ありがとうございます!!!
guest

回答1

0

自己解決

9件にわたる 質問への追記・修正依頼でのやりとりにあるように。
qnoirさんの記事を参考にコードを記述し、無事、スプレッドシートの各列に商品の情報を分割して表示するところまで完成いたしました。

JavaScript

1function ItemGet(){ 2 3 //var options = { 4 //"method": "post", 5 //"headers": header, 6 //"muteHttpExceptions" : true, 7 //"payload": JSON.stringify(data) 8 //}; 9 10 var options = { 11 method: 'get', 12 headers: { 13 accept: 'application/json', 14 Authorization: 'Bearer ' + driveService.getAccessToken() 15 } 16 }; 17 18 var response = UrlFetchApp.fetch("https://api.thebase.in/1/items", options); 19 const resObj = JSON.parse(response.getContentText()); 20 const res = JSON.stringify(resObj) 21 Browser.msgBox(driveService.getAccessToken(),Browser.Buttons.OK); 22 Browser.msgBox(res,Browser.Buttons.OK); 23 let items = resObj.items; 24 Browser.msgBox(items.length,Browser.Buttons.OK); 25 26 var spreadsheet = SpreadsheetApp.getActiveSpreadsheet(); 27 var seet1 = spreadsheet.getSheetByName('シート1');//操作シート 28 29 let itemseet = seet1.getRange("B7:Q27").getValues(); 30 31 let i = 0; 32 33 while(i != 20){ 34 itemseet[i][0] = items[i].item_id; 35 itemseet[i][2] = items[i].title; 36 itemseet[i][3] = items[i].detail; 37 itemseet[i][4] = items[i].price; 38 itemseet[i][5] = items[i].proper_price; 39 itemseet[i][6] = items[i].item_tax_type; 40 itemseet[i][7] = items[i].stock; 41 itemseet[i][8] = items[i].visible; 42 itemseet[i][9] = items[i].list_order; 43 itemseet[i][10] = items[i].identifier; 44 itemseet[i][11] = items[i].modified; 45 itemseet[i][12] = items[i].img1_origin; 46 itemseet[i][13] = items[i].img2_origin; 47 itemseet[i][14] = items[i].img3_origin; 48 itemseet[i][15] = items[i].img4_origin; 49 itemseet[i][16] = items[i].img5_origin; 50 itemseet[i][17] = items[i].variations; 51 i++; 52 } 53 54 //以下でシートの場所を変数に格納 55 56 seet1.getRange("B4").setValue(res); 57 seet1.getRange("B7:S27").setValues(itemseet); 58 59}

最も参考になった書籍は、インプレスが出版している
「JavaScriptモダンプログラミング完全ガイド 堅牢なコードを効率的に開発できる!」
でした。本書だけでは、連想配列(オブジェクト)を理解することができなかったため、
秀和システム 出版の 「詳解! Google Apps Script完全入門 [第3版] Kindle版」を併用して読み解決しました。

ありがとうございましたm(_ _)m

投稿2022/04/12 12:10

penguin520

総合スコア345

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

15分調べてもわからないことは
teratailで質問しよう!

ただいまの回答率
85.49%

質問をまとめることで
思考を整理して素早く解決

テンプレート機能で
簡単に質問をまとめる

質問する

関連した質問