Стек, эта работа сводит меня с ума. Чем я занимаюсь? Я использую Google Analytics NodeJS SDK, чтобы получить наиболее посещаемые страницы моего сайта. Я позволил Google предоставить мне удобные URL-адреса (слагы) для поиска в базе данных MongoDB. Поэтому я сохраняю три слагаемых наиболее посещаемых страниц в массиве, а затем запускаю обычную функцию MongoDB Recording.find({slug: searchArr}
. Результаты Аналитики доступны в result.data.rows
.
google.analytics('v3').data.ga.get(
{
auth: jwt,
ids: 'ga:' + view_id,
'start-date': '30daysAgo',
'end-date': 'today',
metrics: 'ga:uniquePageviews',
dimensions: 'ga:pagePath',
sort: '-ga:uniquePageviews',
filters: 'ga:pagePath=~/recordings/',
'max-results': '3'
},
(err, result) => {
if (err) {
Sentry.captureException(err);
res.json({ success: false, message: 'An error occurred.' });
} else {
let mostViewedFirst = {
slug: result.data.rows[0][0].replace('/recordings/', ''),
views: result.data.rows[0][1]
};
const mostViewedSecond = {
slug: result.data.rows[1][0].replace('/recordings/', ''),
views: result.data.rows[1][1]
};
const mostViewedThird = {
slug: result.data.rows[2][0].replace('/recordings/', ''),
views: result.data.rows[2][1]
};
let searchArr = [mostViewedFirst.slug, mostViewedSecond.slug, mostViewedThird.slug];
let concatArr = [
{
slug: mostViewedFirst.slug,
views: mostViewedFirst.views
}, {
slug: mostViewedSecond.slug,
views: mostViewedSecond.views
}, {
slug: mostViewedThird.slug,
views: mostViewedThird.views
}];
Recording.find({slug: searchArr},
(err, recording) => {
if (err) {
Sentry.captureException(err);
res.json({ success: false, message: 'Most viewed recording could not be loaded.' });
} else {
res.json(recording.concat(concatArr));
}
}
).populate('genres')
.populate('artists')
.populate('show');
}
});
Ответ Google Analytics SDK:
{
"slug": "recording-a",
"views": "148"
},
{
"slug": "recording-b",
"views": "75"
},
{
"slug": "recording-c",
"views": "68"
}
Пн goose Ответ:
{
"slug": "recording-a",
"title": "Recording A"
...
},
{
"slug": "recording-b",
"title": "Recording B"
...
},
{
"slug": "recording-c",
"title": "Recording C",
...
}
На следующем шаге я хотел бы применить вывод массива Google к базе данных MongoDB. Значение «slug» должно совпадать, а «views» должны быть вставлены в соответствующий объект.
С res.json(recording.concat(concatArr));
я смог отобразить оба объекта в ответе JSON:
{
"slug": "recording-a",
"views": "148"
},
{
"slug": "recording-b",
"views": "75"
},
{
"slug": "recording-c",
"views": "68"
},
{
"slug": "recording-a",
"title": "Recording A"
...
},
{
"slug": "recording-b",
"title": "Recording B"
...
},
{
"slug": "recording-c",
"title": "Recording C",
...
}
Мой желаемый результат:
{
"slug": "recording-a",
"title": "Recording A"
"views": "148"
},
{
"slug": "recording-b",
"title": "Recording B"
"views": "75"
},
{
"slug": "recording-c",
"title": "Recording C",
"views": "68"
}
К сожалению, я не могу получить массив значений Google Analytics из Google в MongoDB. Также возможно, что я написал очень сложный код - возможно, весь лог c можно упростить с помощью a для l oop. Я открыт для любой помощи, спасибо!