対象プランOFFLINEBUSINESSPRO
実装にかかる想定時間:約30分
イベント毎に設定する必要がある:No
EventHubで作成したイベントのデータを一覧化してスプレッドシートに書き出すことで、開催したイベント全ての登録者数や参加者数、集客目標に対する目標達成率などの数値を分析することができます。
イベント毎に数値を管理画面へ見に行く必要がなく、リアルタイムにスプレッドシートから確認することができますので、ぜひご活用ください。
1. APIキーを発行する
まず初めに、APIキーの発行方法を参考にAPIキーを発行してください。
こちらのキーは手順3のGoogle Apps Scriptに設定します。一度発行したら二度と表示されませんので、発行時 メモに控えるようにしてください。
2. スプレッドシートを準備する
次に、新規作成からスプレッドシートを1つ作成し、以下のシートを準備してください。
EventList
A1〜L1(水色部分)に以下と同様の文言を設定し、シートの名称を「EventList」に変更しましょう。
3. Google Apps ScriptにScriptを入力する
次に、Scriptを準備します。
① [拡張機能]から[Apps Script]をクリックします。
② 初期値に設定されているfunction myFunction() {} を削除し、以下のサンプルコードを入力します。
サンプルコード
赤文字:"EventHubから発行したAPIキー"に手順1で発行したAPIキーを、"スプレッドシートID"にはシートのURLから取得できるIDを挿入してください。
※ GASに埋め込んだAPIキーの取り扱いには十分ご注意ください。APIを含んだScriptの共有をすると、悪意あるユーザーにEventHubの操作を実行される可能性があります。
青文字:解説文をいれています。//コメントアウトで記載しているため、Scriptにそのまま記載しても問題なく実行されますが、必要ない場合は削除しても問題ございません。
//ユーザー情報取得(userCount)
function getUserList(API_KEY,eventKey,offset){
const requestUrl = 'https://api.eventhub.jp/v1/users/' + eventKey + '?offset=' + offset + '&limit=100'
const headers = {
'X-API-KEY': API_KEY,
'Content-Type': 'application/json'
};
const data = {
"userType": ["participant"]
};
const options = {
"method" : "post",
"headers" : headers,
"payload": JSON.stringify(data),
};
const response = UrlFetchApp.fetch(requestUrl, options);
const responseJson = JSON.parse(response.getContentText());
return responseJson;
}
//ユーザー情報取得(attended)
function getAttendedUserList(API_KEY,eventKey,offset){
const requestUrl = 'https://api.eventhub.jp/v1/users/' + eventKey + '?offset=' + offset + '&limit=100'
const headers = {
'X-API-KEY': API_KEY,
'Content-Type': 'application/json'
};
const data = {
"userType": ["participant"],
"attended": true
};
const options = {
"method" : "post",
"headers" : headers,
"payload": JSON.stringify(data),
};
const response = UrlFetchApp.fetch(requestUrl, options);
const responseJson = JSON.parse(response.getContentText());
return responseJson;
}
//イベント詳細情報取得
function getEventDetails(API_KEY,eventKey){
const requestUrl = 'https://api.eventhub.jp/v1/events/' + eventKey + '?lang=default'
const headers = {
'X-API-KEY': API_KEY,
}
const options = {
"method" : "get",
"headers" : headers,
}
const response = UrlFetchApp.fetch(requestUrl, options)
const responseJson = JSON.parse(response.getContentText())
return responseJson
}
function clearSheetData(sheet) {
var lastRow = sheet.getLastRow();
if (lastRow > 1) {
sheet.getRange(2, 1, lastRow - 1, sheet.getLastColumn()).clearContent();
}
}
// イベントリスト取得
function getEvents() {
const requestUrl = 'https://api.eventhub.jp/v1/events?limit=100'
const API_KEY = 'EventHubから発行したAPIキー';
const headers = {
'X-API-KEY': API_KEY,
}
const options = {
"method" : "get",
"headers" : headers,
}
const response = UrlFetchApp.fetch(requestUrl, options)
const responseJson = JSON.parse(response.getContentText())
// スプレッドシート取得
const SHEET_ID = "スプレッドシートID";
const ss = SpreadsheetApp.openById(SHEET_ID)
const sheet = ss.getSheetByName('EventList') // シート名
clearSheetData(sheet); // シートのデータをクリア
let count = 2
for (event of responseJson.events) {
if (!event.isTestEvent) {
const userList = getUserList(API_KEY,event.eventKey, 0); // イベントごとに登録したユーザー情報を取得
const userCount = userList.userCount;
const attendedUserList = getAttendedUserList(API_KEY,event.eventKey, 0); // イベントごとに参加したユーザー情報を取得
const attendedUserCount = attendedUserList.userCount;
const eventDetails = getEventDetails(API_KEY,event.eventKey); // イベントごとに詳細情報を取得
// スプレッドシートにデータを書き込む
sheet.getRange(count, 1).setValue("https://cms.eventhub.jp/e/"+ event.eventKey + "/dashboard")
sheet.getRange(count, 2).setValue(event.eventKey);
sheet.getRange(count, 3).setValue(event.name);
const startAtPublish = Utilities.formatDate(new Date(event.startAt), 'JST', "yyyy-MM-dd HH:00");
sheet.getRange(count, 4).setValue(startAtPublish);
const endAtPublish = Utilities.formatDate(new Date(event.endAt), 'JST', "yyyy-MM-dd HH:00");
sheet.getRange(count, 5).setValue(endAtPublish);
let eventStatus; //イベントのステータスを表示させる
const today = new Date();
const startAtDate = new Date(event.startAt);
const endAtDate = new Date(event.endAt);
if (endAtDate < today) {
eventStatus = "開催終了";
} else if (startAtDate > today) {
eventStatus = "準備中";
} else {
eventStatus = "開催中";
}
sheet.getRange(count, 6).setValue(eventStatus);
sheet.getRange(count, 7).setValue(eventDetails.eventType);
sheet.getRange(count, 8).setValue(eventDetails.targetUserCount);
sheet.getRange(count, 9).setValue(userCount);
let targetUserCountRate; //集客達成率の母数が0だったら0%を返し、それ以外は数値を表示させる
if (eventDetails.targetUserCount === 0) {
targetUserCountRate = "0%";
} else {
targetUserCountRate = (userCount/eventDetails.targetUserCount) * 100 + "%";
}
sheet.getRange(count, 10).setValue(targetUserCountRate);
sheet.getRange(count, 11).setValue(attendedUserCount);
let attendedRate; //参加率の母数が0だったら0%を返し、それ以外は数値を表示させる
if (userCount === 0) {
attendedRate = "0%";
} else {
attendedRate = (attendedUserCount / userCount) * 100 + "%";
}
sheet.getRange(count, 12).setValue(attendedRate);
count++
}
}
}
<attention>Script上でシートの名称を指定しています。手順2で作成したシートの名称「Eventlist」を変更すると実行に失敗しますのでご留意ください。</attention>
上記Scriptを設定したら、[保存]します。
getEvents関数を実行し、スプレッドシートにデータが書き込まれるか確認してください。問題なく書き込まれたら、Scriptの作成は完了です。
<tips>アンケート回答数や回答率、utmパラメーター別の登録者数など、本ページで算出していないデータを算出されたい場合は、技術者向けAPIドキュメントを参考にご自身でご設定いただくか、担当のカスタマーサクセスまたはカスタマーサポートまでお問合せください。</tips>
4. トリガーを設定する
作成したScriptのトリガーを以下のように設定します。
実行する関数 | getEvents |
実行するデプロイ | Head |
イベントのソース | 時間主導型 |
時間ベースのトリガーのタイプ | 時間ベースのタイマー |
時間の間隔 | 2時間おき ※ 2時間おきより短い間隔で実行することも可能ですが、データ量が多い場合は少なくとも20分は間隔をあけてください。 |
5. サポート対応について
こちらでご紹介する方法は、提供する情報の継続や正確性を完全に保証するものではありません。実装方法に関するご不明な点はGoogleのサポート、もしくは社内エンジニアへお問い合わせください。
機能や取得したいAPI情報が足りない場合は、ご要望としてお伺いしますので、カスタマーサポートへお問い合わせください。