--- title: "Kanibalizacja: sekcje (`getSections`)" source: https://docs.senuto.com/modules/visibility_analysis/va-cannibalization-getSections api: POST /api/visibility_analysis/reports/cannibalization/getSections --- # Kanibalizacja: sekcje (`getSections`) **`POST /api/visibility_analysis/reports/cannibalization/getSections`** Zwraca zbiorczy widok raportu kanibalizacji w podziale na **sekcje URL**: dla każdej sekcji serwisu (np. `zalando.pl/obuwie-damskie/`) podawana jest liczba skanibalizowanych fraz. Użyj tej akcji, aby szybko zlokalizować obszary serwisu najbardziej dotknięte kanibalizacją, a następnie przejść do szczegółów przez `getKeywords`. | Sekcja URL | Skanibalizowane frazy | | --- | --- | | zalando.pl/ | 733 | | zalando.pl/obuwie-damskie/ | 138 | _zalando.pl (limit: 2) — sekcje URL z liczbą skanibalizowanych fraz. Wszystkie adresowalne pola wiersza (`keywords_sum` zwracane jest jako string)._ --- ## Żądanie `POST` `/api/visibility_analysis/reports/cannibalization/getSections` Nagłówki: `Authorization: Bearer `, `Content-Type: application/json`. ### Struktura żądania **Podstawowy** ```jsonc filename="żądanie-podstawowe.jsonc" { "domain": "zalando.pl", "fetch_mode": "topLevelDomain", "country_id": 1 } ``` **Rozszerzony** ```jsonc filename="żądanie-rozszerzone.jsonc" { "domain": "zalando.pl", "fetch_mode": "topLevelDomain", "country_id": 1, "limit": 2, "page": 1 } ``` **cURL** ```bash curl --location --request POST 'https://api.senuto.com/api/visibility_analysis/reports/cannibalization/getSections' \ --header 'Content-Type: application/json' \ --header 'Authorization: Bearer $YOUR_TOKEN_HERE' \ --data-raw '{ "domain": "zalando.pl", "fetch_mode": "topLevelDomain", "country_id": 1, "limit": 2 }' ``` ### Parametry ```ts type CannibalizationGetSectionsRequest = { /** * **Wymagane**. Domena, subdomena, katalog lub URL do analizy — interpretowane zgodnie z `fetch_mode`. */ domain: string; /** * **Wymagane**. Sposób interpretacji `domain`. * - `topLevelDomain` — cała domena (najczęstszy przypadek) * - `subdomain` — pojedyncza subdomena * - `catalog` — ścieżka/katalog * - `url` — dokładny URL */ fetch_mode: 'topLevelDomain' | 'subdomain' | 'catalog' | 'url'; /** * **Wymagane**. Id kraju (bazy danych). Polska = `1`. Nieznana wartość → `418` z komunikatem `Unknown country_id`. */ country_id: number; /** * Liczba wierszy na stronę. * @default 10 */ limit?: number; /** * Numer strony. * @default 1 */ page?: number; /** * Okres odniesienia do porównania (baza wykrywania zmian kanibalizacji). * **Walidowane** — dozwolone: `week_ago_monday` (domyślny), `last_monday`, `yesterday`; * inna wartość zwraca `418`. */ days_compare_mode?: 'week_ago_monday' | 'last_monday' | 'yesterday'; } export default CannibalizationGetSectionsRequest ``` > **Ostrzeżenie:** > W przeciwieństwie do `cannibalization/getKeywords`, ten endpoint **nie obsługuje** `order` ani `filtering` — kontroler ich nie odczytuje. Sterowanie wynikiem to `limit`/`page` oraz `days_compare_mode`. > **Ostrzeżenie:** > Trzy parametry są **wymagane**: **`domain`**, **`fetch_mode`** oraz **`country_id`**. Nieznane `country_id` zwraca `418` z komunikatem `Unknown country_id`. Parametry `page` i `limit` są opcjonalne (domyślnie `1` / `10`). Uwaga: pole **`keywords_sum` w odpowiedzi jest łańcuchem znaków** (np. `"733"`), nie liczbą — przed obliczeniami skonwertuj je na liczbę. ## Odpowiedź W przypadku powodzenia otrzymujesz `data` (tablicę sekcji URL z liczbą skanibalizowanych fraz) oraz `pagination`. Zwróć uwagę, że `keywords_sum` jest zwracane jako **łańcuch znaków**, a nie liczba. **Skrócona** ```json filename="przykładowa-odpowiedź (skrócona)" { "success": true, "data": [ { "section": "zalando.pl/", "keywords_sum": "733" } ], "pagination": { "count": 646, "limit": 2 /* … */ } } ``` **Pełna** ```json filename="przykładowa-odpowiedź (200)" { "success": true, "data": [ { "section": "zalando.pl/", "keywords_sum": "733" }, { "section": "zalando.pl/obuwie-damskie/", "keywords_sum": "138" } ], "pagination": { "page_count": 323, "current_page": 1, "has_next_page": true, "has_prev_page": false, "count": 646, "limit": 2 } } ``` ### Struktura odpowiedzi ```ts type CannibalizationSectionsResponse = { /** `true` przy powodzeniu; przy błędzie `false` i koperta z `error` */ success: boolean; /** Zwrócone wiersze z sekcjami URL */ data: CannibalizationSectionRow[]; /** Metadane paginacji */ pagination: { page_count: number; current_page: number; has_next_page: boolean; has_prev_page: boolean; count: number; limit: number; }; } type CannibalizationSectionRow = { /** Sekcja URL serwisu, np. "zalando.pl/obuwie-damskie/" */ section: string; /** * Liczba skanibalizowanych fraz w sekcji. * Uwaga: zwracana jako łańcuch znaków (np. "733"), nie liczba. */ keywords_sum: string; } export default CannibalizationSectionsResponse ``` ## Błędy ```ts type ErrorResponse = { success: false; data: { error: { /** np. invalid_data, database, timeout, unknown */ type: string; message: string; /** pole -> reguła -> komunikat (dla invalid_data) */ params?: Record>; }; }; } export default ErrorResponse ``` > **Błąd:** > **`418`** zwracany jest także dla błędów walidacji. Nieznane `country_id` → komunikat `Unknown country_id`. Pominięcie któregokolwiek wymaganego pola (`domain`, `fetch_mode`, `country_id`) skutkuje błędem walidacji. ## Powiązane akcje - [`getKeywords`](/modules/visibility_analysis/va-cannibalization-getKeywords) — frazy dotknięte kanibalizacją wraz ze statystykami - `getSections` — liczba skanibalizowanych fraz w podziale na sekcje URL (ta strona)