Sekolah Search + Detail #2
by RFour · Jul 21, 2026 ·javascript
I use this for my api stuff, Soo don't expect anything, it works perfectly fine for me and pretty good, I like thi cuz it's making it easier for me to do stuff :p
InfoSearchSekolahSchool
sekolah2.jsjavascript
1// join le channel bro https://whatsapp.com/channel/0029Vb8QWWl1yT1znzYESZ3b
2async function cari(body) {
3 const res = await fetch("https://sekolah.data.kemendikdasmen.go.id/v1/sekolah-service/sekolah/cari-sekolah", {
4 method: 'POST',
5 headers: {
6 'Accept': 'application/json, text/plain, */*',
7 'Content-Type': 'application/json',
8 'Origin': 'https://sekolah.data.kemendikdasmen.go.id',
9 'Referer': 'https://sekolah.data.kemendikdasmen.go.id/sekolah',
10 'User-Agent': 'Mozilla/5.0 (Linux; Android 10; K) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/137.0.0.0 Mobile Safari/537.36'
11 },
12 body: JSON.stringify(body)
13 });
14 return res.json();
15}
16
17async function detail(id) {
18 const res = await fetch(`https://sekolah.data.kemendikdasmen.go.id/v1/sekolah-service/sekolah/full-detail/${id}`, {
19 headers: {
20 'Accept': 'application/json, text/plain, */*',
21 'Referer': `https://sekolah.data.kemendikdasmen.go.id/profil-sekolah/${id}`,
22 'User-Agent': 'Mozilla/5.0 (Linux; Android 10; K) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/137.0.0.0 Mobile Safari/537.36'
23 }
24 });
25 return res.json();
26}
27
28async function wilayah(keyword) {
29 const res = await fetch("https://sekolah.data.kemendikdasmen.go.id/v1/sekolah-service/referensi/wilayah", {
30 method: 'POST',
31 headers: {
32 'Accept': 'application/json, text/plain, */*',
33 'Content-Type': 'application/json',
34 'Origin': 'https://sekolah.data.kemendikdasmen.go.id',
35 'Referer': 'https://sekolah.data.kemendikdasmen.go.id/sekolah',
36 'User-Agent': 'Mozilla/5.0 (Linux; Android 10; K) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/137.0.0.0 Mobile Safari/537.36'
37 },
38 body: JSON.stringify({ keyword })
39 });
40 return res.json();
41}
42
43export async function sekolah2(req) {
44 const { searchParams: sp } = new URL(req.url);
45 const q = sp.get('q');
46 const id = sp.get('id');
47 const mode = sp.get('mode') || 'search';
48 const page = Number(sp.get('page') || 0);
49 const size = Number(sp.get('size') || 12);
50 const kab = sp.get('kab') || '';
51 const bentuk = sp.get('bentuk') || '';
52 const status = sp.get('status') || '';
53 const wkey = sp.get('wilayah');
54
55 if (mode === 'wilayah') {
56 if (!wkey) return { error: "missing wilayah, /sekolah2?mode=wilayah&wilayah=Probolinggo" };
57 try {
58 const data = await wilayah(wkey);
59 return { status: true, params: { wilayah: wkey }, data: data.data || [] };
60 } catch (err) {
61 return { error: err.message };
62 }
63 }
64
65 if (mode === 'detail' && id) {
66 try {
67 const raw = await detail(id);
68 const d = raw.data || {};
69
70 return {
71 status: true,
72 params: { id },
73 data: {
74 profil: d.sekolah?.[0] || {},
75 foto: d.foto_sekolah || [],
76 ruang: d.ruang?.[0] || {},
77 ptk: d.ptk?.[0] || {},
78 kurikulum: d.kurikulum?.[0] || {},
79 rasio_siswa: d.rasio_siswa?.[0] || {},
80 rasio_rombel: d.rasio_rombel_ruang_kelas?.[0] || {},
81 rasio_guru: d.rasio_siswa_guru?.[0] || {},
82 persentase_guru: d.persentase_guru?.[0] || {},
83 persentase_kelas_layak: d.persentase_ruang_kelas_layak?.[0] || {},
84 sekolah_sekitar: d.sekolah_sekitar || [],
85 instansi_sekitar: d.instansi_sekitar || []
86 }
87 };
88 } catch (err) {
89 return { error: err.message };
90 }
91 }
92
93 if (!q) {
94 return {
95 error: "missing keyword",
96 usage: {
97 search: "/sekolah2?q=anwar",
98 filter: "/sekolah2?q=anwar&status=SWASTA&bentuk=MTs, MI&kab=Kab. Probolinggo",
99 page: "/sekolah2?q=anwar&page=1&size=12",
100 wilayah: "/sekolah2?mode=wilayah&wilayah=Karawang",
101 detail: "/sekolah2?mode=detail&id=A9B4AA6C-9093-4210-83D0-9F6AB175DBB5"
102 },
103 params: {
104 q: "keyword",
105 page: "halaman (0)",
106 size: "per halaman (12)",
107 kab: "Kab. Karawang",
108 bentuk: "SMA, SMK, MTs, MI",
109 status: "NEGERI, SWASTA"
110 }
111 };
112 }
113
114 try {
115 const body = {
116 page,
117 size,
118 keyword: q,
119 kabupaten_kota: kab,
120 bentuk_pendidikan: bentuk,
121 status_sekolah: status
122 };
123 const raw = await cari(body);
124 return {
125 status: true,
126 params: { q, page, size, kab, bentuk, status },
127 total: raw.total || 0,
128 data: raw.data || []
129 };
130 } catch (err) {
131 return { error: err.message };
132 }
133}