Selasa, 05 September 2017

Memperoleh Database Klasifikasi Makhluk Hidup Dengan CatalogueOfLife Web Service API


Blogging bisa jadi membosankan apabila kita sudah kehabisan ide untuk ditulis sebagai postingan baru. Jika kalian merasa demikian, coba ikuti ide saya.

Setelah lama terjun dalam dunia blogging, rupanya pundi rupiah masih tak kunjung penuh untuk memenuhi hasrat keinginan sehari-hari. Sehingga saya mulai bereksperimen membuat mesin pencari konten LOMBA ASIA. Saya akhirnya sadar, ada cara lebih mudah untuk menghasilkan pemasukan pasif dari internet.

Keluar dari tema lomba, saya berusaha menemukan ide konten yang mudah diperoleh untuk dipublikasikan kembali. Bertemulah saya dengan web fishbase.org dan catalogueoflife.org. Dari kedua objek itu, saya akhirnya memilih catalogueoflife.org dan segera mempelajari API web service-nya. Usaha tersebut begitu berat, tapi semua terbayarkan setelah http://namalatin.web.id selesai saya rilis.

Saya tidak akan membagikan source kode web nama latin tersebut, tapi setidaknya kali ini kalian akan mempelajari bagaimana memperoleh data dari catalogueoflife.org dari saya. Soal pengolahan dan sisanya, silahkan pelajari sendiri, ya. hehe :D

Jika ada yang belum jelas dari tutorial ini, silahkan baca dokumentasinya sendiri dari link berikut: http://www.catalogueoflife.org/annual-checklist/2017/webservice

Data spesies makhluk hidup dapat dicari dari titik pusat web service catalogueoflife.org; dan diikuti dengan parameter request berisi data yang ingin dicari. Parameter tersebut antara lain:
name             Kata kunci yang ingin dicari, mialnya "ikan", "singa", "Oreochromis niloticus" atau "tiger"
id                  Data spesies yang ingin diperoleh berdasarkan ID record spesifik. Gunakan ini, setelah kita mencari data dengan parameter name dan ingin memperoleh informasi detail dari tiap nama yang ditemukan. Tiap nama yang ditemukan akan memiliki ID unik.
format           Format hasil yang ingin anda peroleh. Anda bisa memilih nilai berikut: format=xml, format=json (default) dan format=php;
response       Tipe hasil yang diperoleh. Konfigurasi yang valid adalah response=terse (default) dan response=full. Format terse akan mengembalikan data rinci,sementara format full akan mengembalikan data lengkap. Perbedaan detailnya, silahkan baca referensi link diatas.
start               Record pertama yang harus dikembalikan. Misalnya, kata kunci "ikan" ditemukan hasil 100. Jika ditentukan nilai start=50, record 0 - 50 diabaikan. Nilai parameter ini penting, mengingat bahwa jumlah record maksimum yang dikembalikan oleh response=terse adalah 500 dan untuk response=full hanya 50.

Pencarian Data
Pencarian data sebaiknya menggunakan format=terse agar tidak memberatkan server. Lagipula, hasil pencarian yang ditampilkan biasanya hanya nama dan beberapa data lain yang tidak begitu spesifik.

<?php
function cari_nama($katakunci,$mulai){
 $ch = curl_init();
 curl_setopt($ch, CURLOPT_URL, "http://www.catalogueoflife.org/annual-checklist/2017/webservice?name=$katakunci&format=json&response=terse&start=$mulai");
 curl_setopt($ch, CURLOPT_USERAGENT, "Mozilla Firefox 1.0");
 curl_setopt($ch, CURLOPT_RETURNTRANSFER, 1);
 $hasil = curl_exec($ch);
 if(curl_errno($ch) == 0){
  curl_close($ch);
  return json_decode($hasil);
 }
 curl_close($ch);
 return NULL;
}
?>

Pencarian ID
Hasil pencarian ID dapat dipastikan hanya mengembalikan 1 buah record saja (apabila ID valid). Format=full sangat tepat dipilih, untuk memperoleh detail data yang lengkap.

<?php
function cari_id($id){
 $ch = curl_init();
 curl_setopt($ch, CURLOPT_URL, "http://www.catalogueoflife.org/annual-checklist/2017/webservice?id=$id&format=json&response=full);
 curl_setopt($ch, CURLOPT_USERAGENT, "Mozilla Firefox 1.0");
 curl_setopt($ch, CURLOPT_RETURNTRANSFER, 1);
 $hasil = curl_exec($ch);
 if(curl_errno($ch) == 0){
  curl_close($ch);
  return json_decode($hasil);
 }
 curl_close($ch);
 return NULL;
}
?>


Tiap kali pemanggilan API, baik itu pencarian ID ataupun dengan katakunci, hasilnya akan diapit oleh struktur data semacam ini:

<results id="" name="" total_number_of_results="" number_of_results="" start="" error_message="" version="1.9 rev c957d6a">

     <result></result>     <!-- one <result /> for each record returned -->

</results>

Jika hasil ditemukan,  total_number_of_results tentu saja bukan 0. Hasil yang ditemukan akan disimpan sebagai array objek result, yang merupakan anakan objek results. Ada banyak varian objek result. Kita bisa mengetahuinya dengan melihat result->name_status. Sejauh ini, saya mengetahui name_status bisa salah satu dari string accepted_name, common_name, synonym, ambiguous_synonym atau higher_taxa.
(PENTING: Lihat macam-macam varian dan bentuknya dari link referensi di atas)

Contoh Implementasi
Dari 2 fungsi PHP di atas, saya akan menunjukkan bagaimana menampilkan hasil yang berkaitan dalam bentuk list sederhana.

<?php
...
$hasil = cari_nama("dog");
foreach ($hasil->results as $item){
 echo "<li>{$item->name}</li>"
}
?>


Lebih lanjutnya, silahkan pelajari sendiri dari dokumentasi, ya. Selamat mencoba :D
Load disqus comments

0 comments