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:

  1. 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.

  2. 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.

  3. 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.

  4. Standardisasi Format: Struktur data berbasis JSON memaksa adanya standardisasi variabel, memudahkan proses replikasi skrip dan pemeliharaan kode jangka panjang.

1 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)

2 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

3 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

4 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

5 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,

LS0tDQp0aXRsZTogIlBlbmFyaWthbiBEYXRhIG1lbGFsdWkgQVBJIg0KYXV0aG9yOiAiU2FwdGEgSGFzdGhvIFBvbmNvIg0KZGF0ZTogImByIFN5cy5EYXRlKClgIg0Kb3V0cHV0Og0KICBodG1sX2RvY3VtZW50Og0KICAgIGNvZGVfZG93bmxvYWQ6IHllcw0KICAgIGNvZGVfZm9sZGluZzogc2hvdw0KICAgIG51bWJlcl9zZWN0aW9uczogeWVzDQogICAgdGhlbWU6IGpvdXJuYWwNCiAgICB0b2M6IHllcw0KICAgIHRvY19mbG9hdDogeWVzDQogIHdvcmRfZG9jdW1lbnQ6DQogICAgdG9jOiB5ZXMNCi0tLQ0KDQpgYGB7PWh0bWx9DQo8c3R5bGU+DQpib2R5ew0KdGV4dC1hbGlnbjoganVzdGlmeX0NCjwvc3R5bGU+DQpgYGANCg0KDQpgYGB7ciBzZXR1cCwgaW5jbHVkZT1UUlVFfQ0Ka25pdHI6Om9wdHNfY2h1bmskc2V0KGVjaG8gPSBUUlVFKQ0KYGBgDQoNCkRhbGFtIGVyYSB0cmFuc2Zvcm1hc2kgZGlnaXRhbCBzdGF0aXN0aWsgcmVzbWksIGludGVncmFzaSBkYXRhIGFudGFyLWluc3RhbnNpIG1lbnVudHV0IG1ldG9kZSBwZXJ0dWthcmFuIGRhdGEgeWFuZyBjZXBhdCwgYW1hbiwgZGFuIGVmaXNpZW4uIFBlbWFuZmFhdGFuICpBcHBsaWNhdGlvbiBQcm9ncmFtbWluZyBJbnRlcmZhY2UqIChBUEkpIG1lbmphZGkgc29sdXNpIG1lbmdnYW50aWthbiBtZXRvZGUga29udmVuc2lvbmFsIGJlcmJhc2lzIHBlbmdpcmltYW4gYmVya2FzIG1hbnVhbCAoKmZpbGUtc2hhcmluZyopLg0KDQpQZW5nZ3VuYWFuIEFQSSBkYWxhbSBwZW5hcmlrYW4gZGF0YSBtZW1pbGlraSBiZWJlcmFwYSBrZXVuZ2d1bGFuIHV0YW1hOg0KDQoxLiBBbGlyYW4gRGF0YSBBa3R1YWwgKCpSZWFsLVRpbWUgRGF0YSBTdHJlYW0qKTogQVBJIG1lbWFzdGlrYW4gYmFod2EgZGF0YSB5YW5nIGRpdGFyaWsgbWVydXBha2FuIGtvbmRpc2kgcGFsaW5nIG11dGFraGlyIGRhcmkgYmFzaXMgZGF0YSBwdXNhdCAoKmxpdmUgZGF0YWJhc2UqKS4gU2V0aWFwIHBlcnViYWhhbiwgcGVtYmFydWFuLCBhdGF1IHZlcmlmaWthc2kgZGF0YSB5YW5nIGRpbGFrdWthbiBkaSB0aW5na2F0IEsvTCBwZW55ZWRpYSBkYXRhIGFrYW4gbGFuZ3N1bmcgdGVjZXJtaW4gc2FhdCBza3JpcCBkaWVrc2VrdXNpLCBtZW1pbmltYWxpc2FzaSByaXNpa28gYW5hbGlzaXMgYmVyYmFzaXMgZGF0YSB1c2FuZy4NCg0KMi4gT3RvbWFzaSBBbHVyIEtlcmphICgqQXV0b21hdGVkIFdvcmtmbG93Kik6IE1lbGFsdWkgcGVtcm9ncmFtYW4gUiwgc2VsdXJ1aCByYW5na2FpYW4gcHJvc2VzIG11bGFpIGRhcmkgYXV0ZW50aWthc2ksIHBlbmd1bmR1aGFuLCBwZW5hdGFhbiBzdHJ1a3R1ciwgaGluZ2dhIGVrc3BvciBkb2t1bWVuIGRhcGF0IGRpamFkd2Fsa2FuIHNlY2FyYSBvdG9tYXRpcyB0YW5wYSBpbnRlcnZlbnNpIG1hbnVhbC4NCg0KMy4gS2VhbWFuYW4gZGFuIEFrdW50YWJpbGl0YXMgRGF0YTogQWtzZXMgbWVuZ2d1bmFrYW4gdG9rZW4gZGluYW1pcyBiZXJiYXNpcyB3YWt0dSAoKk1ENSBoYXNoaW5nKikgbWVtYXN0aWthbiBiYWh3YSBqYWx1ciBrb211bmlrYXNpIGRhdGEgdGVyZW5rcmlwc2kgZGVuZ2FuIGJhaWssIG1lbmNlZ2FoIGFrc2VzIHRpZGFrIHNhaCAoKnVuYXV0aG9yaXplZCBhY2Nlc3MqKSB0ZXJoYWRhcCBkYXRhIGluZGl2aWR1IHlhbmcgYmVyc2lmYXQgc2Vuc2l0aWYuDQoNCjQuIFN0YW5kYXJkaXNhc2kgRm9ybWF0OiBTdHJ1a3R1ciBkYXRhIGJlcmJhc2lzIEpTT04gbWVtYWtzYSBhZGFueWEgc3RhbmRhcmRpc2FzaSB2YXJpYWJlbCwgbWVtdWRhaGthbiBwcm9zZXMgcmVwbGlrYXNpIHNrcmlwIGRhbiBwZW1lbGloYXJhYW4ga29kZSBqYW5na2EgcGFuamFuZy4NCg0KDQpgYGB7ciwgbWVzc2FnZT1GQUxTRSwgd2FybmluZz1GQUxTRSwgZWNobz1GQUxTRX0NCmxpYnJhcnkoaHR0cikNCmxpYnJhcnkoanNvbmxpdGUpDQpsaWJyYXJ5KGRpZ2VzdCkNCmxpYnJhcnkoaGF2ZW4pDQpsaWJyYXJ5KGphbml0b3IpDQpgYGANCg0KDQojIFBlbWJ1YXRhbiBUb2tlbg0KDQpQYWRhIGJhZ2lhbiBpbmksIHByb2dyYW0gbWVuZGVmaW5pc2lrYW4gcGVtYnVhdGFuIHRva2VuIGVua3JpcHNpICoqYmVyYmFzaXMgTUQ1IChNZXNzYWdlLURpZ2VzdCBhbGdvcml0aG0gNSkqKiBkZW5nYW4ga29tYmluYXNpIHRla3Mgc3RhdGlzIGRhbiBkaW5hbWlzIGJlcmJhc2lzIHRhbmdnYWwgaGFyaSBpbmkgdW50dWsga2VhbWFuYW4gYWtzZXMgZGF0YS4NCg0KYGBge3J9DQpoYXJpX2luaSA8LSBmb3JtYXQoU3lzLkRhdGUoKSwgIiVZJW0lZCIpDQp0ZWtzX3Rva2VuIDwtIHBhc3RlMCgiYnBzcGtwIiwgaGFyaV9pbmkpDQp0b2tlbl9tZDUgPC0gZGlnZXN0KHRla3NfdG9rZW4sIGFsZ28gPSAibWQ1Iiwgc2VyaWFsaXplID0gRkFMU0UpDQpgYGANCg0KIyBSZXF1ZXN0IGtlIEFQSSBFbmRwb2ludA0KDQpQcm9zZXMgcGVtYW5nZ2lsYW4gZGF0YSBkaWxha3VrYW4gZGVuZ2FuIG1lbmdpcmlta2FuIHBlcm1pbnRhYW4gKHJlcXVlc3QpIGJlcmJhc2lzIG1ldG9kZSBHRVQga2Ugc2VydmVyIHRhcmdldCBkZW5nYW4gbWVsYW1waXJrYW4gdG9rZW4gdmFsaWRhc2kuDQoNCmBgYHtyLCBtZXNzYWdlPUZBTFNFLCBlY2hvPUZBTFNFfQ0KI0lTSSBESVNJTkkNCmVuZHBvaW50X3VybCA8LSAiaHR0cHM6Ly9teS5wa3AuZ28uaWQvYXBpL2Jwc19jYXBhaWFuM2p1dGFydW1haCINCg0KY2F0KCJNZW5naHVidW5naSBBUEkgbWVuZ2d1bmFrYW4gaHR0ci4uLlxuIikNCnJlc3BvbnNlIDwtIEdFVChlbmRwb2ludF91cmwsIHF1ZXJ5ID0gbGlzdCh0b2tlbiA9IHRva2VuX21kNSkpDQoNCiMgTWVtZXJpa3NhIHN0YXR1cyByZXNwb24gc2VydmVyDQpzdGF0dXNfYXBpIDwtIHN0YXR1c19jb2RlKHJlc3BvbnNlKQ0KY2F0KCJTdGF0dXMgUmVzcG9uc2U6Iiwgc3RhdHVzX2FwaSwgIlxuIikNCmBgYA0KDQojIEVrc3RyYWtzaSBEYXRhIEpTT04NCg0KQXBhYmlsYSBrb25la3NpIGtlIEFQSSBiZXJoYXNpbCAoU3RhdHVzIDIwMCksIHRla3MgbWVudGFoIGJlcmZvcm1hdCBKU09OIGRhcmkgc2VydmVyIGFrYW4gZGlla3N0cmFrIGRhbiBkaXRyYW5zZm9ybWFzaWthbiBrZSBkYWxhbSBzdHJ1a3R1ciB0YWJlbCBkYXRhIChEYXRhIEZyYW1lKS4NCg0KYGBge3J9DQppZiAoc3RhdHVzX2FwaSA9PSAyMDApIHsNCiAganNvbl90ZXh0IDwtIGNvbnRlbnQocmVzcG9uc2UsIGFzID0gInRleHQiLCBlbmNvZGluZyA9ICJVVEYtOCIpDQogIGRhdGFfYXBpIDwtIGZyb21KU09OKGpzb25fdGV4dCkNCiAgICANCiAgIyBWYWxpZGFzaSBzdHJ1a3R1ciBkYXRhIEpTT04gdW50dWsgbWVtYXN0aWthbiBkYXRhIGRpdWJhaCBtZW5qYWRpIHRhYmVsIChEYXRhIEZyYW1lKQ0KICBpZiAoaXMuZGF0YS5mcmFtZShkYXRhX2FwaSkpIHsNCiAgICAgIGRmX2JuYmEgPC0gZGF0YV9hcGkNCiAgfSBlbHNlIGlmICgiZGF0YSIgJWluJSBuYW1lcyhkYXRhX2FwaSkgJiYgaXMuZGF0YS5mcmFtZShkYXRhX2FwaSRkYXRhKSkgew0KICAgICAgZGZfYm5iYSA8LSBkYXRhX2FwaSRkYXRhDQogIH0gZWxzZSB7DQogICAgICBkZl9ibmJhIDwtIGFzLmRhdGEuZnJhbWUoZGF0YV9hcGkpDQogIH0NCg0KICBkZl9ibmJhIDwtIGNsZWFuX25hbWVzKGRmX2JuYmEpDQogICAgDQogIGNhdCgiRGF0YSBiZXJoYXNpbCBkaXRhcmlrLiBKdW1sYWggYmFyaXM6IiwgbnJvdyhkZl9ibmJhKSwgIlxuXG4iKQ0KfSBlbHNlIHsNCiAgY2F0KCJHYWdhbCBtZW5naHVidW5naSBBUEkuIFByb3NlcyBla3N0cmFrc2kgZGlsZXdhdGkuXG4iKQ0KfQ0KYGBgDQoNCiMgRWtzcG9yIERhdGENCg0KRGF0YSB5YW5nIHRlbGFoIHRlcnNpbXBhbiBzZWxhbmp1dG55YSBkaWVrc3BvciBrZSBkYWxhbSBiZWJlcmFwYSBmb3JtYXQgcGVueWltcGFuYW4gc2VrdW5kZXIsIHlhaXR1IHNwcmVhZHNoZWV0IGZvcm1hdCBjc3YgZGFuIGZpbGUgZm9ybWF0IHNhdiAoU1BTUykuDQoNCmBgYHtyLCBtZXNzYWdlPUZBTFNFLCBlY2hvPUZBTFNFfQ0KaWYgKHN0YXR1c19hcGkgPT0gMjAwKSB7DQogIGNhdCgiTWVtdWxhaSBwcm9zZXMgZWtzcG9yIGZpbGUuLi5cbiIpDQojSVNJIERJU0lOSSAgDQogICMgMS4gVGVudHVrYW4gbmFtYSBmaWxlIGRpbmFtaXMgbWVuZ2d1bmFrYW4gdmFyaWFiZWwgdGFuZ2dhbCBoYXJpIGluaQ0KICBuYW1hX2ZpbGVfY3N2IDwtIHBhc3RlMCgiZGF0YV8zSnV0YV8yMDI2XyIsIGhhcmlfaW5pLCAiLmNzdiIpDQogIG5hbWFfZmlsZV9zYXYgPC0gcGFzdGUwKCJkYXRhXzNKdXRhXzIwMjZfIiwgaGFyaV9pbmksICIuc2F2IikNCiAgICANCiAgIyAyLiBFa3Nwb3Iga2UgZm9ybWF0IENTVg0KICB3cml0ZS5jc3YoZGZfYm5iYSwgZmlsZSA9IG5hbWFfZmlsZV9jc3YsIHJvdy5uYW1lcyA9IEZBTFNFLCBuYSA9ICIiKQ0KICBjYXQoIi0+IEJlcmhhc2lsIG1lbnlpbXBhbiBDU1Y6IiwgbmFtYV9maWxlX2NzdiwgIlxuIikNCiAgICANCiAgIyAzLiBFa3Nwb3Iga2UgZm9ybWF0IFNQU1MgKC5zYXYpIG1lbmdndW5ha2FuIGxpYnJhcnkgJ2hhdmVuJw0KICB3cml0ZV9zYXYoZGZfYm5iYSwgcGF0aCA9IG5hbWFfZmlsZV9zYXYpDQogIGNhdCgiLT4gQmVyaGFzaWwgbWVueWltcGFuIFNBViAoU1BTUyk6IiwgbmFtYV9maWxlX3NhdiwgIlxuXG4iKQ0KICAgIA0KICAjIEluZm9ybWFzaSBsb2thc2kgcGVueWltcGFuYW4NCiAgY2F0KCJTZWxlc2FpISBGaWxlIEFuZGEgdGVsYWggdGVyc2ltcGFuIGRpIFdvcmtpbmcgRGlyZWN0b3J5LlxuIikNCiAgY2F0KCJMb2thc2kgZm9sZGVyIEFuZGEgc2FhdCBpbmkgYmVyYWRhIGRpOiIsIGdldHdkKCksICJcbiIpDQp9IGVsc2Ugew0KICBjYXQoIkdhZ2FsIG1lbmdodWJ1bmdpIEFQSS4gUHJvc2VzIGVrc3BvciBkaWJhdGFsa2FuLlxuIikNCn0NCmBgYA0KDQojIFJlc3VtZQ0KDQpgYGB7ciwgbWVzc2FnZT1GQUxTRSwgZWNobz1GQUxTRX0NCmNhdCgiVGFuZ2dhbCBoYXJpIGluaSA6IiwgaGFyaV9pbmksICJcbiIpDQpjYXQoIlRva2VuIE1ENSBBbmRhICAgOiIsIHRva2VuX21kNSwgIlxuXG4iKQ0KDQpjYXQoIlN0YXR1cyBSZXNwb25zZSAgOiIsIHN0YXR1c19hcGksICJcbiIpDQoNCmNhdCgiRGF0YSBiZXJoYXNpbCBkaXRhcmlrLiBKdW1sYWggYmFyaXM6IiwgbnJvdyhkZl9ibmJhKSwgIlxuXG4iKQ0KYGBgDQoNCg0KKipWYXJpYWJlbCBEYXRhIEFQSSoqDQoNCmBgYHtyLCBtZXNzYWdlPUZBTFNFLCBlY2hvPUZBTFNFfQ0KaWYgKHN0YXR1c19hcGkgPT0gMjAwKSB7DQogIG5hbWVzKGRhdGFfYXBpKQ0KfSBlbHNlIHsNCiAgY2F0KCJEYXRhIHRpZGFrIHRlcnNlZGlhIGthcmVuYSBrZW5kYWxhIGtvbmVrc2kgQVBJLlxuIikNCn0NCmBgYA0KDQoNCi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tDQo+IERpcmVrdG9yYXQgU3RhdGlzdGlrIEtlc2VqYWh0ZXJhYW4gUmFreWF0LCBCUFMsIHNhcHRhaGFzQGJwcy5nby5pZA0KDQoNCg0KDQo=