14
10

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

More than 1 year has passed since last update.

iCAREAdvent Calendar 2020

Day 21

【中級者向け】HubspotAPIをGASで叩けるようになるまで

Last updated at Posted at 2020-12-21

みなさんHubspot使っていらっしゃいますでしょうか?
さて、今回はHubspotのデータをGoogleスプレッドシートに書き出すための手順を解説します。

Hubspotとは?

カンタンに説明すると、Hubspotとは「顧客管理システム」を中心にして「マーケティング」「セールス」活動を効率化するソフトです。(だよね?)

Hubspot APIについて

開発者ドキュメント

HubSpot API Docs
APIを初めて触るという方向けに解説すると、
APIとは「アプリとアプリをつなぐ仕組み」です。

今回の目的は「Hubspot ⇔ Googleスプレッドシート」の連携をするために使っていきます。

Hubspot APIができること

  • GET(データの取得)
  • POST(データの追加)
  • PUT(データの更新)
  • DELETE(データの削除)

が可能です。

Hubspot APIを使ってみよう

コンタクトを例に動かしてみます。

  1. CRM API | コンタクトにアクセス
  2. 「エンドポイント」を選択

HubspotAPIドキュメントのイメージ

  1. 「テストコール」をクリック

  2. APIキーを取得(アカウント設定から確認可能)

HubspotAPIキー

  1. 「リクエストを送信」

すると画面右中央の「応答」のところにコンタクト情報が出てきたかと思います。
初期設定だとリストで10件分のコンタクトですね。

このようにAPIキーがあれば、情報をHubspot外部から取得できることがわかりました。

Googleスプレッドシートと連携する

続いてGASを使って、スプレッドシート上に情報を表示させたいと思います。

  1. 新規シートを作成
  2. 「ツール > スクリプトエディタ」でGASエディタを開く
contact.gs
function myFunction() {

}

上記のように表示されていると思いますので、その中にコードを書いていきます。

contact.gs
function contacts() {
    //対象スプレッドシートのID
    const spreadsheet = SpreadsheetApp.openById('*********************************');
    const sheetHubspot = spreadsheet.getSheetByName('Hubspot'); //任意のタブ名をつける

    //HubspotのAPI接続設定
    const API_KEY = "**************************"; //先程取得したAPIキー

    //取得する列と行
    const lastColumn = 2; //コンタクトのプロパティの数
    const lastRow = 10; //コンタクトの個数

    let contactList = []; //コンタクトリストの配列
   
    //Hubspotからコンタクトを取得
    let url = "https://api.hubapi.com/crm/v3/objects/contacts/search" + "?archived=false";
    let headers = {"content-type" : "application/json", "authorization" : "Bearer " + API_KEY}
    let payload = {
        "properties": ["firstname,lastname"], //取得するプロパティ
        "limit": lastRow,
    }
    payload = JSON.stringify(payload);
    let options = {
        "method": 'POST',
        "headers": headers,
        "payload": payload,
        "muteHttpExceptions": true
    };
    let response = UrlFetchApp.fetch(url, options);

    //スプレッドシートにマッピング
    if(response){
        //JSON→配列化
        let responseArr = JSON.parse(response.getContentText());

        //連想配列からkeyが"results"の中身を取得
        let arrContacts = responseArr.results;

        //連想配列からkeyが"properties"の中身を配列形式で取得
        let arrProperties = arrContacts.map(obj => obj.properties);

        //コンタクトリストの配列
        for (const elem of arrProperties) {
            //コンタクトの配列
            let contactItem = [];

            //コンタクトの姓
            contactItem.push(elem["lastname"]);

            //コンタクトの名
            contactItem.push(elem["firstname"]);

            //配列に格納
            contactList.push(contactItem);
        }

        //シートへの記入
        sheetHubspot.getRange(2, 1, contactList.length, lastColumn).setValues(contactList);
      }
}

これで10件表示されるはずです!

コードの解説

事前準備

//対象スプレッドシートのID
const spreadsheet = SpreadsheetApp.openById('*********************************');
const sheetHubspot = spreadsheet.getSheetByName('Hubspot'); //任意のタブ名をつける

//HubspotのAPI接続設定
const API_KEY = "**************************"; //先程取得したAPIキー

スプレッドシートのタブ名は好きな名前をつけてOKです。
シートIDとは、https://docs.google.com/spreadsheets/d/**********************************************/の***の部分のことです。

コンタクトを取得

//取得する列と行
const lastColumn = 2; //コンタクトのプロパティの数
const lastRow = 10; //コンタクトの個数

let contactList = []; //コンタクトリストの配列

//Hubspotからコンタクトを取得
let url = "https://api.hubapi.com/crm/v3/objects/contacts/search" + "?hapikey=" + API_KEY;
let headers = {"content-type" : "application/json"}
let payload = {
		"properties": ["firstname,lastname"], //取得するプロパティ
		"limit": lastRow,
}
payload = JSON.stringify(payload);
let options = {
    "method": 'POST',
    "headers": headers,
    "payload": payload,
    "muteHttpExceptions": true
};
let response = UrlFetchApp.fetch(url, options);
  1. 取得する列と行の数を指定します。
  2. Hubspotからコンタクトを取得します。

APIの種類を選択

let url = "https://api.hubapi.com/crm/v3/objects/contacts/search" + "?hapikey=" + API_KEY;
APIの種類を選択。

Hubspotドキュメント

  • POST/crm/v3/objects/contacts
  • GET/crm/v3/objects/contacts/{contactId}

などと書いてあるところを参考にして、実行したい動作を選択します。

このときの「POST」「GET」と書いてあるところと、

"method": 'POST', を合わせます。

プロパティを選択

"properties": ["firstname,lastname"],

Hubspotプロパティの内部値を記述することで、取得可能です。

スプレッドシートへマッピング

//スプレッドシートにマッピング
if(response){
    //JSON→配列化
    let responseArr = JSON.parse(response.getContentText());

    //連想配列からkeyが"results"の中身を取得
    let arrContacts = responseArr.results;

    //連想配列からkeyが"properties"の中身を配列形式で取得
    let arrProperties = arrContacts.map(obj => obj.properties);

    //コンタクトリストの配列
    for (const elem of arrProperties) {
        //コンタクトの配列
        let contactItem = [];

        //責任者の姓
        contactItem.push(elem["lastname"]);

        //責任者の名
        contactItem.push(elem["firstname"]);

        //配列に格納
        contactList.push(contactItem);
    }

    //シートへの記入
    sheetHubspot.getRange(2, 1, contactList.length, lastColumn).setValues(contactList);
  }

取得したデータはJSON形式なので、
配列化します。

また配列形式が連想配列であり、
中身の構成が以下のようになっているため、

{ result: {
 properties: {
  lastname: '山田',
  firstname: '太郎'  
 }
};

propertiesの中身を通常配列の形で取得します。

['山田','太郎']

最後にシートに記入して完成です!

14
10
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
14
10

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?