[GAS] Hubspot API を使う (OAuth)

GAS (Google Apps Script) から Hubspot の API を使いたくて、ググって下記の記事を参考にしました。

しかし、若干つまづいたので、上記の記事を補足する形でメモを残します。

GASで OAuth認証の APIを使う方法といえば、以前にこちらの記事でMF請求書APIを試したことがありました。この一連の記事はとても丁寧に書かれていて、GASの OAuthライブラリの使いかたなどがよく分かりますので、まずはこちらを読んでおくと、上記の Hubspot用のサンプルコードも理解しやすいと思います。

さて、Hubspot APIの使いかたですが、まず以下のページでHubspot開発者アカウントを作成します。これは通常のHubspotのユーザーアカウントとは違います。

ちなみに、これを一度作ったあとは、普通のユーザーとして Hubspotを使おうとしてログインするときもどちらのアカウントを使うのかの選択画面が毎回出るようになってしまって鬱陶しいです。笑

開発者アカウントをつくったら、「アプリを管理」の画面でアプリ(私の場合はGAS)を登録します。

この画面で右上の [アプリを作成] ボタンをクリックし、アプリ名を付けて、「認証」タブでクライアントID(「顧客ID」笑)とクライアントシークレットを得ます。
「リダイレクトURL」の欄には、自分のGASのコールバック関数のURLを記入します。コールバック関数のURLを得るには、自分のGASにこんな関数を作って実行するとデバッグ出力されます。

/**
 * コールバック関数のURLをデバッグ出力する。
 */
function showCallBackUrl() {
  const scriptId = ScriptApp.getScriptId();
  console.log(`コールバック関数のURL: https://script.google.com/macros/d/${scriptId}/usercallback`);
}

続いて、「認証」タブの下の方にある「スコープ」を設定します。自分が使いたいAPIに対応するスコープにチェックを入れます。冒頭の note記事やその他の巷の多くの例ではスコープに「contacts」を指定しているのですが、私の「認証」タブには「contacts」は無いので、変わったのかもしれません。代わりに、crm.objects.contacts.read, crm.schemas.contacts.read, crm.lists.read あたりを選択しました。そして、冒頭の note記事にあるGASのコードの冒頭で設定している定数 SCOPE もそれに合わせて変更します。複数項目指定するときは、以下のように間にスペースを入れます。

var SCOPE = 'crm.lists.read crm.objects.contacts.read';

そして、一度 OAuth認証を通す必要があります。「認証」タブにある「インストールURL(OAuth)」がそれで、「完全なURLをコピー」ボタンを押してクリップボードにコピーされるURLにブラウザでアクセスすると認証画面が表示されます。ここで前述のアカウント選択になるので、開発者用アカウントではなくユーザーアカウントの方を選択します。すると認証が行われて、先に指定したGASのコールバック関数が呼ばれるのですが、残念ながら「現在、ファイルを開くことができません。」というツレナイ画面が表示されてしまいます。しかもその下に変な広告めいた文章が表示されるのがさらに悲しいです。

この画面が表示される原因は、「完全なURLをコピー」でコピーされるURLが、その名に反して不完全で、「state=…」のオプションが付いていないからです。ここでは、「完全なURLをコピー」が生成するURLではなく、上記 note記事のサンプルコードの中にある authenticate() 関数を実行したときにデバッグ出力される URLを使用するとうまく行きます。上手くいくと、「Success!」という文字のみが表示される画面になりますので、これが出たらブラウザのタブは閉じて構いません。

ここまで来れば、あとはサンプルコードの exeFunc() を実行すれば任意のリストの中身を取得することができるなど、Hubspotのデータにアクセスすることができるようになります。

あと蛇足ですが、上記の記事のサンプルコードでは、転置用ライブラリとしてUnderscoreを使っていますが、UnderscoreのライブラリIDは以下に変わっています。

Underscoreライブラリ
1PcEHcGVC1njZd8SfXtmgQk19djwVd2GrrW1gd7U5hNk033tzi6IUvIAV


この記事が気に入ったらサポートをしてみませんか?