Sejm API w PHP

Sejm API to oficjalne, publiczne REST‑owe API Kancelarii Sejmu, umożliwiające dostęp do szerokiego zakresu danych o działalności Sejmu RP (X kadencja). Działa bez logowania i autoryzacji – wystarczy zapytać odpowiedni endpoint i otrzymać dane w JSON lub pliki

Obsługa API w PHP jest banalna (nie wymaga autoryzacji)

<?php

namespace Sejm;

class Client
{

    private $baseUrl = 'https://api.sejm.gov.pl/sejm/term10/';

    public function request($endpoint='', $params = [], $accept = 'application/json')
    {
        $url = $this->baseUrl . $endpoint;
        if (!empty($params)) {
            $url .= '?' . http_build_query($params);
        }

        $headers = [
            'Accept: ' . $accept
        ];

        $curl = curl_init();
        curl_setopt_array($curl, [
            CURLOPT_URL => $url,
            CURLOPT_RETURNTRANSFER => true,
            CURLOPT_FOLLOWLOCATION => true,
            CURLOPT_SSL_VERIFYPEER => true,
            CURLOPT_CUSTOMREQUEST => 'GET',
            CURLOPT_HTTPHEADER => $headers,
            CURLOPT_TIMEOUT => 30,
        ]);

        $response = curl_exec($curl);
        $httpCode = curl_getinfo($curl, CURLINFO_HTTP_CODE);
        $error = curl_error($curl);
        curl_close($curl);

        // Obsługa błędów cURL
        if ($error) {
            throw new \Exception("cURL Error: " . $error . ': ' . $endpoint . '[ ' . print_r($params, true) . " ]");
        }

        $res = json_decode($response, true);

        // Wszystko OK
        if ($httpCode == 200) {
            return $res;
        }

        $msg = match($httpCode) {
            400 => 'Bad Request',
            404 => 'Not Found',
            default => 'Unknown status code',
        };

        throw new \Exception(
            $msg . ': ' . $endpoint . '[ ' . print_r($params, true) . " ]\n\nResponse: " . print_r($res, true),
            $httpCode
        );
    }
}

?>

Skrypt z przykładem do pobrania z GitHub.

Oficjalna dokumentacja – https://api.sejm.gov.pl/

Swagger UI – https://api.sejm.gov.pl/

Co oferuje API?

  • 📋 Listy i szczegóły posłów
  • 🏛️ Kluby i koła poselskie
  • 👥 Komisje sejmowe i materiały z posiedzeń
  • 🗳️ Głosowania – zbiorcze i szczegółowe
  • 📝 Druki sejmowe i załączniki
  • Interpelacje i zapytania poselskie (wraz z odpowiedziami)
  • 🎥 Transmisje i wypowiedzi
  • 🌍 Grupy bilateralne

🔍 Główne endpointy

1. Kadencja

GET /sejm/term{kadencja} – informacje o bieżącej kadencji (np. "https://api.sejm.gov.pl/sejm/term10")

2. Posłowie

  • GET /sejm/term10/MP – pełna lista posłów (aktualnych i byłych)
  • GET /sejm/term10/MP/{leg} – dane posła (np. /1)
  • …/photo oraz …/photo-mini – zdjęcia w różnych rozdzielczościach

3. Głosowania

  • GET /sejm/term10/votings/{posiedzenie} – lista głosowań danego posiedzenia
  • GET .../votings/{posiedzenie}/{votingNum} – szczegóły konkretnego głosowania
  • GET /sejm/term10/MP/{leg}/votings/{posiedzenie}/{data} – jak głosował dany poseł

4. Druki

  • GET /sejm/term10/prints – lista wszystkich druków sejmowych
  • GET /sejm/term10/prints/{num} – szczegóły danego druku, w tym dokumenty, daty i linki.
  • GET .../prints/{num}/{attachment} – dostęp do konkretnych plików PDF

5. Kluby i koła

  • GET /sejm/term10/clubs – lista klubów/ kół poselskich (ID, nazwy, kontakt, liczebność) .
  • GET /.../clubs/{club} – szczegóły konkretnego klubu, w tym logo (.../logo) .

6. Komisje

  • GET /sejm/term10/committees – lista komisji
  • GET /.../committees/{code}/sittings – wszystkie posiedzenia komisji.
  • …/{num}/html lub /pdf – akta w HTML lub PDF

7. Interpelacje i zapytania poselskie

  • GET /sejm/term10/interpellations i /writtenQuestions – dostęp do zapytań z filtrowaniem, stronicowaniem.
  • GET /.../{num} – szczegółowe dane, listy odpowiedzi i załączniki (PDF, HTML odpowiedzi)

8. Inne

  • TransmisjeGET /videos/{unid}
  • Grupy bilateralne – lista i szczegóły grup
  • Wypowiedzi z posiedzeń – np. proceedings/{num}/{date}/transcripts

🔧 Zastosowania w praktyce

  • Tworzenie narzędzi do śledzenia aktywności poselskiej
  • Aplikacje informacyjne – np. wyszukiwanie druków lub interpelacji
  • Analizy statystyczne, np. frekwencja posłów, wyniki głosowań, efektywność klubów
  • Blogi i serwisy informacyjne – embedowanie wypowiedzi lub transmisji

Do pobrania

Skrypt do pobrania z GitHub.