Tutorial PHP : Grabbing tarif harga Jasa Kurir TIKI dengan PHP

Sebelumnya saya pernah posting tentang bagaimana cara grabbing content di PHP. Saya pun tertarik untuk mengeksplorasi kemampuan ini untuk grabbing tarif harga jasa kurir TIKI. Kita tahu bahwa TIKI tidak menyediakan API ataupun akses database langsung bagi para kliennya. Bagi kita para pebisnis online selalu menginginkan bagaimana caranya agar Toko Online mereka mempunyai fitur penghitung tarif ongkos kirim otomatis, sehingga mereka tidak perlu susah payah meng-update harga jasa kurir di database Toko Online mereka.

Disini saya mencoba untuk mengambil konten tarif harga dari TIKI, saya masih belum bisa mencoba pada jasa kurir JNE karena masih kesulitan mengatasi captha yang mereka terapkan,atau mungkin ada metode lain yang bisa digunakan. Dalam tutorial ini saya menggunakan fungsi cURL dan HTML DOM.

Langkah pertama adalah membuat fungsi cURL dengan tambahan POST method. karena TIKI membutuhkan parameter post untuk mengolah database mereka. Buat file dengan nama apa saja berekstensikan .php. Setelah itu sisipkan syntax fungsi cURL ini di dalam file.

<?php
function httpPost($url,$params)
{
    $postData = '';
    //membangung query
    foreach($params as $k => $v)
    {
        $postData .= $k . '='.$v.'&';
    }
    rtrim($postData, '&');

    $ch = curl_init(); 

    curl_setopt($ch,CURLOPT_URL,$url);
    curl_setopt($ch,CURLOPT_RETURNTRANSFER,true);
    curl_setopt($ch,CURLOPT_HEADER, false);
    curl_setopt($ch, CURLOPT_POST, count($postData));
    curl_setopt($ch, CURLOPT_POSTFIELDS, $postData);   

    $output=curl_exec($ch);

    curl_close($ch);
    return $output;

}

?>

Setelah itu kita siapkan parameter yang dibutuhkan untuk POST fungsi di atas, sisipkan array seperti ini untuk membuat list parameter yang akan dikirim, sisipkan dibawah fungsi diatas

$params = array(
    "get_ori" => "BANDUNG", // nama kota asal, ganti sesuai keinginan kamu.
    "get_des" => "karawang", // nama kota tujuan
    "get_wg" => "1", // berat paket
    "submit" =>"Check" // ga usah si ubah :)
);

Setelah kita selesai membuat array parameter selanjutnya kita panggil fungsi diatas dan memasukan parameternya, sekalian kita init DOM yang nanti kita akan pakai untuk parse hasil cURL, sisipkan syntax ini dibawah syntax di atas.

// baca html menggunakan fungsi di atas, dan memasukan parameter
$bacaHTML = httpPost("http://www.tiki-online.com/?cat=KgfdshfF7788KHfskF",$params);

//inisialisasi DOM
$dom = new DomDocument();

//baca hasil output untuk di prosess oleh DOM
@$dom->loadHTML($bacaHTML);

Sampai tahap ini kita sudah mendapat hasil dari TIKI tetapi belum bisa digunakan karena masih dalam bentuk HTML. Selanjutnya kita parse hasil output cURL yang sudah dimasukan ke DOM untuk di proses, sisipkan lagi syntax berikut ini

//ambil semua elemen dengan tag table
$fetch =  $dom->getElementsByTagName('table');

//karena list harga yang di ambil ada di table urutan ke 3 maka ambil table ke 3
$table = $fetch->item(2);

//dari table ke 3 ambil semua row atau tag tr
$row = $table->getElementsByTagName('tr');

penjelasan singkat syntax di atas, pertama mencoba mengambil semua elemen yang memiliki tag table, karena list hasil TIKI disimpan dalam table. Setelah beberapa percobaan saya menemukan bahwa table yang berisi rincian tariff harga ada di table ke 3, disana dimasukan item(2); karena kalian sudah tahu bahwa semua berawal dari 0. Selanjutnya mengambil semua baris (tr) dari table yang sudah dipilih.

Setelah itu kita akan melakukan looping dari semua baris / row/ tr dari table dan memasukannya ke array.Sisipkan syntax ini di bawah syntax di atas.

foreach($row as $val){
    // row pertama tidak di ambil karena itu title/ judul table
    if ($no!=0){

        //dari row kita ambil semua td, di sini setiap row punya dua field / td
        $field = $row->item($no)->getElementsByTagName('td');

        //memasukan ke array dengan key
        $data[] = array(
            'service' => $field->item(0)->nodeValue,
            'harga' => $field->item(1)->nodeValue
        );
    }
    $no++;
}

Dari syntax diatas setiap row/td/baris memiliki dua field dan langsung memasukannya di array. Tahap ini menjelaskan bahwa kita sudah selesai melakukan grabbing Ongkir TIKI, selanjutnya kita akan menampilkan data array dengan membuat tampilan melalui syntax ini.

<style>
    table,th,td{
        border:1px solid #000;
        font-size:12px;
    }
</style>
<h2>Grabbing dari Tiki-Online.com</h2>
<table>
    <thead>
        <th>No</th>    
        <th>Servie</th>    
        <th>Harga</th>    
        <th>Tanggal</th>    
    </thead>
    <tbody>
        <?php
$no=1;
foreach($data as $val)
{
        ?>
        <tr>
            <td><?php echo $no;?></td>
            <td><?php echo $val['service'];?></td>
            <td><?php echo $val['harga'];?></td>
            <td><?php echo Date('d-M-Y');?></td>
        </tr>
        <?php
    $no++;
}
        ?>
    </tbody>
</table>

Selesai. Ini keseluruhan script nya :

<?php
function httpPost($url,$params)
{
    $postData = '';
    //membangung query
    foreach($params as $k => $v)
    {
        $postData .= $k . '='.$v.'&';
    }
    rtrim($postData, '&');

    $ch = curl_init(); 

    curl_setopt($ch,CURLOPT_URL,$url);
    curl_setopt($ch,CURLOPT_RETURNTRANSFER,true);
    curl_setopt($ch,CURLOPT_HEADER, false);
    curl_setopt($ch, CURLOPT_POST, count($postData));
    curl_setopt($ch, CURLOPT_POSTFIELDS, $postData);   

    $output=curl_exec($ch);

    curl_close($ch);
    return $output;

}
$params = array(
    "get_ori" => "BANDUNG", // nama kota asal, ganti sesuai keinginan kamu.
    "get_des" => "karawang", // nama kota tujuan
    "get_wg" => "1", // berat paket
    "submit" =>"Check" // ga usah si ubah :)
);

// baca html menggunakan fungsi di atas, dan memasukan parameter
$bacaHTML = httpPost("http://www.tiki-online.com/?cat=KgfdshfF7788KHfskF",$params);

//inisialisasi DOM
$dom = new DomDocument();

//baca hasil output untuk di prosess oleh DOM
@$dom->loadHTML($bacaHTML);

//ambil semua elemen dengan tag table
$fetch =  $dom->getElementsByTagName('table');

//karena list harga yang di ambil ada di table urutan ke 3 maka ambil table ke 3
$table = $fetch->item(2);

//dari table ke 3 ambil semua row atau tag tr
$row = $table->getElementsByTagName('tr');
$no =0;
foreach($row as $val){
    // row pertama tidak di ambil karena itu title/ judul table
    if ($no!=0){

        //dari row kita ambil semua td, di sini setiap row punya dua field / td
        $field = $row->item($no)->getElementsByTagName('td');

        //memasukan ke array dengan key
        $data[] = array(
            'service' => $field->item(0)->nodeValue,
            'harga' => $field->item(1)->nodeValue
        );
    }
    $no++;
}

?>
<style>
    table,th,td{
        border:1px solid #000;
        font-size:12px;
    }
</style>
<h2>Grabbing dari Tiki-Online.com</h2>
<table>
    <thead>
        <th>No</th>    
        <th>Servie</th>    
        <th>Harga</th>    
        <th>Tanggal</th>    
    </thead>
    <tbody>
        <?php
$no=1;
foreach($data as $val)
{
        ?>
        <tr>
            <td><?php echo $no;?></td>
            <td><?php echo $val['service'];?></td>
            <td><?php echo $val['harga'];?></td>
            <td><?php echo Date('d-M-Y');?></td>
        </tr>
        <?php
    $no++;
}
        ?>
    </tbody>
</table>

Mari kita tes, dengan parameter kota asal BANDUNG,Kota tujuan karawang dan berat 1 kg.

Dan itulah hasilnya. atau bisa mencoba LIVE DEMO
Download Source Codenya Disni
Mendapatkan Harga Ongkir JNE realtime dengan PHP.
Membuat CRUD di CodeIgniter
Tutorial PHP : Mengambil parameter dari string url
Tips cara menghasilkan uang dari internet tanpa harus mempunyai website
Beri +1,LIKE,SHARE ataupun FOLLOW jika bermanfaat dan tunggu tutorial tutorial selanjutnya.
Tag : php, tutorial
Back To Top