Belakangan ini saya mendapatkan proyek untuk membuat sebuah website untuk perusahaan tour dan travel. Sempat ada keraguan dalam diri saya, karena ada permintaan dari klien agar dalam wesbite mereka disediakan fitur fungsi online ticketing. Fungsi itu nantinya akan mempermudah user untuk mengecek, misal jadwal penerbangan, seat avaibility, reservasi, dsb. Bukan hal yang mudah tentu saja, mengingat jika ingin seperti itu, tentu saja dibutuhkan basis data online yang tersambung dengan perusahaan penerbangan langsung. Tentu saja perusahaan penerbangan tidak sembarangan dalam menyediakan data mereka. Tidak ada API (Application Programming Interface) yang bisa digunakan untuk mengakses data ke sana. Tapi dalam situs-situs resmi perusahaan penerbangan ada fitur-fitur untuk mengecek jadwal penerbangan juga. Nah di sanalah nampaknya kita bisa mendapatkan data-data.
Nah sekarang permasalahannya adalah bagaimana data tersebut bisa saya ambil dan ditampilkan di website saya. Nah sambil mencoba programming sana-sini, ternyata tadi malam saya menemukan kasus yang bisa diuji coba juga. Tanggal 17 April 2010 kemarin adalah momen pengumuman hasil seleksi ujian tulis UM UGM 2010. Mulai pagi dini hari situs pengumuman tersebut bisa diakses untuk mengecek kelulusan. Hasil seleksi tidak ditampilkan semua, namun hanya person per person saja, yaitu dengan cara memasukkan nomor peserta, barulah dia bisa mengecek hasilnya.
Jika peserta dinyatakan lulus:
Jika tidak:
Saat itu saya ingin mengecek kelulusan adik-adik kelas SMA saya. Akan sangat melelahkan jika saya harus mengecek satu persatu, itupun kalau jarak nomor peserta mereka berdekatan. Nah saya ingin mencoba mengambil data hasil seleksi tersebut dan menampilkannya di website saya, dengan format yang saya inginkan tentu saja.
Nah setelah trial n error selama 1 jam di dini hari itu, dengan bantuan googling sana-sini dan mempelajari kembali cURL PHP, dan sebuah PHP class library untuk mempermudah melakukan manipulasi HTML DOM, saya menulis baris kode ini:
include('simple_html_dom.php');
set_time_limit(0);
$start = $_REQUEST['start'];
$end = $_REQUEST['end'];
if($_REQUEST['start'] != '') {
echo "<table border='1'>";
echo "<tr><td>Nomor Peserta</td><td>Nama</td><td>Hasil</td></tr>";
for($n=$start; $n<=$end; $n++) {
$url = 'http://um1.ugm.ac.id/index.php?pModule=pengumuman_lulus&pSub=pengumuman_lulus&pAct=view&jlr=utul';
$data = 'kata_kunci='.$n.'&lihat_lokasi_ujian=Cari';
$ch = curl_init();
curl_setopt($ch, CURLOPT_RETURNTRANSFER, 1);
curl_setopt($ch, CURLOPT_URL, $url);
curl_setopt($ch, CURLOPT_POSTFIELDS, $data);
$Rec_Data = curl_exec($ch);
$html = str_get_html($Rec_Data);
echo "<tr>";
foreach($html->find('table') as $e) {
echo "<td>" . $e->find('td', 2)->plaintext . "</td>";
$lulus = $e->find('td', 9)->plaintext;
$pos = strpos($lulus, "Maaf,");
if($pos === false) {
echo "<td>" . ucwords(strtolower($e->find('td', 11)->plaintext)) . "</td>";
echo "<td>";
echo ucwords(strtolower($e->find('td', 18)->plaintext)) . " - " . ucwords(strtolower($e->find('td', 15)->plaintext));
echo "</td>";
}
else {
echo "<td>" . ucwords(strtolower($e->find('td', 8)->plaintext)) . "</td>";
echo "<td>Coba Lagi
</td>";
}
}
echo "</tr>";
}
echo "</table>";
}
Dan hasilnya adalah seperti ini:
Demo: Link Demo Script (tapi saya batasi 50 baris per request)
Walau mungkin algoritma pemrogramannya agak serem bin ekstrim (karena bisa bikin down server karena banyaknya request), yang penting bisa memenuhi apa yang saya cari lah
Setidaknya dalam waktu 1 jam saya bisa mengumpulkan dan menyimpan 3000 baris data hasil seleksi (dari total mungkin 20-30 ribu peserta UM UGM)
Lalu jika ingin mencari sebuah nama, saya tinggal “Search” saja, dan dalam waktu 3 detik langsung ketemu. Walau sebenarnya ini proyek kurang kerjaan – karena toh paginya bisa dilihat juga di koran – tapi yang penting kan belajarnya
Dengan metode yang sama, saya yakin pasti bisa melakukan hal yang sama terhadap situs-situs lain, termasuk proyek situs reservasi online tour dan travel di atas tadi. Ada kawan-kawan yang berpengalaman dalam bidang ini? Share ya
)







