Membuat Cache untuk XML Feed dengan PHP-CLI dan Cron

Fasilitas XML feed mempermudah kita dalam mengambil suatu informasi dari sebuah website secara realtime. Sebagai contoh, kita ingin menampilkan informasi cuaca suatu kota, Yahoo! Weather telah menyediakan XML feed termasuk kota-kota besar di Indonesia.

Ada dua cara untuk membaca xml feed, yang pertama secara realtime dari website sumbernya dan yang kedua membuat cache untuk xml feed itu. Cara pertama memiliki kelemahan, proses eksekusi skrip membutuhkan waktu lebih lama dan setiap kali user mengakses website kita, aplikasi pembaca xml feed mengambil data langsung dari website sumbernya.

Sedangkan cara kedua dengan membuat cache, XML feed dibaca dari sumbernya secara rutin berdasarkan interval waktu dan disimpan dalam cache. Informasi yang akan ditampilkan di halaman web mengambil dari cache tersebut dan proses eksekusi skrip lebih cepat.

Contoh kasus, menampilkan prakiraan cuaca kota Yogyakarta dengan mengambil XML Feed dari Yahoo! Weather. Untuk membuat cache file, menggunakan PHP-CLI ( command line ) dan cron di Linux Server. Dalam tutorial ini saya menjalankan skrip di PHP 5.2.0.

File untuk membaca xml feed dan membuat cache : get_xml.php

// xml feed kota Yogyakarta
$xmlfeed = "http://xml.weather.yahoo.com/forecastrss?p=IDXX0058&u=c";

$handle = fopen( $xmlfeed, “r”);

if ($handle) {
while (!feof($handle)) {
$data = fgets($handle, 4096);
echo $data;
}
fclose($handle);
}
?>

Selanjutnya melalui console, supaya file get_xml.php dapat dieksekusi jalankan perintah :

$bash> chmod 755 get_xml.php

Uji file get_xml.php menggunakan php-cli
$bash > /usr/local/php/bin/php -f ./get_xml.php > file_cache.xml

Cek apakah file_cache.xml menghasilkan output yang sesuai
$bash > cat file_cache.xml

Langkah berikutnya menambahkan perintah di Linux CronJob, menjalankan skrip get_xml.php setiap jam 06:05 atau sesuai kebutuhan anda :
$bash> crontab -e

tambahkan baris :
05 06 * * * /usr/local/php/bin/php -f /lokasi/get_xml.php > /lokasi/file_cache.xml

Langkah terakhir, menampilkan prakiraan cuaca, menggunakan skrip di bawah ini ( simple and dirty way :D ) :

$handle = fopen("/lokasi/file_cache.xml", "r");
$data = NULL;
if ($handle) {
while (!feof($handle)) {
$data .= fgets($handle, 4096);
}
fclose($handle);
}

preg_match(“@yweather:condition text=\”(.+)\” code=\”(\d+)\” temp=\”(\d+)\”@i”,$data, $cuaca);

echo “Yogyakarta <br />\n”;
echo “Condition : “.$cuaca[0].”<br />\n”;
echo “Temp. : “.$cuaca[2].” C<br /> \n”;
?>

Leave a Reply