dapodik-sdk (Python)
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
- Lisensi: MIT License © 2026 Ryan Ardian, SMA Negeri 1 Gedeg (smansage).
- Pengembang: Ryan Ardian (inisaya@ardianryan.com).
- Inspirasi & Atribusi: Adaptasi pustaka PHP Dapodik oleh Ade Reksi Susanto (
adereksisusanto/dapodik-api-php).
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)
| File | Size | Uploaded | |
|---|---|---|---|
| dapodik_sdk-1.0.0.tar.gz | 13.6 kB | Details |
Built distribution (wheel)
| File | Interpreter | ABI | Platform | Reset |
|---|---|---|---|---|
| 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 logRelease 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