Skip to main content

Dapodik Logo

dapodik-sdk (Python)

PyPI version License: MIT Python Version Pandas Ready Instagram

SDK Python modern, ringan (Zero Runtime Dependencies), dan type-safe untuk integrasi penarikan data WebService Dapodik Kemendikdasmen (port 5774).

Dipublikasikan dan dikelola oleh SMA Negeri 1 Gedeg (@smansagewithai)
Dikembangkan oleh Ryan Ardian


🏛️ Latar Belakang & Referensi

Pustaka ini merupakan modernisasi dan porting ekosistem Python yang mengadaptasi spesifikasi integrasi WebService Dapodik dari repositori referensi karya Ade Reksi Susanto (adereksisusanto/dapodik-api-php).

Versi Python ini dirancang khusus untuk pengolahan data analitik, AI/Machine Learning, integrasi backend (FastAPI, Django, Flask), data pipeline (Airflow, Celery), maupun otomasi skrip harian dengan dukungan konversi langsung ke Pandas DataFrame dan Excel.


⚡ Keunggulan Utama

  • 🪶 Zero Runtime Dependencies: Bekerja murni menggunakan Python Standard Library bawaan tanpa mewajibkan instalasi paket luar.
  • 🐼 Integrasi Instan Pandas & Excel: Ekspor data siswa, guru, atau rombel langsung ke Pandas DataFrame (.to_dataframe()) atau file .xlsx / .csv.
  • 🔄 Auto-Pagination Generator: Tarik ribuan data siswa tanpa khawatir kehabisan memori RAM dengan generator streaming.
  • 🛡️ Kepatuhan UU PDP No. 27/2022: Dilengkapi panduan kepatuhan perlindungan data pribadi siswa/guru Indonesia.
  • 🧩 Dukungan Operasi Tulis (POST): Mengirim nilai rapor (post_nilai) dan mata evaluasi (post_matev_rapor).

⚠️ Kepatuhan UU Perlindungan Data Pribadi (UU PDP No. 27/2022)

Aplikasi Dapodik memproses Data Pribadi Siswa dan Guru (NIK, NISN, no kontak, data orang tua). Pengembang wajib mematuhi UU Perlindungan Data Pribadi No. 27 Tahun 2022 Pasal 67. Jaga kerahasiaan token dan dilarang memublikasikan atau menyalahgunakan data tanpa hak.


📥 Instalasi

Pasang paket melalui pip:

pip install dapodik-sdk

(Opsional) Jika ingin menggunakan fitur konversi Pandas DataFrame:

pip install "dapodik-sdk[dataframe]"

🚀 Quickstart & Contoh Penggunaan

1. Inisialisasi Klien Dasar

from dapodik import DapodikClient

# Inisialisasi client
client = DapodikClient(
    npsn="20300001",
    token="TOKEN_WEBSERVICE_DAPODIK",
    host="192.168.1.100",  # IP Komputer Dapodik
    port=5774              # Default port Dapodik
)

# 1. Ambil Profil Sekolah
sekolah = client.get_sekolah()
print(f"Sekolah: {sekolah.first['nama']}")

# 2. Ambil Data Siswa (50 baris pertama)
siswa = client.get_peserta_didik(page=1, limit=50)
print(f"Total ditarik: {len(siswa)} siswa")

# 3. Filter data bawaan SDK
siswa_laki = siswa.filter(jenis_kelamin="L")
print(f"Jumlah siswa laki-laki: {len(siswa_laki)}")

2. Ekspor Instan ke Pandas DataFrame & Excel 📊

from dapodik import DapodikClient

client = DapodikClient(npsn="20300001", token="TOKEN_DAPODIK")

# Tarik seluruh siswa sekolah secara otomatis
semua_siswa = client.fetch_all_peserta_didik(limit=100)

# Konversi langsung ke Pandas DataFrame
df = semua_siswa.to_dataframe()

print(df[["nama", "nisn", "jenis_kelamin", "tempat_lahir"]].head())

# Ekspor ke Excel
df.to_excel("data_siswa_dapodik.xlsx", index=False)
print("Berhasil diekspor ke data_siswa_dapodik.xlsx!")

3. Integrasi ke Backend Modern (FastAPI) ⚡

from fastapi import FastAPI, HTTPException
from dapodik import DapodikClient, DapodikAuthError

app = FastAPI(title="Dapodik API Service")

client = DapodikClient(
    npsn="20300001",
    token="TOKEN_DAPODIK",
    host="127.0.0.1"
)

@app.get("/api/sekolah")
def get_sekolah():
    try:
        resp = client.get_sekolah()
        return resp.first
    except DapodikAuthError:
        raise HTTPException(status_code=401, detail="Token Dapodik tidak valid")

@app.get("/api/siswa")
def get_siswa(page: int = 1, limit: int = 50):
    return client.get_peserta_didik(page=page, limit=limit).to_list()

🔄 Auto-Pagination & Streaming (RAM Efisien)

Untuk sekolah dengan ribuan data, gunakan Generator Stream:

# Stream per-batch 100 siswa (hemat RAM)
for batch in client.iterate_peserta_didik(limit=100):
    print(f"Memproses batch berisi {len(batch)} siswa...")
    for siswa in batch:
        print(f" - {siswa['nama']} ({siswa['nisn']})")

📋 Daftar Endpoint Lengkap

Endpoint WebService Method Standar Method Alias Deskripsi
/getSekolah client.get_sekolah() client.sekolah() Profil & izin operasional sekolah
/getPengguna client.get_pengguna() client.pengguna() Akun operator & pengguna Dapodik
/getGtk client.get_gtk(page, limit) client.gtk() Data Guru & Tenaga Kependidikan
/getRombonganBelajar client.get_rombongan_belajar(sem) client.rombel() Data rombel beserta anggota & mapel
/getPesertaDidik client.get_peserta_didik(page, limit) client.pd() Data seluruh siswa lengkap
/getMataPelajaran client.get_mata_pelajaran(sem) client.mata_pelajaran() Referensi mata pelajaran nasional
/getMatevNilai client.get_matev_nilai(sem) client.matev_nilai() Referensi mata evaluasi nilai
/postNilai client.post_nilai(body, table) - Pengiriman nilai rapor (HTTP POST)
/postMatevRapor client.post_matev_rapor(body) - Pengiriman mata evaluasi (HTTP POST)

📄 Lisensi & Kontributor

Release files for dapodik-sdk 1.0.0

For a detailed explanation of source distributions (sdists) and built distributions (wheels), please see the package formats documentation.

Source distribution (sdist)

Source distribution for dapodik-sdk 1.0.0
File Size Uploaded
dapodik_sdk-1.0.0.tar.gz 13.6 kB Details

Built distribution (wheel)

Table of built distributions (wheels) for dapodik-sdk 1.0.0
File Interpreter ABI Platform
dapodik_sdk-1.0.0-py3-none-any.whl Python 3 none any Details

Total release size: 24.0 kB

Release files / dapodik_sdk-1.0.0.tar.gz

Download URL dapodik_sdk-1.0.0.tar.gz
Size 13.6 kB
Tags Source
SHA-256 checksum
How to use checksums
2cc4d9015bedf6eef22b7085a6e1631b48681051652b2521f7ddde54ee103296
BLAKE2b-256 checksum
How to use checksums
7b4096e1274fbbadda2e7fb7142d97cc5fd797bd0e76c49aac02d15904d2e251
Upload date
Uploaded using Trusted Publishing?
What is trusted publishing?
Yes
Uploaded via twine/7.0.0 CPython/3.13.14

Provenance

Provenance describes where a file came from. On PyPI, provenance is shared via attestations, which provide a verifiable record of the build or publishing details. View details, limitations and caveats.

PyPI Publish Attestation

PyPI verified that this artifact, at this checksum, originated from the publisher listed below.

Signed by GitHub Actions, verified by PyPI on Aug 30, 2026.

Transparency log

Release files / dapodik_sdk-1.0.0-py3-none-any.whl

Download URL dapodik_sdk-1.0.0-py3-none-any.whl
Size 10.4 kB
Tags Python 3
SHA-256 checksum
How to use checksums
8237de1d7611659beb5c8443315b80430daf80db6ee3ba751f57ccdc5f4af409
BLAKE2b-256 checksum
How to use checksums
4a2e0dfd9527722fd216491dd4a3d6272142439be88c28c8b8c9ff3555ca25a3
Upload date
Uploaded using Trusted Publishing?
What is trusted publishing?
Yes
Uploaded via twine/7.0.0 CPython/3.13.14

Provenance

Provenance describes where a file came from. On PyPI, provenance is shared via attestations, which provide a verifiable record of the build or publishing details. View details, limitations and caveats.

PyPI Publish Attestation

PyPI verified that this artifact, at this checksum, originated from the publisher listed below.

Signed by GitHub Actions, verified by PyPI on Aug 30, 2026.

Transparency log

Release history Release notifications | RSS feed

This release

1.0.0 This release

2 release files

Anthropic, PBC Visionary sponsor Bloomberg Visionary sponsor Hudson River Trading Visionary sponsor Meta Visionary sponsor NVIDIA Visionary sponsor Microsoft Sustainability sponsor Depot Continuous Integration AWS Cloud computing and Security Sponsor Datadog Monitoring Fastly CDN Google Download Analytics Sentry Error logging StatusPage Status page