Jumat, 11 Mei 2012

Membuat Layanan Auto Reply SMS Untuk Mengetahui Artikel Terbaru Situs/Blog

Terkadang saya melihat-lihat lagi secara sekilas artikel-artikel yang pernah saya posting sebelumnya, sekedar mencari ide dan inspirasi untuk tulisan saya yang terbaru di blog tutorial ini. Dan… suatu ketika saya menemukan arsip artikel saya tentang SMS notifikasi artikel terbaru dan teknik menyingkat URL dengan Google API. Sepertinya kedua artikel ini bisa memberikan ide sebagai bahan artikel yang baru. Ide nya adalah bagaimana membuat layanan SMS auto reply untuk menginformasikan artikel terbaru dari sebuah situs atau blog. Hanya dengan format SMS misalnya: NEWS#BLOG.ROSIHANARI.NET, maka pengirim SMS ini bisa mendapatkan informasi artikel terbaru dari Blog.RosihanAri.Net termasuk link URL nya.
Lantas apa bedanya dengan ide baru ini dengan SMS Notifikasi sebelumnya? Bedanya adalah SMS Notifikasi ini bersifat broadcast SMS langsung ke banyak nomor ketika ada artikel terbaru dipublish, sedangkan ide baru yang menggunakan Auto Reply SMS ini adalah hanya mengirimkan SMS informasi ke orang yang merequest informasi tersebut. Tahu bedanya kan? :-) Kelebihan dari Auto Reply SMS adalah bersifat terbuka, artinya layanan ini terbuka bagi siapa saja yang ingin merequest informasi. Sedangkan untuk SMS notifikasi via broadcast, bersifat tertutup artinya kita hanya bisa mengirim informasi ke nomor-nomor tertentu yang ada dalam database.
Oya… lantas apa gunanya penyingkat URL nya? gunanya adalah untuk menyingkat URL artikel terbaru yang muncul dalam respon SMS auto replynya. Mengapa harus disingkat? ya… karena saat ini kebanyakan blog atau situs menggunakan permalink yang panjang untuk setiap artikelnya. Kalau URL permalinknya panjang, bisa-bisa tekor biaya pengiriman SMS balasannya :-)
OK… dalam artikel kali ini, saya akan mencoba memaparkan cara membuat layanan auto reply SMS untuk mengetahui artikel terbaru dalam suatu situs/blog. Akan tetapi dalam artikel ini hanya akan saya batasi pada situs atau blog yang dibuat dengan WordPress saja karena pada umumnya blog WordPress memiliki URL RSS Feed standard yaitu di http://namasitus/feed, contohnya http://blog.rosihanari.net/feed. Dari RSS Feed itulah nanti kita akan manfaatkan untuk mendapatkan artikel terbaru.

Untuk membangun layanan ini, Anda bisa menggunakan Gammu sebagai core SMS engine nya, dan Gammu ini sudah Anda install dengan baik dengan modem SMS yang direkomendasikan.
Setelah Gammu diinstall, pertama kita buat script untuk membaca SMS yang masuk ke inbox. Script ini nanti berfungsi akan membaca SMS yang memiliki format NEWS#NAMASITUS. Setelah SMS dibaca, selanjutnya akan membaca RSS Feed dari situs tersebut dan mengambil data artikel terbaru meliputi judul artikel dan URL artikelnya. Kemudian URL artikel ini nantinya akan disingkat, dan akhirnya mengirimkan respon sms ke nomor pengirim berisi judul dan url artikel yang disingkat tersebut. Simpel kan idenya???
Oh ya… hampir lupa, pastikan sebelumnya Anda sudah membuat function untuk menyingkat URL nya. Nama function ini adalah singkatURL() yang disimpan dalam file function.php
function.php

01.
02.function singkatURL($url)
03.{
04.$curlHandle = curl_init();
05.// melakukan request ke server Google API
06.curl_setopt($curlHandle, CURLOPT_URL, 'https://www.googleapis.com/urlshortener/v1/url');
07.curl_setopt($curlHandle, CURLOPT_HEADER, 0);
08.curl_setopt($curlHandle, CURLOPT_SSL_VERIFYPEER, 0);
09.// menentukan tipe konten hasil request yg berupa JSON
10.curl_setopt($curlHandle, CURLOPT_HTTPHEADER, array('Content-Type: application/json'));
11.// parameter yang berisi URL yang akan disingkat
12.curl_setopt($curlHandle, CURLOPT_POSTFIELDS, '{"longUrl":"'.$url.'"}');
13.curl_setopt($curlHandle, CURLOPT_RETURNTRANSFER, 1);
14.curl_setopt($curlHandle, CURLOPT_TIMEOUT,30);
15.// lakukan request dengan POST method
16.curl_setopt($curlHandle, CURLOPT_POST, 1);
17. 
18.// baca data hasil request yg berupa JSON
19.$content = curl_exec($curlHandle);
20.curl_close($curlHandle);
21. 
22.// ekstrak data JSON untuk mendapatkan hasil URL yg disingkat
23.$data = json_decode($content);
24.return $data->id;
25.}
26.?>
Selanjutnya kita buat script untuk memproses SMS nya
newartikel.php
01.
02. 
03.// mengincludekan function untuk menyingkat URL
04.include 'function.php';
05. 
06.// koneksi ke database Gammu
07.$dbhost = 'localhost';
08.$dbuser = '...';
09.$dbpass = '...';
10.$dbname = '...';
11.mysql_connect($dbhost, $dbuser, $dbpass);
12.mysql_select_db($dbname);
13. 
14.// membaca INBOX Gammu
15.$query = "SELECT * FROM inbox WHERE Processed = 'false'";
16.$hasil = mysql_query($query);
17.$data = mysql_fetch_array($hasil);
18.$id = $data['ID'];
19.$sms = $data['TextDecoded'];
20.$sender = $data['SenderNumber'];
21. 
22.// proses parsing SMS berdasarkan karakter #
23.$parse = explode('#', $sms);
24. 
25.// jika jumlah parameter hasil parsing adalah 2
26.if (count($parse) == 2)
27.{
28.// baca keyword hasil parsing
29.$keyword = strtoupper($parse[0]);
30.// baca url blog hasil parsing
31.$blogurl = $parse[1];
32.// jika keyword adalah 'NEWS' maka jalankan proses update status
33.if ($keyword == 'NEWS')
34.{
35.// mengubah URL blog menjadi huruf kecil spy seragam
36.$url = strtolower($blogurl);
37.// membaca data RSS Feed url blog
38.$fetchData = simplexml_load_file('http://'.$url.'/feed');
39. 
40.foreach($fetchData as $news)
41.{
42.// membaca title dari RSS Feed
43.$title = $news->item->title;
44.// membaca URL artikel
45.$posturl = $news->item->link;
46.// menyingkat URL artikel
47.$singkatUrl = singkatURL($posturl);
48.break;
49.}
50.// setting balasan SMS
51.$reply = 'Artikel terbaru dari '.$url.': "'.$title.'" ('.$singkatUrl.')';
52.}
53.else $reply = 'Keyword salah';
54.}
55.else $reply = 'Format SMS Salah';
56. 
57.// menandai SMS di INBOX Gammu bahwa sudah diproses
58.$query = "UPDATE inbox SET Processed = 'true' WHERE ID = '$id'";
59.mysql_query($query);
60. 
61.// mengirim pesan SMS balasan ke nomor pengirim
62.$query = "INSERT INTO outbox(DestinationNumber, TextDecoded, CreatorID)
63.VALUES ('$sender', '$reply', 'Gammu')";
64.mysql_query($query);
65.?>
Supaya script newartikel.php ini bisa berjalan terus menerus sebagai SMS center, maka perlu kita gunakan AJAX yang otomatis merefresh setiap interval waktu tertentu, sehingga Anda tidak perlu repot merefresh script di atas secara manual berkali-kali.
index.html
01.<html>
02.<head>
03.<script type="text/javascript">
04.function proses()
05.{
06.if (window.XMLHttpRequest)
07.{
08.xmlhttp=new XMLHttpRequest();
09.}
10.else
11.{
12.xmlhttp=new ActiveXObject("Microsoft.XMLHTTP");
13.}
14. 
15.xmlhttp.onreadystatechange=function()
16.{
17.if (xmlhttp.readyState==4 && xmlhttp.status==200)
18.{
19.}
20.}
21. 
22.xmlhttp.open("GET","newartikel.php");
23.xmlhttp.send();
24.setTimeout("proses()", 5000);
25.}
26.head>
27.<body onload="proses();">
28.<h1>SMS Centerh1>
29.body>
30.html>
Script AJAX di atas akan senantiasa merefresh script newartikel.php setiap selang interval 5 detik. Pastikan index.html ini selalu terbuka di browser Anda.
Berikut ini contoh tampilan SMS balasan dari SMS center yang diterima di HP pengirim request dengan format SMS: NEWS#BLOG.ROSIHANARI.NET
SMS Auto reply
Mmm… sepertinya script di atas masih ada kelemahan yaitu belum bisa mengirim balasan jika nama blog/situsnya tidak valid atau tidak ada di internet. Nah… hal ini sekaligus PR buat Anda untuk mengembangkan script di atas :-)

Artikel Terkait


EmoticonEmoticon