-
Notifications
You must be signed in to change notification settings - Fork 0
Description
Hi,
I am building a Community Connector from Google Data Studio to the SiteImprove API. I have 2 major errors in the following code snippets:
TypeError1: Cannot call method "map" of undefined, for the below code line.
return response.map(function(visitorsCountries) {
TypeError2: Cannot read property "fields" from undefined, for the below code line.
var requestedFieldIds = request.fields.map(function(field) {
The complete JavaScript code is as follows:
function getAuthType() {
var cc = DataStudioApp.createCommunityConnector();
return cc
var url = 'https://api.siteimprove.com/v2/integrations';
//(API_KEY) is not defined error>>>
var response = UrlFetchApp.fetch(url + '&api_key=' + API_KEY);
return response;
}
function getConfig(request) {
var cc = DataStudioApp.createCommunityConnector();
var config = cc.getConfig();
config
.newSelectMultiple()
.setId('visitorCountry')
.setName('Selections')
.setHelpText('Select the visitors countries aspect')
.addOption(config.newOptionBuilder().setLabel('Country').setValue('country'))
.addOption(config.newOptionBuilder().setLabel('Visits').setValue('visits'))
.addOption(config.newOptionBuilder().setLabel('Bounce Rate').setValue('rate'));
//config.setDateRangeRequired(true);
return config.build();
}
function getFields(request) {
var cc = DataStudioApp.createCommunityConnector();
var fields = cc.getFields();
var types = cc.FieldType;
var aggregations = cc.AggregationType;
fields.newDimension()
.setId('country')
.setType(types.TEXT);
fields.newMetric()
.setId('visits')
.setType(types.NUMBER)
.setAggregation(aggregations.SUM);
fields.newMetric()
.setId('rate')
.setType(types.PERCENT)
.setAggregation(aggregations.SUM);
return fields;
//fields.newDimension()
//.setId('day')
//.setName('Date')
//.setType(types.YEAR_MONTH_DAY);
}
function getSchema(request) {
var fields = getFields(request).build();
return { schema: fields };
}
function responseToRows(requestedFields, response) {
function logObject(object) { cc.newDebugError() .setText(JSON.stringify(s)) .throwException(); }
// Transform parsed data and filter for requested fields
// var visitorsCountries;
//TypeError: Cannot call method "map" of undefined.>>>
return response.map(function(visitorsCountries) {
var row = [];
// var field = [];
requestedFields.asArray().forEach.(function (field) {
switch (field.getId()) {
//case 'day':
//return row.push(visitorsCountries.day.replace(/-/g, ''));
case 'rate':
return row.push(visitorsCountries.rate);
case 'visitors':
return row.push(visitorsCountries.visitors);
case 'country':
return row.push(country);
default:
return row.push('');
}
});
return { values: row };
})};
function getData(request) {
function logObject(object) { cc.newDebugError() .setText(JSON.stringify(s)) .throwException(); }
// var fields = getFields();
// var request;
var requestedFieldIds = request.fields.map(function(field) {
return field.name;
});
var requestedFields = getFields().forIds(requestedFieldIds);
// Fetch and parse data from API
var url = [
'https://my2.siteimprove.com/Analytics/207470/LastThirtyDays/Users/Countries',
//request.dateRange.startDate,
//':',
//request.dateRange.endDate,
//'/',
//fields.
request.configParams.visitorCountry
];
var response = UrlFetchApp.fetch(url.join(''));
var parsedResponse = JSON.parse(response).visits;
var parsedResponse = JSON.parse(response).rate;
var parsedResponse = JSON.parse(response).country;
//fields.
var rows = responseToRows(requestedFields, parsedResponse, request.configParams.visitorCountry);
return {
schema: requestedFields.build(),
rows: rows
};
}
Please let me know how can I improve the code from the errors?