knitr::opts_chunk$set(echo = TRUE)
Dalam era transformasi digital statistik resmi, integrasi data
antar-instansi menuntut metode pertukaran data yang cepat, aman, dan
efisien. Pemanfaatan Application Programming Interface (API)
menjadi solusi menggantikan metode konvensional berbasis pengiriman
berkas manual (file-sharing).
Penggunaan API dalam penarikan data memiliki beberapa keunggulan
utama:
Aliran Data Aktual (Real-Time Data Stream): API
memastikan bahwa data yang ditarik merupakan kondisi paling mutakhir
dari basis data pusat (live database). Setiap perubahan,
pembaruan, atau verifikasi data yang dilakukan di tingkat K/L penyedia
data akan langsung tecermin saat skrip dieksekusi, meminimalisasi risiko
analisis berbasis data usang.
Otomasi Alur Kerja (Automated Workflow): Melalui
pemrograman R, seluruh rangkaian proses mulai dari autentikasi,
pengunduhan, penataan struktur, hingga ekspor dokumen dapat dijadwalkan
secara otomatis tanpa intervensi manual.
Keamanan dan Akuntabilitas Data: Akses menggunakan token dinamis
berbasis waktu (MD5 hashing) memastikan bahwa jalur komunikasi
data terenkripsi dengan baik, mencegah akses tidak sah (unauthorized
access) terhadap data individu yang bersifat sensitif.
Standardisasi Format: Struktur data berbasis JSON memaksa adanya
standardisasi variabel, memudahkan proses replikasi skrip dan
pemeliharaan kode jangka panjang.
Pembuatan Token
Pada bagian ini, program mendefinisikan pembuatan token enkripsi
berbasis MD5 (Message-Digest algorithm 5) dengan
kombinasi teks statis dan dinamis berbasis tanggal hari ini untuk
keamanan akses data.
hari_ini <- format(Sys.Date(), "%Y%m%d")
teks_token <- paste0("bpspkp", hari_ini)
token_md5 <- digest(teks_token, algo = "md5", serialize = FALSE)
Request ke API
Endpoint
Proses pemanggilan data dilakukan dengan mengirimkan permintaan
(request) berbasis metode GET ke server target dengan melampirkan token
validasi.
## Menghubungi API menggunakan httr...
## Status Response: 200
Ekstraksi Data
JSON
Apabila koneksi ke API berhasil (Status 200), teks mentah berformat
JSON dari server akan diekstrak dan ditransformasikan ke dalam struktur
tabel data (Data Frame).
if (status_api == 200) {
json_text <- content(response, as = "text", encoding = "UTF-8")
data_api <- fromJSON(json_text)
# Validasi struktur data JSON untuk memastikan data diubah menjadi tabel (Data Frame)
if (is.data.frame(data_api)) {
df_bnba <- data_api
} else if ("data" %in% names(data_api) && is.data.frame(data_api$data)) {
df_bnba <- data_api$data
} else {
df_bnba <- as.data.frame(data_api)
}
df_bnba <- clean_names(df_bnba)
cat("Data berhasil ditarik. Jumlah baris:", nrow(df_bnba), "\n\n")
} else {
cat("Gagal menghubungi API. Proses ekstraksi dilewati.\n")
}
## Data berhasil ditarik. Jumlah baris: 515
Ekspor Data
Data yang telah tersimpan selanjutnya diekspor ke dalam beberapa
format penyimpanan sekunder, yaitu spreadsheet format csv dan file
format sav (SPSS).
## Memulai proses ekspor file...
## -> Berhasil menyimpan CSV: data_3Juta_2026_20260530.csv
## -> Berhasil menyimpan SAV (SPSS): data_3Juta_2026_20260530.sav
##
## Selesai! File Anda telah tersimpan di Working Directory.
## Lokasi folder Anda saat ini berada di: D:/2. Pengembangan diri/1 Exercise Bagus/Membaca API File
Resume
## Tanggal hari ini : 20260530
## Token MD5 Anda : 636e3bb8118488efe247c777945802de
## Status Response : 200
## Data berhasil ditarik. Jumlah baris: 515
Variabel Data API
## [1] "kode_provinsi" "kode_kabkota" "nama_provinsi" "nama_kabkota"
## [5] "deliniasi" "crusun_pb" "crusun_pk" "crusus_pb"
## [9] "crusus_pk" "cbsps" "cpsu" "csanitasi"
## [13] "capbd_prop_pb" "capbd_prop_pk" "capbd_pb" "capbd_pk"
## [17] "capbdes_pb" "capbdes_pk" "cdak" "crtlh"
## [21] "cflpp" "ckom" "cgwm" "cpmikro"
## [25] "cswa_pb" "cswa_pk" "ccsr_pb" "ccsr_pk"
Direktorat Statistik Kesejahteraan Rakyat, BPS, saptahas@bps.go.id
LS0tDQp0aXRsZTogIlBlbmFyaWthbiBEYXRhIG1lbGFsdWkgQVBJIg0KYXV0aG9yOiAiU2FwdGEgSGFzdGhvIFBvbmNvIg0KZGF0ZTogImByIFN5cy5EYXRlKClgIg0Kb3V0cHV0Og0KICBodG1sX2RvY3VtZW50Og0KICAgIGNvZGVfZG93bmxvYWQ6IHllcw0KICAgIGNvZGVfZm9sZGluZzogc2hvdw0KICAgIG51bWJlcl9zZWN0aW9uczogeWVzDQogICAgdGhlbWU6IGpvdXJuYWwNCiAgICB0b2M6IHllcw0KICAgIHRvY19mbG9hdDogeWVzDQogIHdvcmRfZG9jdW1lbnQ6DQogICAgdG9jOiB5ZXMNCi0tLQ0KDQpgYGB7PWh0bWx9DQo8c3R5bGU+DQpib2R5ew0KdGV4dC1hbGlnbjoganVzdGlmeX0NCjwvc3R5bGU+DQpgYGANCg0KDQpgYGB7ciBzZXR1cCwgaW5jbHVkZT1UUlVFfQ0Ka25pdHI6Om9wdHNfY2h1bmskc2V0KGVjaG8gPSBUUlVFKQ0KYGBgDQoNCkRhbGFtIGVyYSB0cmFuc2Zvcm1hc2kgZGlnaXRhbCBzdGF0aXN0aWsgcmVzbWksIGludGVncmFzaSBkYXRhIGFudGFyLWluc3RhbnNpIG1lbnVudHV0IG1ldG9kZSBwZXJ0dWthcmFuIGRhdGEgeWFuZyBjZXBhdCwgYW1hbiwgZGFuIGVmaXNpZW4uIFBlbWFuZmFhdGFuICpBcHBsaWNhdGlvbiBQcm9ncmFtbWluZyBJbnRlcmZhY2UqIChBUEkpIG1lbmphZGkgc29sdXNpIG1lbmdnYW50aWthbiBtZXRvZGUga29udmVuc2lvbmFsIGJlcmJhc2lzIHBlbmdpcmltYW4gYmVya2FzIG1hbnVhbCAoKmZpbGUtc2hhcmluZyopLg0KDQpQZW5nZ3VuYWFuIEFQSSBkYWxhbSBwZW5hcmlrYW4gZGF0YSBtZW1pbGlraSBiZWJlcmFwYSBrZXVuZ2d1bGFuIHV0YW1hOg0KDQoxLiBBbGlyYW4gRGF0YSBBa3R1YWwgKCpSZWFsLVRpbWUgRGF0YSBTdHJlYW0qKTogQVBJIG1lbWFzdGlrYW4gYmFod2EgZGF0YSB5YW5nIGRpdGFyaWsgbWVydXBha2FuIGtvbmRpc2kgcGFsaW5nIG11dGFraGlyIGRhcmkgYmFzaXMgZGF0YSBwdXNhdCAoKmxpdmUgZGF0YWJhc2UqKS4gU2V0aWFwIHBlcnViYWhhbiwgcGVtYmFydWFuLCBhdGF1IHZlcmlmaWthc2kgZGF0YSB5YW5nIGRpbGFrdWthbiBkaSB0aW5na2F0IEsvTCBwZW55ZWRpYSBkYXRhIGFrYW4gbGFuZ3N1bmcgdGVjZXJtaW4gc2FhdCBza3JpcCBkaWVrc2VrdXNpLCBtZW1pbmltYWxpc2FzaSByaXNpa28gYW5hbGlzaXMgYmVyYmFzaXMgZGF0YSB1c2FuZy4NCg0KMi4gT3RvbWFzaSBBbHVyIEtlcmphICgqQXV0b21hdGVkIFdvcmtmbG93Kik6IE1lbGFsdWkgcGVtcm9ncmFtYW4gUiwgc2VsdXJ1aCByYW5na2FpYW4gcHJvc2VzIG11bGFpIGRhcmkgYXV0ZW50aWthc2ksIHBlbmd1bmR1aGFuLCBwZW5hdGFhbiBzdHJ1a3R1ciwgaGluZ2dhIGVrc3BvciBkb2t1bWVuIGRhcGF0IGRpamFkd2Fsa2FuIHNlY2FyYSBvdG9tYXRpcyB0YW5wYSBpbnRlcnZlbnNpIG1hbnVhbC4NCg0KMy4gS2VhbWFuYW4gZGFuIEFrdW50YWJpbGl0YXMgRGF0YTogQWtzZXMgbWVuZ2d1bmFrYW4gdG9rZW4gZGluYW1pcyBiZXJiYXNpcyB3YWt0dSAoKk1ENSBoYXNoaW5nKikgbWVtYXN0aWthbiBiYWh3YSBqYWx1ciBrb211bmlrYXNpIGRhdGEgdGVyZW5rcmlwc2kgZGVuZ2FuIGJhaWssIG1lbmNlZ2FoIGFrc2VzIHRpZGFrIHNhaCAoKnVuYXV0aG9yaXplZCBhY2Nlc3MqKSB0ZXJoYWRhcCBkYXRhIGluZGl2aWR1IHlhbmcgYmVyc2lmYXQgc2Vuc2l0aWYuDQoNCjQuIFN0YW5kYXJkaXNhc2kgRm9ybWF0OiBTdHJ1a3R1ciBkYXRhIGJlcmJhc2lzIEpTT04gbWVtYWtzYSBhZGFueWEgc3RhbmRhcmRpc2FzaSB2YXJpYWJlbCwgbWVtdWRhaGthbiBwcm9zZXMgcmVwbGlrYXNpIHNrcmlwIGRhbiBwZW1lbGloYXJhYW4ga29kZSBqYW5na2EgcGFuamFuZy4NCg0KDQpgYGB7ciwgbWVzc2FnZT1GQUxTRSwgd2FybmluZz1GQUxTRSwgZWNobz1GQUxTRX0NCmxpYnJhcnkoaHR0cikNCmxpYnJhcnkoanNvbmxpdGUpDQpsaWJyYXJ5KGRpZ2VzdCkNCmxpYnJhcnkoaGF2ZW4pDQpsaWJyYXJ5KGphbml0b3IpDQpgYGANCg0KDQojIFBlbWJ1YXRhbiBUb2tlbg0KDQpQYWRhIGJhZ2lhbiBpbmksIHByb2dyYW0gbWVuZGVmaW5pc2lrYW4gcGVtYnVhdGFuIHRva2VuIGVua3JpcHNpICoqYmVyYmFzaXMgTUQ1IChNZXNzYWdlLURpZ2VzdCBhbGdvcml0aG0gNSkqKiBkZW5nYW4ga29tYmluYXNpIHRla3Mgc3RhdGlzIGRhbiBkaW5hbWlzIGJlcmJhc2lzIHRhbmdnYWwgaGFyaSBpbmkgdW50dWsga2VhbWFuYW4gYWtzZXMgZGF0YS4NCg0KYGBge3J9DQpoYXJpX2luaSA8LSBmb3JtYXQoU3lzLkRhdGUoKSwgIiVZJW0lZCIpDQp0ZWtzX3Rva2VuIDwtIHBhc3RlMCgiYnBzcGtwIiwgaGFyaV9pbmkpDQp0b2tlbl9tZDUgPC0gZGlnZXN0KHRla3NfdG9rZW4sIGFsZ28gPSAibWQ1Iiwgc2VyaWFsaXplID0gRkFMU0UpDQpgYGANCg0KIyBSZXF1ZXN0IGtlIEFQSSBFbmRwb2ludA0KDQpQcm9zZXMgcGVtYW5nZ2lsYW4gZGF0YSBkaWxha3VrYW4gZGVuZ2FuIG1lbmdpcmlta2FuIHBlcm1pbnRhYW4gKHJlcXVlc3QpIGJlcmJhc2lzIG1ldG9kZSBHRVQga2Ugc2VydmVyIHRhcmdldCBkZW5nYW4gbWVsYW1waXJrYW4gdG9rZW4gdmFsaWRhc2kuDQoNCmBgYHtyLCBtZXNzYWdlPUZBTFNFLCBlY2hvPUZBTFNFfQ0KI0lTSSBESVNJTkkNCmVuZHBvaW50X3VybCA8LSAiaHR0cHM6Ly9teS5wa3AuZ28uaWQvYXBpL2Jwc19jYXBhaWFuM2p1dGFydW1haCINCg0KY2F0KCJNZW5naHVidW5naSBBUEkgbWVuZ2d1bmFrYW4gaHR0ci4uLlxuIikNCnJlc3BvbnNlIDwtIEdFVChlbmRwb2ludF91cmwsIHF1ZXJ5ID0gbGlzdCh0b2tlbiA9IHRva2VuX21kNSkpDQoNCiMgTWVtZXJpa3NhIHN0YXR1cyByZXNwb24gc2VydmVyDQpzdGF0dXNfYXBpIDwtIHN0YXR1c19jb2RlKHJlc3BvbnNlKQ0KY2F0KCJTdGF0dXMgUmVzcG9uc2U6Iiwgc3RhdHVzX2FwaSwgIlxuIikNCmBgYA0KDQojIEVrc3RyYWtzaSBEYXRhIEpTT04NCg0KQXBhYmlsYSBrb25la3NpIGtlIEFQSSBiZXJoYXNpbCAoU3RhdHVzIDIwMCksIHRla3MgbWVudGFoIGJlcmZvcm1hdCBKU09OIGRhcmkgc2VydmVyIGFrYW4gZGlla3N0cmFrIGRhbiBkaXRyYW5zZm9ybWFzaWthbiBrZSBkYWxhbSBzdHJ1a3R1ciB0YWJlbCBkYXRhIChEYXRhIEZyYW1lKS4NCg0KYGBge3J9DQppZiAoc3RhdHVzX2FwaSA9PSAyMDApIHsNCiAganNvbl90ZXh0IDwtIGNvbnRlbnQocmVzcG9uc2UsIGFzID0gInRleHQiLCBlbmNvZGluZyA9ICJVVEYtOCIpDQogIGRhdGFfYXBpIDwtIGZyb21KU09OKGpzb25fdGV4dCkNCiAgICANCiAgIyBWYWxpZGFzaSBzdHJ1a3R1ciBkYXRhIEpTT04gdW50dWsgbWVtYXN0aWthbiBkYXRhIGRpdWJhaCBtZW5qYWRpIHRhYmVsIChEYXRhIEZyYW1lKQ0KICBpZiAoaXMuZGF0YS5mcmFtZShkYXRhX2FwaSkpIHsNCiAgICAgIGRmX2JuYmEgPC0gZGF0YV9hcGkNCiAgfSBlbHNlIGlmICgiZGF0YSIgJWluJSBuYW1lcyhkYXRhX2FwaSkgJiYgaXMuZGF0YS5mcmFtZShkYXRhX2FwaSRkYXRhKSkgew0KICAgICAgZGZfYm5iYSA8LSBkYXRhX2FwaSRkYXRhDQogIH0gZWxzZSB7DQogICAgICBkZl9ibmJhIDwtIGFzLmRhdGEuZnJhbWUoZGF0YV9hcGkpDQogIH0NCg0KICBkZl9ibmJhIDwtIGNsZWFuX25hbWVzKGRmX2JuYmEpDQogICAgDQogIGNhdCgiRGF0YSBiZXJoYXNpbCBkaXRhcmlrLiBKdW1sYWggYmFyaXM6IiwgbnJvdyhkZl9ibmJhKSwgIlxuXG4iKQ0KfSBlbHNlIHsNCiAgY2F0KCJHYWdhbCBtZW5naHVidW5naSBBUEkuIFByb3NlcyBla3N0cmFrc2kgZGlsZXdhdGkuXG4iKQ0KfQ0KYGBgDQoNCiMgRWtzcG9yIERhdGENCg0KRGF0YSB5YW5nIHRlbGFoIHRlcnNpbXBhbiBzZWxhbmp1dG55YSBkaWVrc3BvciBrZSBkYWxhbSBiZWJlcmFwYSBmb3JtYXQgcGVueWltcGFuYW4gc2VrdW5kZXIsIHlhaXR1IHNwcmVhZHNoZWV0IGZvcm1hdCBjc3YgZGFuIGZpbGUgZm9ybWF0IHNhdiAoU1BTUykuDQoNCmBgYHtyLCBtZXNzYWdlPUZBTFNFLCBlY2hvPUZBTFNFfQ0KaWYgKHN0YXR1c19hcGkgPT0gMjAwKSB7DQogIGNhdCgiTWVtdWxhaSBwcm9zZXMgZWtzcG9yIGZpbGUuLi5cbiIpDQojSVNJIERJU0lOSSAgDQogICMgMS4gVGVudHVrYW4gbmFtYSBmaWxlIGRpbmFtaXMgbWVuZ2d1bmFrYW4gdmFyaWFiZWwgdGFuZ2dhbCBoYXJpIGluaQ0KICBuYW1hX2ZpbGVfY3N2IDwtIHBhc3RlMCgiZGF0YV8zSnV0YV8yMDI2XyIsIGhhcmlfaW5pLCAiLmNzdiIpDQogIG5hbWFfZmlsZV9zYXYgPC0gcGFzdGUwKCJkYXRhXzNKdXRhXzIwMjZfIiwgaGFyaV9pbmksICIuc2F2IikNCiAgICANCiAgIyAyLiBFa3Nwb3Iga2UgZm9ybWF0IENTVg0KICB3cml0ZS5jc3YoZGZfYm5iYSwgZmlsZSA9IG5hbWFfZmlsZV9jc3YsIHJvdy5uYW1lcyA9IEZBTFNFLCBuYSA9ICIiKQ0KICBjYXQoIi0+IEJlcmhhc2lsIG1lbnlpbXBhbiBDU1Y6IiwgbmFtYV9maWxlX2NzdiwgIlxuIikNCiAgICANCiAgIyAzLiBFa3Nwb3Iga2UgZm9ybWF0IFNQU1MgKC5zYXYpIG1lbmdndW5ha2FuIGxpYnJhcnkgJ2hhdmVuJw0KICB3cml0ZV9zYXYoZGZfYm5iYSwgcGF0aCA9IG5hbWFfZmlsZV9zYXYpDQogIGNhdCgiLT4gQmVyaGFzaWwgbWVueWltcGFuIFNBViAoU1BTUyk6IiwgbmFtYV9maWxlX3NhdiwgIlxuXG4iKQ0KICAgIA0KICAjIEluZm9ybWFzaSBsb2thc2kgcGVueWltcGFuYW4NCiAgY2F0KCJTZWxlc2FpISBGaWxlIEFuZGEgdGVsYWggdGVyc2ltcGFuIGRpIFdvcmtpbmcgRGlyZWN0b3J5LlxuIikNCiAgY2F0KCJMb2thc2kgZm9sZGVyIEFuZGEgc2FhdCBpbmkgYmVyYWRhIGRpOiIsIGdldHdkKCksICJcbiIpDQp9IGVsc2Ugew0KICBjYXQoIkdhZ2FsIG1lbmdodWJ1bmdpIEFQSS4gUHJvc2VzIGVrc3BvciBkaWJhdGFsa2FuLlxuIikNCn0NCmBgYA0KDQojIFJlc3VtZQ0KDQpgYGB7ciwgbWVzc2FnZT1GQUxTRSwgZWNobz1GQUxTRX0NCmNhdCgiVGFuZ2dhbCBoYXJpIGluaSA6IiwgaGFyaV9pbmksICJcbiIpDQpjYXQoIlRva2VuIE1ENSBBbmRhICAgOiIsIHRva2VuX21kNSwgIlxuXG4iKQ0KDQpjYXQoIlN0YXR1cyBSZXNwb25zZSAgOiIsIHN0YXR1c19hcGksICJcbiIpDQoNCmNhdCgiRGF0YSBiZXJoYXNpbCBkaXRhcmlrLiBKdW1sYWggYmFyaXM6IiwgbnJvdyhkZl9ibmJhKSwgIlxuXG4iKQ0KYGBgDQoNCg0KKipWYXJpYWJlbCBEYXRhIEFQSSoqDQoNCmBgYHtyLCBtZXNzYWdlPUZBTFNFLCBlY2hvPUZBTFNFfQ0KaWYgKHN0YXR1c19hcGkgPT0gMjAwKSB7DQogIG5hbWVzKGRhdGFfYXBpKQ0KfSBlbHNlIHsNCiAgY2F0KCJEYXRhIHRpZGFrIHRlcnNlZGlhIGthcmVuYSBrZW5kYWxhIGtvbmVrc2kgQVBJLlxuIikNCn0NCmBgYA0KDQoNCi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tDQo+IERpcmVrdG9yYXQgU3RhdGlzdGlrIEtlc2VqYWh0ZXJhYW4gUmFreWF0LCBCUFMsIHNhcHRhaGFzQGJwcy5nby5pZA0KDQoNCg0KDQo=