質問編集履歴
7
誤字の修正
test
CHANGED
File without changes
|
test
CHANGED
@@ -1,6 +1,7 @@
|
|
1
1
|
### 実現したいこと
|
2
|
+
Looker Studio(旧データポータル)のコネクタを自作し、REST APIからデータを取得する
|
2
|
-
https://weseek.co.jp/tech/3521/
|
3
|
+
https://weseek.co.jp/tech/3521/
|
3
|
-
kintone用のLookerStudioコネクタをGoogle Apps Scriptで作成しています。
|
4
|
+
を参考に、kintone用のLookerStudioコネクタをGoogle Apps Scriptで作成しています。
|
4
5
|
|
5
6
|
### 発生している問題・分からないこと
|
6
7
|
約5000件ほどあるデータを取り込んでLookerStudioに反映しようとしたところ、
|
@@ -48,7 +49,7 @@
|
|
48
49
|
|
49
50
|
fields.newDimension()
|
50
51
|
.setId('updated_at')
|
51
|
-
.setName('更新日')
|
52
|
+
.setName('更新日時')
|
52
53
|
.setType(types.YEAR_MONTH_DAY_SECOND);
|
53
54
|
|
54
55
|
return fields;
|
@@ -92,7 +93,7 @@
|
|
92
93
|
case 'record_id':
|
93
94
|
return row.push(record.$id.value);
|
94
95
|
case 'updated_at':
|
95
|
-
return row.push(record.更新日.value.replace(/-|:|T|Z/g, ''));
|
96
|
+
return row.push(record.更新日時.value.replace(/-|:|T|Z/g, ''));
|
96
97
|
// 他のフィールドに対する処理を追加する
|
97
98
|
default:
|
98
99
|
return row.push('');
|
6
個人情報の削除
test
CHANGED
File without changes
|
test
CHANGED
@@ -120,7 +120,7 @@
|
|
120
120
|
var requestedFields = getFields().forIds(requestedFieldIds);
|
121
121
|
|
122
122
|
// Fetch and parse data from kintone API
|
123
|
-
var url = 'https://
|
123
|
+
var url = 'https://<サブドメイン>.cybozu.com/k/v1/records.json?app=' + request.configParams.app_id + '&totalCount=true';
|
124
124
|
var headers = {
|
125
125
|
'X-Cybozu-API-Token': PropertiesService.getScriptProperties().getProperty("KINTONE_API_TOKEN")
|
126
126
|
};
|
5
コードの修正
test
CHANGED
File without changes
|
test
CHANGED
@@ -119,50 +119,40 @@
|
|
119
119
|
});
|
120
120
|
var requestedFields = getFields().forIds(requestedFieldIds);
|
121
121
|
|
122
|
+
// Fetch and parse data from kintone API
|
123
|
+
var url = 'https://common-s.cybozu.com/k/v1/records.json?app=' + request.configParams.app_id + '&totalCount=true';
|
124
|
+
var headers = {
|
125
|
+
'X-Cybozu-API-Token': PropertiesService.getScriptProperties().getProperty("KINTONE_API_TOKEN")
|
126
|
+
};
|
122
|
-
var
|
127
|
+
var options = {
|
128
|
+
'headers': headers
|
129
|
+
};
|
123
130
|
|
131
|
+
var allRecords = [];
|
124
132
|
var offset = 0;
|
125
|
-
var limit = 100; // 1
|
133
|
+
var limit = 100; // 1ページあたりの最大レコード数
|
134
|
+
var totalCount = 0;
|
126
135
|
|
127
|
-
// ページングを行い、全てのデータを取得
|
128
|
-
|
136
|
+
do {
|
129
|
-
// Fetch and parse data from kintone API
|
130
|
-
var
|
137
|
+
var pageUrl = url + '&offset=' + offset + '&limit=' + limit;
|
131
|
-
var headers = {
|
132
|
-
'X-Cybozu-API-Token': PropertiesService.getScriptProperties().getProperty("KINTONE_API_TOKEN")
|
133
|
-
};
|
134
|
-
var options = {
|
135
|
-
'headers': headers
|
136
|
-
};
|
137
|
-
var response = UrlFetchApp.fetch(
|
138
|
+
var response = UrlFetchApp.fetch(pageUrl, options);
|
138
|
-
var parsedResponse = JSON.parse(response);
|
139
|
+
var parsedResponse = JSON.parse(response.getContentText());
|
139
|
-
var
|
140
|
+
var pageRecords = parsedResponse.records;
|
140
|
-
|
141
|
+
allRecords = allRecords.concat(pageRecords);
|
142
|
+
offset += limit;
|
143
|
+
totalCount = parsedResponse.totalCount;
|
144
|
+
} while (offset < totalCount && offset < 1000); // 最大1000件まで取得
|
141
145
|
|
142
|
-
// 取得したデータがない場合、ループを終了
|
143
|
-
if (rows.length === 0) {
|
144
|
-
break;
|
145
|
-
}
|
146
|
-
|
147
|
-
|
146
|
+
var rows = responseToRows(requestedFields, allRecords);
|
148
|
-
|
149
|
-
// 次のページへのオフセットを設定
|
150
|
-
offset += limit;
|
151
|
-
}
|
152
147
|
|
153
148
|
return {
|
154
149
|
schema: requestedFields.build(),
|
155
|
-
rows:
|
150
|
+
rows: rows
|
156
151
|
};
|
157
152
|
}
|
158
153
|
```
|
159
154
|
例えば、getData(request) をこのように改良したりしてみましたが、
|
160
|
-
|
161
|
-
Error: Could not locate target object while calling method getId on object with id 377.
|
162
|
-
responseToRows:94(※return response.map(function(record) {)
|
163
|
-
getData:74(※var rows = responseToRows(requestedFields, kintoneRecords);)
|
164
|
-
|
165
|
-
|
155
|
+
100件以上取得できず四苦八苦しています。
|
166
156
|
|
167
157
|
また、参考元の記事に下記のような文言がありますが、
|
168
158
|
|
4
コードの追加
test
CHANGED
File without changes
|
test
CHANGED
@@ -112,6 +112,58 @@
|
|
112
112
|
##### 上記の詳細・結果
|
113
113
|
Kintone公式の[複数のレコードを取得する](https://cybozu.dev/ja/kintone/docs/rest-api/records/get-records/)等を読んで色々試しては見ましたが、どれも100件以上取得することはできませんでした。
|
114
114
|
|
115
|
+
```
|
116
|
+
function getData(request) {
|
117
|
+
var requestedFieldIds = request.fields.map(function(field) {
|
118
|
+
return field.name;
|
119
|
+
});
|
120
|
+
var requestedFields = getFields().forIds(requestedFieldIds);
|
121
|
+
|
122
|
+
var allRows = [];
|
123
|
+
|
124
|
+
var offset = 0;
|
125
|
+
var limit = 100; // 1回のリクエストで取得するレコード数
|
126
|
+
|
127
|
+
// ページングを行い、全てのデータを取得
|
128
|
+
while (true) {
|
129
|
+
// Fetch and parse data from kintone API
|
130
|
+
var url = 'https://common-s.cybozu.com/k/v1/records.json?app=' + request.configParams.app_id + '&totalCount=true&offset=' + offset + '&limit=' + limit;
|
131
|
+
var headers = {
|
132
|
+
'X-Cybozu-API-Token': PropertiesService.getScriptProperties().getProperty("KINTONE_API_TOKEN")
|
133
|
+
};
|
134
|
+
var options = {
|
135
|
+
'headers': headers
|
136
|
+
};
|
137
|
+
var response = UrlFetchApp.fetch(url, options);
|
138
|
+
var parsedResponse = JSON.parse(response);
|
139
|
+
var kintoneRecords = parsedResponse.records;
|
140
|
+
var rows = responseToRows(requestedFields, kintoneRecords);
|
141
|
+
|
142
|
+
// 取得したデータがない場合、ループを終了
|
143
|
+
if (rows.length === 0) {
|
144
|
+
break;
|
145
|
+
}
|
146
|
+
|
147
|
+
allRows = allRows.concat(rows);
|
148
|
+
|
149
|
+
// 次のページへのオフセットを設定
|
150
|
+
offset += limit;
|
151
|
+
}
|
152
|
+
|
153
|
+
return {
|
154
|
+
schema: requestedFields.build(),
|
155
|
+
rows: allRows
|
156
|
+
};
|
157
|
+
}
|
158
|
+
```
|
159
|
+
例えば、getData(request) をこのように改良したりしてみましたが、
|
160
|
+
|
161
|
+
Error: Could not locate target object while calling method getId on object with id 377.
|
162
|
+
responseToRows:94(※return response.map(function(record) {)
|
163
|
+
getData:74(※var rows = responseToRows(requestedFields, kintoneRecords);)
|
164
|
+
|
165
|
+
というエラーが出てそこから四苦八苦しています。
|
166
|
+
|
115
167
|
また、参考元の記事に下記のような文言がありますが、
|
116
168
|
|
117
169
|
> Redmine REST API は、 1 回のリクエストで 100 件までのデータしか取得できません。 100 件を超えるデータに対応するためには、ページを再帰的に追いかける実装が必要です。
|
3
ソースコードを移動
test
CHANGED
File without changes
|
test
CHANGED
@@ -2,7 +2,13 @@
|
|
2
2
|
https://weseek.co.jp/tech/3521/ を参考に、
|
3
3
|
kintone用のLookerStudioコネクタをGoogle Apps Scriptで作成しています。
|
4
4
|
|
5
|
+
### 発生している問題・分からないこと
|
6
|
+
約5000件ほどあるデータを取り込んでLookerStudioに反映しようとしたところ、
|
7
|
+
コネクタはなんとか作成できたもののデータが100件以上取得できず困っています。
|
8
|
+
|
5
|
-
|
9
|
+
### 該当のソースコード
|
10
|
+
|
11
|
+
```
|
6
12
|
var cc = DataStudioApp.createCommunityConnector();
|
7
13
|
|
8
14
|
function getAuthType() {
|
@@ -95,19 +101,6 @@
|
|
95
101
|
return { values: row };
|
96
102
|
});
|
97
103
|
}
|
98
|
-
|
99
|
-
```
|
100
|
-
|
101
|
-
### 発生している問題・分からないこと
|
102
|
-
約5000件ほどあるデータを取り込んでLookerStudioに反映しようとしたところ、
|
103
|
-
コネクタはなんとか作成できたもののデータが100件以上取得できず困っています。
|
104
|
-
|
105
|
-
|
106
|
-
|
107
|
-
### 該当のソースコード
|
108
|
-
|
109
|
-
```
|
110
|
-
特になし
|
111
104
|
```
|
112
105
|
|
113
106
|
### 試したこと・調べたこと
|
2
リンクの修正
test
CHANGED
File without changes
|
test
CHANGED
@@ -117,7 +117,7 @@
|
|
117
117
|
- [ ] その他
|
118
118
|
|
119
119
|
##### 上記の詳細・結果
|
120
|
-
Kintone公式の複数のレコードを取得する
|
120
|
+
Kintone公式の[複数のレコードを取得する](https://cybozu.dev/ja/kintone/docs/rest-api/records/get-records/)等を読んで色々試しては見ましたが、どれも100件以上取得することはできませんでした。
|
121
121
|
|
122
122
|
また、参考元の記事に下記のような文言がありますが、
|
123
123
|
|
1
個人情報の削除
test
CHANGED
File without changes
|
test
CHANGED
@@ -60,7 +60,7 @@
|
|
60
60
|
var requestedFields = getFields().forIds(requestedFieldIds);
|
61
61
|
|
62
62
|
// Fetch and parse data from kintone API
|
63
|
-
var url = 'https://
|
63
|
+
var url = 'https://<サブドメイン>.cybozu.com/k/v1/records.json?app=' + request.configParams.app_id + '&totalCount=true';
|
64
64
|
var headers = {
|
65
65
|
'X-Cybozu-API-Token': PropertiesService.getScriptProperties().getProperty("KINTONE_API_TOKEN")
|
66
66
|
};
|