質問編集履歴

7

誤字の修正

2024/03/21 07:30

投稿

kinpika777
kinpika777

スコア30

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

個人情報の削除

2024/03/15 02:35

投稿

kinpika777
kinpika777

スコア30

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://common-s.cybozu.com/k/v1/records.json?app=' + request.configParams.app_id + '&totalCount=true';
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

コードの修正

2024/03/15 02:35

投稿

kinpika777
kinpika777

スコア30

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 allRows = [];
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
- while (true) {
136
+ do {
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;
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(url, options);
138
+ var response = UrlFetchApp.fetch(pageUrl, options);
138
- var parsedResponse = JSON.parse(response);
139
+ var parsedResponse = JSON.parse(response.getContentText());
139
- var kintoneRecords = parsedResponse.records;
140
+ var pageRecords = parsedResponse.records;
140
- var rows = responseToRows(requestedFields, kintoneRecords);
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
- allRows = allRows.concat(rows);
146
+ var rows = responseToRows(requestedFields, allRecords);
148
-
149
- // 次のページへのオフセットを設定
150
- offset += limit;
151
- }
152
147
 
153
148
  return {
154
149
  schema: requestedFields.build(),
155
- rows: allRows
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

コードの追加

2024/03/13 01:49

投稿

kinpika777
kinpika777

スコア30

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

ソースコードを移動

2024/03/12 01:11

投稿

kinpika777
kinpika777

スコア30

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

リンクの修正

2024/03/11 11:18

投稿

kinpika777
kinpika777

スコア30

test CHANGED
File without changes
test CHANGED
@@ -117,7 +117,7 @@
117
117
  - [ ] その他
118
118
 
119
119
  ##### 上記の詳細・結果
120
- Kintone公式の複数のレコードを取得するhttps://cybozu.dev/ja/kintone/docs/rest-api/records/get-records/等を読んで色々試しては見ましたが、どれも100件以上取得することはできませんでした。
120
+ Kintone公式の[複数のレコードを取得する](https://cybozu.dev/ja/kintone/docs/rest-api/records/get-records/)等を読んで色々試しては見ましたが、どれも100件以上取得することはできませんでした。
121
121
 
122
122
  また、参考元の記事に下記のような文言がありますが、
123
123
 

1

個人情報の削除

2024/03/11 11:17

投稿

kinpika777
kinpika777

スコア30

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://common-s.cybozu.com/k/v1/records.json?app=' + request.configParams.app_id + '&totalCount=true';
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
  };