Interfejs API CrUX

Interfejs CrUX API zapewnia dostęp o niskim opóźnieniu do zagregowanych danych o wrażeniach prawdziwych użytkowników na poziomie strony i źródła.

Wypróbuj

Częsty przypadek użycia

Interfejs CrUX API umożliwia wysyłanie zapytań o dane dotyczące wygody użytkowników w przypadku konkretnego identyfikatora URI, np. „Pobierz dane dotyczące źródła https://example.com”.

Klucz interfejsu API CrUX

Korzystanie z interfejsu CrUX API wymaga klucza interfejsu Google Cloud API udostępnionego na potrzeby Chrome UX Report API.

Uzyskiwanie i używanie klucza interfejsu API

Uzyskiwanie klucza

Możesz też utworzyć klucz na stronie Dane logowania.

Gdy masz już klucz interfejsu API, Twoja aplikacja może dołączać parametr zapytania key=yourAPIKey do wszystkich adresów URL żądań.

Klucz interfejsu API można bezpiecznie umieszczać w adresach URL, więc nie trzeba go kodować.

Zobacz Przykładowe zapytania.

Model danych

W tej sekcji opisano strukturę danych w żądaniach i odpowiedziach.

Nagraj

Pojedyncza informacja o stronie lub witrynie. Rekord może zawierać dane, które są specyficzne dla identyfikatora i konkretnej kombinacji wymiarów. Rekord może zawierać dane dotyczące co najmniej 1 rodzaju danych.

Identyfikatory

Identyfikatory określają, które rekordy mają być wyszukiwane. W CrUX tymi identyfikatorami są strony internetowe i witryny.

Punkt początkowy

Jeśli identyfikatorem jest źródło, wszystkie dane dotyczące wszystkich stron w tym źródle są agregowane. Załóżmy na przykład, że źródło http://www.example.com zawiera strony rozmieszczone zgodnie z tą mapą witryny:

http://www.example.com/
http://www.example.com/foo.html
http://www.example.com/bar.html

Oznacza to, że podczas wysyłania zapytania do raportu na temat użytkowania Chrome ze źródłem ustawionym na http://www.example.com zostaną zwrócone dane dla http://www.example.com/, http://www.example.com/foo.html i http://www.example.com/bar.html, które zostaną zagregowane, ponieważ wszystkie te strony znajdują się w tym źródle.

Adresy URL

Jeśli identyfikator jest adresem URL, zwracane są tylko dane dotyczące tego konkretnego adresu. Spójrzmy jeszcze raz na mapę witryny http://www.example.com:

http://www.example.com/
http://www.example.com/foo.html
http://www.example.com/bar.html

Jeśli identyfikator jest ustawiony na URL z wartością http://www.example.com/foo.html, zwracane będą tylko dane dotyczące tej strony.

Wymiary

Wymiary identyfikują konkretną grupę danych, według której rekord jest agregowany. Na przykład format PHONE wskazuje, że rekord zawiera informacje o wczytywaniu, które miało miejsce na urządzeniu mobilnym. Każdy wymiar będzie miał określoną liczbę wartości, a brak określenia tego wymiaru będzie oznaczał, że wymiar jest agregowany we wszystkich wartościach. Na przykład brak określenia formatu oznacza, że rekord zawiera informacje o załadunkach, które miały miejsce w dowolnym formacie.

Format

Klasa urządzenia, którego użytkownik użył do przejścia na stronę. Jest to ogólna klasa urządzeń podzielona na PHONE, TABLET i DESKTOP.

Wskaźnik

Dane raportowania są raportowane jako agregacje statystyczne w histogramach, percentylach i ułamkach.

Wartości zmiennoprzecinkowe są zaokrąglane do 4 miejsc po przecinku (pamiętaj, że dane cumulative_layout_shift to liczby podwójnej precyzji zakodowane jako ciąg znaków, więc nie są traktowane jako liczby zmiennoprzecinkowe i są podawane z dokładnością do 2 miejsc po przecinku w ciągu znaków).

Histogram

Gdy dane są przedstawione na histogramie, pokazujemy odsetek wczytań strony, które mieszczą się w określonych zakresach dla tych danych.

Histogram z 3 przedziałami dla przykładowych danych wygląda tak:

{
  "histogram": [
    {
      "start": 0,
      "end": 1000,
      "density": 0.3818
    },
    {
      "start": 1000,
      "end": 3000,
      "density": 0.4991
    },
    {
      "start": 3000,
      "density": 0.1192
    }
  ]
}

Te dane wskazują, że w przypadku 38,18% wczytań strony przykładowy wskaźnik został zmierzony w zakresie od 0 ms do 1000 ms. Jednostki danych nie są zawarte w tym histogramie. W tym przypadku przyjmiemy milisekundy.

Dodatkowo w 49,91% przypadków wczytania strony wartość danych mieściła się w zakresie od 1000 ms do 3000 ms, a w 11,92% przypadków była większa niż 3000 ms.

Percentyle

Dane mogą też zawierać percentyle, które mogą być przydatne w dodatkowych analizach. Podajemy konkretne wartości danych w danym percentylu. Są one oparte na pełnym zestawie dostępnych danych, a nie na ostatecznych danych podzielonych na przedziały, więc nie muszą odpowiadać interpolowanemu percentylowi opartemu na ostatecznym histogramie podzielonym na przedziały.

{
  "percentiles": {
    "p75": 2063
  }
}

W tym przykładzie co najmniej 75% wczytań strony zostało zmierzonych za pomocą wartości danych <= 2063.

Ułamki

Ułamki wskazują odsetek wczytań strony, które można oznaczyć w określony sposób. W tym przypadku wartościami danych są te etykiety.

Na przykład dane form_factors składają się z obiektu fractions, który zawiera zestawienie formatów (lub urządzeń) objętych danym zapytaniem:

"form_factors": {
  "fractions": {
    "desktop": 0.0377,
    "tablet": 0.0288,
    "phone": 0.9335
  }
}

W tym przypadku 3,77% wczytań strony zostało zmierzonych na komputerze, 2,88% – na tablecie, a 93,35% – na telefonie, co daje łącznie 100%.

Typy wartości danych

Nazwa danych interfejsu CrUX API Typ danych Jednostki metryczne Agregacje statystyczne Dokumentacja
cumulative_layout_shift Liczba zmiennoprzecinkowa z 2 miejscami po przecinku zakodowana jako ciąg znaków bez jednostek histogram z 3 słupkami, percentyle z p75 CLS
interaction_to_next_paint int milisekundy histogram z 3 słupkami, percentyle z p75 INP
largest_contentful_paint int milisekundy histogram z 3 słupkami, percentyle z p75 LCP
experimental_cumulative_layout_shift_with_softnavs Liczba zmiennoprzecinkowa podwójnej precyzji z 2 miejscami po przecinku zakodowana jako ciąg znaków bez jednostek histogram z 3 słupkami, percentyle z p75 Blog
experimental_interaction_to_next_paint_with_softnavs int milisekundy histogram z 3 słupkami, percentyle z p75 Blog
experimental_largest_contentful_paint_with_softnavs int milisekundy histogram z 3 słupkami, percentyle z p75 Blog
first_contentful_paint int milisekundy histogram z 3 słupkami, percentyle z p75 FCP
experimental_time_to_first_byte int milisekundy histogram z 3 słupkami, percentyle z p75 TTFB
form_factors Liczba zmiennoprzecinkowa o 4 miejscach po przecinku procent mapowanie formatu na ułamek, Formaty
navigation_types Liczba zmiennoprzecinkowa podwójnej precyzji z 4 miejscami po przecinku procent mapowanie typu nawigacji na ułamek Rodzaje nawigacji
round_trip_time int milisekundy histogram z 3 słupkami, percentyle z p75 Dane RTT
largest_contentful_paint_resource_type Liczba zmiennoprzecinkowa o 4 miejscach po przecinku procent mapowanie typu nawigacji na ułamek, Typy zasobów LCP
largest_contentful_paint_image_time_to_first_byte int milisekundy percentyle z p75, Elementy podrzędne LCP
largest_contentful_paint_image_resource_load_delay int milisekundy percentyle z p75 Elementy podrzędne LCP
largest_contentful_paint_image_resource_load_duration int milisekundy centyle z p75, Podsekcje LCP
largest_contentful_paint_image_element_render_delay int milisekundy percentyle z p75 Elementy podrzędne LCP
experimental_ad_count Liczba zmiennoprzecinkowa z 2 miejscami po przecinku bez jednostek tylko p75, Liczba reklam
experimental_ad_density Liczba zmiennoprzecinkowa podwójnej precyzji z 2 miejscami po przecinku bez jednostek tylko p75, Gęstość reklam
experimental_ad_cpu int milisekundy tylko p75, Waga reklamy: procesor
experimental_ad_kilobytes int KB tylko p75, Waga reklamy: sieć

Mapowanie nazw danych BigQuery

Nazwa wskaźnika interfejsu CrUX API Nazwa danych BigQuery
cumulative_layout_shift layout_instability.cumulative_layout_shift
first_contentful_paint first_contentful_paint
interaction_to_next_paint interaction_to_next_paint
largest_contentful_paint largest_contentful_paint
experimental_time_to_first_byte experimental.time_to_first_byte
navigation_types navigation_types
form_factors nie dotyczy
round_trip_time round_trip_time
largest_contentful_paint_resource_type nie dotyczy
largest_contentful_paint_image_time_to_first_byte nie dotyczy
largest_contentful_paint_image_resource_load_delay nie dotyczy
largest_contentful_paint_image_resource_load_duration nie dotyczy
largest_contentful_paint_image_element_render_delay nie dotyczy
experimental_ad_count nie dotyczy
experimental_ad_density nie dotyczy
experimental_ad_cpu nie dotyczy
experimental_ad_kilobytes nie dotyczy

Okres zbierania

Od października 2022 r. interfejs CrUX API zawiera obiekt collectionPeriod z polami firstDate i endDate, które reprezentują daty rozpoczęcia i zakończenia okna agregacji. Na przykład:

    "collectionPeriod": {
      "firstDate": {
        "year": 2022,
        "month": 9,
        "day": 12
      },
      "lastDate": {
        "year": 2022,
        "month": 10,
        "day": 9
      }
    }

Dzięki temu możesz lepiej zrozumieć dane i dowiedzieć się, czy zostały już zaktualizowane w danym dniu, czy też są takie same jak poprzedniego dnia.

Okres zbierania danych jest też dostępny w PageSpeed Insights:

PageSpeed Insights wyświetla daty okresu zbierania danych w etykietce.
Daty okresu zbierania danych w PageSpeed Insights.

Dodatkowo collectionPeriod zawsze będzie wyświetlać 28 dni, nawet jeśli dane nie obejmują pełnych 28 dni (np. jeśli strona została uruchomiona mniej niż 28 dni temu). collectionPeriod to okres, w którym dane CrUX zostały zagregowane, a niekoniecznie okres, który te dane reprezentują.

Przykładowe zapytania

Zapytania są przesyłane jako obiekty JSON za pomocą żądania POST do https://chromeuxreport.googleapis.com/v1/records:queryRecord?key=[YOUR_API_KEY]" z danymi zapytania w formacie JSON w treści żądania POST:

{
  "origin": "https://example.com",
  "formFactor": "PHONE",
  "metrics": [
    "largest_contentful_paint",
    "experimental_time_to_first_byte"
  ]
}

Można go na przykład wywołać z curl za pomocą tego wiersza poleceń (zastąp API_KEY swoim kluczem):

curl -s --request POST 'https://chromeuxreport.googleapis.com/v1/records:queryRecord?key=API_KEY' \
    --header 'Accept: application/json' \
    --header 'Content-Type: application/json' \
    --data '{"formFactor":"PHONE","origin":"https://www.example.com","metrics":["largest_contentful_paint", "experimental_time_to_first_byte"]}'

Dane na poziomie strony są dostępne w interfejsie API po przekazaniu w zapytaniu parametru url zamiast origin:

{
  "url": "https://example.com/page",
  "formFactor": "PHONE",
  "metrics": [
    "largest_contentful_paint",
    "experimental_time_to_first_byte"
  ]
}

Jeśli właściwość metrics nie jest ustawiona, zwracane są wszystkie dostępne dane:

  • cumulative_layout_shift
  • first_contentful_paint
  • interaction_to_next_paint
  • largest_contentful_paint
  • experimental_time_to_first_byte
  • largest_contentful_paint_resource_type
  • largest_contentful_paint_image_time_to_first_byte
  • largest_contentful_paint_image_resource_load_delay
  • largest_contentful_paint_image_resource_load_duration
  • largest_contentful_paint_image_element_render_delay
  • navigation_types
  • round_trip_time
  • form_factors (raportowane tylko wtedy, gdy w żądaniu nie określono parametru formFactor)
  • experimental_ad_count (raportowane tylko w przypadku stron uwzględnionych w danych o reklamach)
  • experimental_ad_density (raportowane tylko w przypadku stron uwzględnionych w danych o reklamach)
  • experimental_ad_cpu (raportowane tylko w przypadku stron uwzględnionych w danych o reklamach)
  • experimental_ad_kilobytes (raportowane tylko w przypadku stron uwzględnionych w danych o reklamach)

Jeśli nie podasz wartości formFactor, wartości zostaną zagregowane we wszystkich formatach.

Więcej przykładowych zapytań znajdziesz w artykule Korzystanie z interfejsu Raport na temat użytkowania Chrome API.

Potok danych

Zbiór danych CrUX jest przetwarzany przez potok w celu konsolidacji, agregacji i filtrowania danych, zanim zostaną one udostępnione za pomocą interfejsu API.

Średnia krocząca

Dane w raporcie na temat użytkowania Chrome to średnia krocząca z 28 dni zagregowanych danych. Oznacza to, że dane prezentowane w raporcie na temat użytkowania Chrome w danym momencie to w rzeczywistości zagregowane dane z ostatnich 28 dni.

Jest to podobne do sposobu, w jaki zbiór danych CrUX w BigQuery agreguje raporty miesięczne.

Aktualizacje codzienne

Dane są aktualizowane codziennie około godziny 4:00 czasu UTC. Nie ma gwarancji jakości usług dotyczącej czasu aktualizacji. Jest ona przeprowadzana codziennie w miarę możliwości.

Schemat

Interfejs CrUX API ma jeden punkt końcowy, który akceptuje żądania HTTP POST. Interfejs API zwraca obiekt record, który zawiera co najmniej 1 obiekt metrics odpowiadający danym o skuteczności dotyczącym żądanego pochodzenia lub strony.

Żądanie HTTP

POST https://chromeuxreport.googleapis.com/v1/records:queryRecord

Adres URL używa składni transkodowania gRPC.

Treść żądania

Treść żądania powinna zawierać dane o następującej strukturze:

{
  "formFactor": enum (FormFactor),
  "metrics": [
    string
  ],

  // Union field url_pattern can be only one of the following:
  "origin": string,
  "url": string
  // End of list of possible types for union field url_pattern.
}
Pola
formFactor

enum (FormFactor)

Format to wymiar zapytania, który określa klasę urządzenia, do której powinny należeć dane rekordu.

To pole używa wartości DESKTOP, PHONE lub TABLET.

Uwaga: jeśli nie określisz formatu, zostanie zwrócony specjalny rekord z danymi zbiorczymi dotyczącymi wszystkich formatów.

metrics[]

string

Dane, które powinny zostać uwzględnione w odpowiedzi. Jeśli nie podasz żadnych wskaźników, zostaną zwrócone wszystkie znalezione wskaźniki.

Dozwolone wartości: ["cumulative_layout_shift", "first_contentful_paint", "interaction_to_next_paint", "largest_contentful_paint", "experimental_time_to_first_byte", "largest_contentful_paint_resource_type", "largest_contentful_paint_image_time_to_first_byte", "largest_contentful_paint_image_resource_load_delay", "largest_contentful_paint_image_resource_load_duration", "largest_contentful_paint_image_element_render_delay", "navigation_types", "round_trip_time", "experimental_ad_count", "experimental_ad_density", "experimental_ad_cpu", "experimental_ad_kilobytes"]

Pole zbiorcze url_pattern. url_pattern to główny identyfikator wyszukiwania rekordów. Może to być tylko jedna z tych wartości:
origin

string

url_pattern „Pochodzenie” to wzorzec adresu URL, który jest źródłem witryny.

Przykłady: "https://example.com", "https://cloud.google.com"

url

string

url_pattern url odnosi się do wzorca adresu URL, który jest dowolnym adresem URL.

Przykłady: "https://example.com/, https://cloud.google.com/why-google-cloud/"

Aby na przykład poprosić o wartości największego wyrenderowania treści na komputerze dla strony głównej dokumentacji dla deweloperów Chrome:

{
  "url": "https://developer.chrome.com/docs/",
  "formFactor": "DESKTOP",
  "metrics": [
    "largest_contentful_paint"
  ]
}

Treść odpowiedzi

Pomyślne żądania zwracają odpowiedzi z obiektem record i urlNormalizationDetails o następującej strukturze:

{
  "record": {
    "key": {
      object (Key)
    },
    "metrics": [
      string: {
        object (Metric)
      }
    ]
  },
  "urlNormalizationDetails": {
    object (UrlNormalization)
  }
}

Na przykład odpowiedź na treść żądania w poprzednim żądaniu może wyglądać tak:

{
  "record": {
    "key": {
      "formFactor": "DESKTOP",
      "url": "https://developer.chrome.com/docs/"
    },
    "metrics": {
      "largest_contentful_paint": {
        "histogram": [
          {
            "start": 0,
            "end": 2500,
            "density": 0.9815
          },
          {
            "start": 2500,
            "end": 4000,
            "density": 0.0108
          },
          {
            "start": 4000,
            "density": 0.0077
          }
        ],
        "percentiles": {
          "p75": 651
        }
      }
    },
    "collectionPeriod": {
      "firstDate": {
        "year": 2022,
        "month": 9,
        "day": 12
      },
      "lastDate": {
        "year": 2022,
        "month": 10,
        "day": 9
      }
    }
  }
}

Klucz

Key określa wszystkie wymiary, które identyfikują ten rekord jako unikalny.

{
  "formFactor": enum (FormFactor),

  // Union field url_pattern can be only one of the following:
  "origin": string,
  "url": string
  // End of list of possible types for union field url_pattern.
}
Pola
formFactor

enum (FormFactor)

Format to klasa urządzenia, którego wszyscy użytkownicy używali do uzyskiwania dostępu do witryny w przypadku tego rekordu.

Jeśli format nie jest określony, zwracane są dane zbiorcze ze wszystkich formatów.

Pole zbiorcze url_pattern. Wzorzec adresu URL to adres URL, którego dotyczy rekord. url_pattern może mieć tylko jedną z tych wartości:
origin

string

origin określa źródło, którego dotyczy ten rekord.

Uwaga: gdy podasz origin, dane o wczytywaniu wszystkich stron w tym źródle zostaną zagregowane w dane o wrażeniach użytkownika na poziomie źródła.

url

string

url określa konkretny adres URL, którego dotyczy ten rekord.

Uwaga: jeśli podasz url, zostaną zebrane tylko dane dotyczące tego konkretnego adresu URL.

Dane

metric to zestaw zagregowanych danych o wrażeniach użytkownika dotyczących pojedynczego wskaźnika wydajności strony internetowej, np. pierwszego wyrenderowania treści. Może zawierać histogram podsumowujący rzeczywiste wykorzystanie Chrome w postaci serii bins, konkretne dane percentylowe (np. p75) lub oznaczone etykietami ułamki.

{
  "histogram": [
    {
      object (Bin)
    }
  ],
  "percentiles": {
    object (Percentiles)
  }
}

lub

{
  "fractions": {
    object (Fractions)
  }
}
Pola
histogram[]

object (Bin)

Histogram wrażeń użytkowników w przypadku danego rodzaju danych. Histogram będzie zawierać co najmniej 1 przedział, a gęstości wszystkich przedziałów będą sumować się do około 1.

percentiles

object (Percentiles)

Typowe przydatne percentyle danych. Typ wartości dla percentyli będzie taki sam jak typy wartości podane dla przedziałów histogramu.

fractions

object (Fractions)

Ten obiekt zawiera oznaczone etykietami ułamki, które sumują się do ~1.

Ułamki są zaokrąglane do 4 miejsc po przecinku.

Przedział

bin to odrębna część danych obejmująca okres od początku do końca lub, jeśli nie podano końca, od początku do nieskończoności.

Wartości początkowa i końcowa przedziału są podawane w typie wartości danych, które reprezentuje. Na przykład pierwsze wyrenderowanie treści jest mierzone w milisekundach i wyświetlane jako liczby całkowite, więc przedziały wartości tego wskaźnika będą używać liczb całkowitych 32-bitowych jako typów początku i końca. Skumulowane przesunięcie układu jest jednak mierzone w ułamkach dziesiętnych bez jednostek i jest podawane jako ułamek dziesiętny zakodowany jako ciąg znaków, dlatego jego przedziały danych będą używać ciągów znaków jako typu wartości.

{
  "start": value,
  "end": value,
  "density": number
}
Pola
start

(integer | string)

Start to początek przedziału danych.

end

(integer | string)

Koniec to koniec przedziału danych. Jeśli nie podasz daty zakończenia, przedział nie będzie miał końca i będzie obowiązywać od daty rozpoczęcia do +inf.

density

number

Odsetek użytkowników, którzy w przypadku danego rodzaju danych osiągnęli wartość z tego przedziału.

Gęstości są zaokrąglane do 4 miejsc po przecinku.

Percentyle

Percentiles zawiera syntetyczne wartości danych w danym percentylu statystycznym. Służą one do szacowania wartości danych w przypadku odsetka użytkowników z ogólnej liczby użytkowników.

{
  "P75": value
}
Pola
p75

(integer | string)

W przypadku 75% wczytań strony dany wskaźnik był równy tej wartości lub niższy.

Ułamki

Fractions zawiera oznaczone etykietami ułamki, które sumują się do ~1. Każda etykieta w jakiś sposób opisuje wczytanie strony, więc dane przedstawione w ten sposób można traktować jako generujące odrębne wartości, a nie wartości liczbowe, a ułamki wyrażają, jak często mierzono daną wartość.

{
  "label_1": fraction,
  "label_2": fraction,
  ...
  "label_n": fraction
}

Podobnie jak wartości gęstości w przedziałach histogramu, każdy znak fraction to liczba0.0 <= value <= 1.0, a ich suma wynosi około 1,0.

UrlNormalization

Obiekt reprezentujący działania normalizacyjne podjęte w celu znormalizowania adresu URL, aby zwiększyć szansę na pomyślne wyszukanie. Są to podstawowe, automatyczne zmiany, które są wprowadzane, gdy wiadomo, że wyszukiwanie podanego url_pattern nie powiedzie się. Złożone działania, takie jak przekierowania, nie są obsługiwane.

{
  "originalUrl": string,
  "normalizedUrl": string
}
Pola
originalUrl

string

Pierwotny żądany adres URL przed jakimikolwiek działaniami normalizacyjnymi.

normalizedUrl

string

Adres URL po wykonaniu działań normalizacyjnych. Jest to prawidłowy adres URL, który można wyszukać.

Ograniczenia liczby żądań

Interfejs CrUX API jest ograniczony do 150 zapytań na minutę w przypadku każdego projektu Google Cloud. Jest on oferowany bezpłatnie. Ten limit i bieżące wykorzystanie możesz sprawdzić w konsoli Google Cloud. Ten duży limit powinien wystarczyć w większości przypadków użycia. Nie można zapłacić za zwiększenie limitu.