Dane NowMetrix w Google Sheets
Za pomocą Google Apps Script można bezpiecznie pobierać codzienne dane NowMetrix, odświeżać arkusz według harmonogramu oraz udostępniać dane do obliczeń, współpracy lub raportów w Looker Studio.
Jak działa połączenie
Arkusz pełni funkcję niewielkiego, zarządzanego przez klienta pośrednika danych:
NowMetrix REST API → Google Apps Script → Google Sheet → optional Looker Studio report
Dane nie są importowane do Google Analytics. Apps Script wysyła żądanie do wybranego endpointu NowMetrix, używając klucza API, a następnie zapisuje zwrócone wiersze w arkuszu. Looker Studio może później używać tego arkusza jako osobnego źródła danych.
1. Przygotowanie klucza API i arkusza
- W NowMetrix otworzyć Ustawienia → API i utworzyć osobny klucz oznaczony Google Sheets.
- Skopiować cały klucz po jego wyświetleniu. Później nie będzie można wyświetlić go ponownie.
- Zapisać identyfikator trackera witryny, z której mają być eksportowane dane.
- Utworzyć nowy arkusz Google, na przykład NowMetrix Export.
- Ustawić strefę czasową arkusza taką samą jak strefa czasowa trackera NowMetrix.
Poniższy przykład eksportuje 30 ostatnich dziennych wierszy z /v1/overview. Każdy wiersz zawiera
datę, tracker, strefę czasową trackera, odsłony i wizyty.
2. Zapisanie klucza API we właściwościach skryptu
W arkuszu Google wybrać Rozszerzenia → Apps Script. Następnie:
- Otworzyć Ustawienia projektu za pomocą ikony koła zębatego.
- W sekcji Właściwości skryptu wybrać Dodaj właściwość skryptu.
- Dodać następujące dwie właściwości:
| Właściwość | Wartość |
|---|---|
NOWMETRIX_API_KEY |
Klucz rozpoczynający się od nm_ |
NOWMETRIX_TRACKER_ID |
Identyfikator trackera do eksportu |
3. Dodanie skryptu eksportu
Zastąpić zawartość pliku Code.gs poniższym skryptem. Skrypt sprawdza konfigurację,
ogranicza dostęp do bieżącego dokumentu, obsługuje błędy API i zastępuje arkusz dopiero
po pomyślnym otrzymaniu odpowiedzi.
/**
* @OnlyCurrentDoc
*/
const NOWMETRIX_BASE_URL = 'https://api.nowmetrix.com';
function fetchNowMetrix(path) {
const properties = PropertiesService.getScriptProperties();
const apiKey = properties.getProperty('NOWMETRIX_API_KEY');
const trackerId = properties.getProperty('NOWMETRIX_TRACKER_ID');
if (!apiKey || !trackerId) {
throw new Error('NOWMETRIX_API_KEY or NOWMETRIX_TRACKER_ID is missing.');
}
const separator = path.includes('?') ? '&' : '?';
const url = NOWMETRIX_BASE_URL
+ path
+ separator
+ 'site=' + encodeURIComponent(trackerId);
const response = UrlFetchApp.fetch(url, {
method: 'get',
headers: {
Authorization: 'Bearer ' + apiKey,
Accept: 'application/json'
},
muteHttpExceptions: true
});
const status = response.getResponseCode();
const body = response.getContentText();
if (status < 200 || status >= 300) {
throw new Error('NowMetrix API returned HTTP ' + status + ': ' + body);
}
return JSON.parse(body);
}
function toSheetDate(value) {
const parts = value.split('-').map(Number);
return new Date(parts[0], parts[1] - 1, parts[2]);
}
function syncNowMetrixDaily() {
const result = fetchNowMetrix('/v1/overview?days=30');
const rows = result.daily.map(day => [
toSheetDate(day.date),
result.site,
result.timezone,
day.pageviews,
day.visits
]);
const spreadsheet = SpreadsheetApp.getActiveSpreadsheet();
const sheet = spreadsheet.getSheetByName('Daily')
|| spreadsheet.insertSheet('Daily');
const values = [
['date', 'tracker', 'timezone', 'pageviews', 'visits'],
...rows
];
sheet.clearContents();
sheet.getRange(1, 1, values.length, values[0].length).setValues(values);
sheet.setFrozenRows(1);
sheet.getRange(1, 1, 1, values[0].length).setFontWeight('bold');
if (rows.length > 0) {
sheet.getRange(2, 1, rows.length, 1).setNumberFormat('yyyy-mm-dd');
sheet.getRange(2, 4, rows.length, 2).setNumberFormat('#,##0');
}
sheet.autoResizeColumns(1, values[0].length);
}
Nie zastępować NOWMETRIX_API_KEY rzeczywistym kluczem w kodzie źródłowym. Skrypt odczytuje
go z właściwości skryptu podczas działania. Zachować @OnlyCurrentDoc na początku: informuje
Google, że należy poprosić o dostęp do tego arkusza, a nie do wszystkich arkuszy na koncie.
4. Zapisanie i jednokrotne uruchomienie skryptu
- Nadać projektowi nazwę NowMetrix Google Sheets Export w lewym górnym rogu.
- Zapisać projekt Apps Script za pomocą ikony dyskietki lub skrótu klawiaturowego.
- Wybrać
syncNowMetrixDailyw menu funkcji na pasku narzędzi edytora. - Wybrać Uruchom obok menu funkcji.
5. Autoryzacja własnego projektu Apps Script
Przy pierwszym uruchomieniu skryptu Google poprosi o zgodę. Wybrać Sprawdź uprawnienia i konto Google, do którego należy arkusz.
Ostrzeżenie takie jak Google nie zweryfikował tej aplikacji jest oczekiwane w przypadku prywatnego, samodzielnie utworzonego projektu Apps Script. Adres e-mail dewelopera wyświetlany przez Google powinien należeć do własnego konta Google. Projekt nie jest aplikacją Google firmy NowMetrix i nie zapewnia firmie NowMetrix dostępu do konta Google.
- Potwierdzić, że projekt Apps Script został utworzony samodzielnie, a adres e-mail dewelopera należy do własnego konta Google.
- Na ekranie ostrzeżenia wybrać Zaawansowane.
- Przejść do nazwanego projektu. Google może oznaczyć ten link jako niebezpieczny, ponieważ prywatny projekt nie został zweryfikowany.
- Sprawdzić żądane uprawnienia i wybrać Zezwól lub Kontynuuj.
| Uprawnienie | Dlaczego jest wymagane |
|---|---|
| Dostęp do bieżącego arkusza | Tworzenie lub aktualizowanie arkusza Daily w tym arkuszu Google. |
| Łączenie z usługą zewnętrzną | Wysyłanie żądania HTTPS do https://api.nowmetrix.com. |
@OnlyCurrentDoc znajduje się na samym początku pliku
Code.gs, zapisać projekt i ponownie uruchomić funkcję.
Jeśli wcześniej przyznano szerszy dostęp do arkuszy, usunąć projekt w sekcji Konto Google → Bezpieczeństwo → Połączenia z aplikacjami i usługami innych firm, a następnie ponownie uruchomić zapisany skrypt, aby zażądać ograniczonych uprawnień.
Google opisuje ten proces autoryzacji oraz ograniczenie @OnlyCurrentDoc w swoim
przewodniku po autoryzacji Apps Script.
6. Weryfikacja pierwszego eksportu
Po autoryzacji Apps Script wznowi działanie. Poczekać, aż w dzienniku wykonania pojawi się komunikat Wykonanie zakończone, wrócić do arkusza i otworzyć nowy arkusz Daily. Wynik powinien wyglądać podobnie do poniższego:
| date | tracker | timezone | pageviews | visits |
|---|---|---|---|---|
| 2026-08-22 | TRACKER_ID | Europe/Zurich | 81,240 | 53,210 |
| 2026-08-23 | TRACKER_ID | Europe/Zurich | 77,480 | 50,195 |
7. Planowanie automatycznych aktualizacji
W Apps Script otworzyć Wyzwalacze za pomocą ikony zegara i dodać wyzwalacz:
| Funkcja | syncNowMetrixDaily |
|---|---|
| Wdrożenie | Head |
| Źródło zdarzenia | Oparte na czasie |
| Częstotliwość | Co godzinę lub rzadziej w przypadku raportu dziennego |
Wyzwalacz działa na koncie Google, które go utworzyło. To konto musi pozostać aktywne; należy też sprawdzać powiadomienia o błędach Apps Script. Unikać niepotrzebnie częstych żądań: publiczne API NowMetrix pozwala obecnie na 20 żądań na minutę dla jednego trackera, wspólnie dla wszystkich kluczy i użytkowników.
Przykład zastępuje tabelę z ruchomym zakresem 30 dni przy każdym pomyślnym uruchomieniu. Zapobiega to powielaniu dat i pozwala zachować niewielki rozmiar arkusza.
8. Używanie arkusza w Looker Studio
- Utworzyć lub otworzyć raport w Looker Studio.
- Wybrać Dodaj dane → Google Sheets.
- Wybrać arkusz kalkulacyjny i arkusz Daily.
- Użyć pierwszego wiersza jako nagłówków i połączyć źródło danych.
- Potwierdzić, że
datejest datą, apageviewsivisitssą metrykami liczbowymi.
Można teraz tworzyć wykresy szeregów czasowych, karty wyników, tabele oraz pola obliczeniowe, takie jak
pageviews / visits. Looker Studio odczytuje te dane jako osobne źródło; nie przekształca
wartości NowMetrix w zdarzenia Google Analytics.
Pozostałe ustawienia raportu opisano w dokumentacji Google, w przewodniku po integracji z Google Sheets.
Eksport innych danych NowMetrix
| Przypadek użycia | Przykładowy endpoint | Zalecane działanie na arkuszu |
|---|---|---|
| Dzienne odsłony i wizyty | /v1/overview?days=30 |
Zastępować lub aktualizować wiersze według trackera i daty |
| Najpopularniejsze strony z wczoraj | /v1/recap?preset=yesterday&limit=100 |
Dodawać raz dziennie lub zastępować bieżący wynik |
| Bieżący zrzut danych na żywo | /v1/realtime |
Przy tworzeniu trendu dodawać znacznik czasu odpowiedzi |
| Bieżące źródła ruchu | /v1/sources |
Dodawać znacznik czasu odpowiedzi lub zastępować bieżący zrzut |
preset=last30, zawiera sumy dla całego ruchomego zakresu. Nie
dodawać tych wartości codziennie. Aby tworzyć sumowalną historię artykułów, eksportować zakończony
okres, na przykład yesterday, i zapisywać zakres przy każdym wierszu.
Lista kontrolna bezpieczeństwa i udostępniania
- Użyć osobnego klucza API NowMetrix do eksportu i przyznać dostęp tylko do wymaganych trackerów.
- Przechowywać klucz wyłącznie we właściwościach skryptu lub innym serwerowym magazynie sekretów.
- Pozostawić
@OnlyCurrentDocw skrypcie, aby ograniczyć dostęp Google Sheets do tego dokumentu. - Nigdy nie umieszczać klucza w komórkach, formułach, parametrach raportów, adresach URL, zrzutach ekranu ani dziennikach.
- Ograniczyć uprawnienia do edycji projektu Apps Script. Osoby z uprawnieniami do edycji należy traktować jako zaufane.
- Autoryzować skrypt tylko wtedy, gdy Google wyświetla własne konto jako konto dewelopera.
- Używać osobnego arkusza należącego do klienta dla każdego konta NowMetrix.
- Przed opublikowaniem raportu sprawdzić ustawienia udostępniania zarówno arkusza Google, jak i Looker Studio.
- Natychmiast unieważnić klucz API, jeśli arkusz, skrypt lub konto Google mogły zostać przejęte.
Rozwiązywanie problemów
| Problem | Co sprawdzić |
|---|---|
HTTP 401 |
Klucz API jest nieobecny, niepełny, nieprawidłowy lub unieważniony. |
HTTP 403 |
Klucz API nie zapewnia dostępu do skonfigurowanego trackera. |
HTTP 429 |
Przekroczono limit żądań API dla trackera. Zmniejszyć częstotliwość wyzwalacza. |
HTTP 503 |
Backend analityczny jest tymczasowo niedostępny. Zachować dane w arkuszu i spróbować ponownie później. |
| Brak arkusza Daily | Uruchomić ręcznie syncNowMetrixDaily i sprawdzić szczegóły wykonania w Apps Script. |
| Google informuje, że aplikacja nie została zweryfikowana | Jest to oczekiwane w przypadku prywatnego skryptu. Kontynuować tylko wtedy, gdy projekt został utworzony samodzielnie, a Google wyświetla własny adres e-mail dewelopera. |
| Google prosi o dostęp do wszystkich arkuszy | Anulować, dodać @OnlyCurrentDoc na początku pliku Code.gs, zapisać projekt i ponownie uruchomić funkcję. |
| Daty wyglądają nieprawidłowo | Dopasować strefę czasową arkusza Google do strefy czasowej trackera zwróconej przez API. |