Software untuk Analisis Sentimen
30 August 2012 at 19:14 | Posted in text processing, twitter | 8 CommentsMelanjutkan posting http://yudiwbs.wordpress.com/2011/12/26/analisis-twee-analisis-opini-sentimen/ tahun ini promotor saya, saya dan Lia mengajukan tema analisis sentimen di microblog untuk hibah penelitian desentralisasi ITB dan diterima. Kesempatan bagus untuk membuat software untuk basis ekperimen dan nantinya bisa digunakan oleh masyarakat umum. Kapan lagi buat prototype dibayar
Lagipula akan bermanfaat untuk disertasi saya.
Untuk tahap awal ini, software masih berperan sebagai executive information system yang menampilkan beberapa ukuran statistik beserta visualisasinya. Belum dilakukan tweet mining untuk menemukan hal-hal penting yang tersembunyi (target berikutnya). Prinsipnya ini masih versi dasar yang nanti akan dilengkapi sedikit demi sedikit.
Ada tiga komponen penyusun software ini: crawler (pengumpul data tweet), pemroses data (preprocessing, klasifikasi, agregasi) dan terakhir visualiasi. Berbeda dengan software yang saya buat sebelumnya, software ini berbasis desktop (Java-Swing), bukan web atau mobile. Alasannya, pengembangan aplikasi desktop lebih cepat daripada web dan mobile, terutama untuk user interface yang kompleks (plus saya tidak suka javascript hehe). Sedangkan kelemahan aplikasi desktop adalah komputer harus terus menerus hidup saat melakukan crawling dan crawling akan berhenti jika koneksi internet putus. Tapi nanti bisa dibuat hybrid, crawling dilakukan di server dan datanya ‘dilempar’ ke client untuk kemudian diproses. Sedangkan untuk mobile app, crawling+proses dilakukan di server dan baru setelah itu datanya dilempar ke mobile app secara on demand.
Setelah sebulan mencoba-coba, mumpung libur lebaran, akhirnya aplikasinya mulai terbentuk (gambar bawah). ”Indosat” dipilih menjadi keyword.
Warna merah adalah jumlah tweet negatif, biru positif dan abu-abu adalah selisihnya. Satuan waktu dapat dipilih mulai jam, hari, bulan dan tahun demikian juga dengan rentang waktu. Gambar diatas untuk satuan “jam” (12 Agt sampai 28 Agt) sedangkan gambar bawah untuk satuan ”hari” pada rentang yang sama:
Terlihat puncak keluhan terjadi pada tanggal 25 Agustus. Pengguna dapat melihat lebih detil apa yang terjadi di tanggal 25 tersebut dengan mengklik point pada chart. Setelah klik maka akan ditampilkan keywords dan tweet-nya. Keywords memang masih belum ideal, kata ”demi” dan “tidak” harusnya bukan keyword walaupun kata “pending”, “jaringan” dan “lambat” sudah tepat dijadikan keyword.
Masih banyak yang dapat ditambahkan: keyword tracking, kredibilitas informasi, demografi, lokasi, clustering, network analysis, event detection, visualiasi dsb. Belum lagi aplikasi untuk mobile-nya. Jadi masih banyak yang bisa dikerjakan untuk senang-senang
Aplikasi Android untuk Memonitor Lalulintas Bandung berdasarkan Tweet
26 April 2012 at 09:04 | Posted in android, text processing, twitter | 10 CommentsSebelum pergi ke luar rumah, biasanya saya memeriksa kondisi lalulintas Bandung dengan dua cara: melihat web cam di bandung247.com dan mencari tweet dengan keyword #lalinbdg. Sayangnya webcam di bandung247 masih terbatas, belum ada webcam untuk Jalan Setiabudhi, Tamansari, Siliwangi, Sukajadi dan Cihampelas yang merupakan jalur utama saya pulang-pergi ke kampus.
Untuk twitter sendiri, hashtag #lalinbdg telah menjadi standard defacto bagi pengguna twitter yang ingin melaporkan kondisi lalulintas. Informasi terupdate sangat cepat. Jika ada kemacetan, kecelakaan dan banjir, maka hampir secara real time akan muncul.
Tetapi mencari informasi menggunakan twitter-client atau melalui web twitter.com tidak menyenangkan. Banyak terjadi duplikasi, yang disebabkan oleh account seperti infobdg, bandungtraffic, dan pengguna yang meretweet. Lalu jika membuka situs twitter.com di smartphone, fungsi search justru ada di bagian paling bawah. Sedangkan jika menggunakan twitter client, banyak fitur-fitur yang sebenarnya saya tidak perlukan. Saya hanya butuh search saja, bukan melihat timeline, post dsb.
Solusinya saya buat app android yang khusus untuk menampilkan tweet seputar informasi lalulintas Bandung melalui hashtag #lalinbdg. Kelebihan aplikasi ini adalah: pengurangan duplikasi, sangat simple karena hanya punya satu fungsi:search, dan ada rangkuman sehingga informasi lebih mudah dilihat saat di kendaraan. Berikut adalah contoh snapshotnya.
Jika ada yang berminat (Android 2.2 keatas), silahkan download di: https://play.google.com/store/apps/details?id=edu.upi.cs
Social Network Analysis berdasarkan Reply Tweet Artis
27 February 2012 at 19:42 | Posted in penelitian, text processing, twitter | 9 CommentsHari ini saya mencoba library nodexl (nodexl.codeplex.com) sekaligus mengeksplorasi tweet para artis yang telah saya kumpulkan mulai awal Feb 2012. Tweet artis dipilih karena mereka sudah terbiasa diliput publik sehingga diasumsikan lebih menerima jika dieksplorasi datanya — semoga
. Alasan lain adalah tweet mereka banyak direspon dan sudah dikenal masyarakat.
Visualisasi social network bertujuan menggambarkan hubungan antar unit. Untuk Twitter, hubungan antar account dapat berbentuk banyak hal, mulai dari hubungan follower/friend (paling populer), retweet, favourite, mention, reply dan sebagainya. Untuk kesempatan ini saya akan menggunakan hubungan reply yang memperlihatkan adanya komunikasi atau pembicaraan antara dua account. Asumsi saya (perlu pembuktian nanti), reply dan mention adalah hubungan kuat antara dua account twitter. Retweet atau favourite bisa dilakukan dengan satu tombol dengan mudah, tapi untuk me-reply pengguna harus mengetikkan sesuatu.
Berikut adalah visualisasinya, semakin tebal garis berarti semakin banyak si-artis me-reply. Minimal ada tiga jumlah reply, kurang dari itu tidak digambarkan. Titik biru adalah artis (diambil 100 artis dengan follower terbesar), titik hitam adalah account Twitter lain. Data yang digunakan adalah tweet dari tanggal 1 Feb sampai dengan 21 Feb 2012. Klik gambar lalu zoom kalau masih tidak jelas.
Catatan yang perlu diingat sebelum dibaca lebih lanjut: (1) artis dalam artikel ini didefinisikan sebagai 100 artis dengan follower tertinggi. (2) tweet yang digunakan berada dalam periode satu bulan sehingga bisa jadi hubungan yang ada bersifat sementara. (3) tentu ada media lain yang digunakan selain melalui tweet, misalnya SMS, DM, FB, email, BBM, messenger dsb yang tentunya tidak tertangkap dalam visualiasi ini.
Beberapa hal menarik dari visualiasi di atas:
- Dua account yang paling sering menggunakan reply adalah @ti2DJ dan @erdiAN_aJI. Jumlah reply terbesar dipegang oleh @ti2DJ dengan 26 reply ke sebuah account (anaknya?). Ini menunjukkan kedua artis ini aktif menggunakan twitter sebagai media komunikasi dua arah atau lebih.
- Di sisi lain, tidak semua account menggunakan Twitter untuk komunikasi, atau kalaupun ada hanya terbatas ke beberapa orang saja. Mungkin mereka lebih memilih menggunakan DM, SMS atau messenger? Lagipula dengan jumlah follower besar, wajar kalau mereka lebih berhati-hati. Sebagai contoh @aqi_alexa hanya terhubung dengan 3 orang, dengan yang terkuat adalah @aud33y (istri).
- Dari sisi reply via tweet, hubungan antar sesama artis ternyata tidak terlalu dekat. Kecuali @ti2DJ yang terhubung dengan 8 artis, artis lain tidak terlihat atau hanya sedikit terhubung dengan sesama artis. Ada beberapa yang justru terhubung kuat dengan ‘orang biasa’ (bukan teman dan memiliki follower sedikit) yang tidak terkait dengan bidang keartisan. Informasi ini dapat digunakan untuk melihat hal yang sedang diminati oleh artis tersebut.
- Account @dahsyatnyaolga dan @jess_iskandar sepertinya artis yang paling punya hubungan yang kuat dengan penggemar fanatik. Misalnya dengan @salvia_cumaOLGA, @Icha_LoveOlga, @EmiLiaCyankOLGA dan lainnya.
Setelah mencoba-coba nodeXL dan data artis ini selama satu hari, berikut adalah beberapa hal yang saya peroleh:
- Kekuatan NodeXL adalah mudah dipelajari dan mudah digunakan karena berbasis Excel. Powerfull kalau dikombinasikan dengan SQL (jalankan query di HeidiSQL, copy paste hasilnya ke NodeXL) . Tapi masih terlalu rumit untuk diserahkan ke enduser, dan hanya jalan di Windows (non web). Gambar yang dihasilkan juga masih harus digeser-geser manual supaya lebih jelas.
- Menarik kalau ditambahkan content analysis dari komunikasi antara account. Idealnya garis yang menghubungkan dua account saat diklik dapat menampilkan rangkuman pembicaraan (keywords), sentimennya, dan juga dapat di drill down sampai ke tweet mentah.
- Perlu aspek temporal. Bagaimana kekuatan hubungan dua account dari waktu ke waktu? Mungkin ada yang menguat (menebal kalau di gambar) saat mengerjakan proyek bersama, mungkin ada juga yang tiba-tiba dari kuat lalu menghilang (putus/bertengkar). Akan bagus kalau untuk satu account dapat di-play selama 1 tahun misalnya sehingga terlihat pergerakan hubungannya dengan account lain.
- Perlu tools untuk melihat sekilas isi sebuah account. Saat ini langkah manual yang saya lakukan adalah: melihat garis yang tebal yang menandakan hubungan yang kuat. Lalu lihat siapa, copy-paste di Twitter untuk dicari, lihat deskrpsi dan tweet orang tersebut, dan googling jika diperlkukanuntuk menentukan kira-kira dia siapa. Akan lebih enak kalau ada tools yang membantu semua proses itu. Yap saya memang pemalas
Data yang dianalisis pada posting ini adalah tweet para artis. Selain data ini, saya juga mengumpulkan tweet dari orang lain yang berkaitan dengan artis (mention). Jumlahnya tentu lebih besar, mungkin lebih menarik lagi nanti hasil analisisnya.
Pengguna Twitter Indonesia dengan Follower Terbanyak
4 January 2012 at 16:29 | Posted in penelitian, text processing, twitter | 11 CommentsUpdate: 27 Feb 2012, analisis keterkaitan account artis berdasarkan reply ada di posting ini
Beberapa hari ini saya mulai mengumpulkan secara otomatis data mengenai pengguna Twitter, khususnya pengguna dari Indonesia. Tentunya ini data sementara dan mungkin saja ada yang terlewat, nanti akan diupdate sejalan dengan makin lengkapnya data.
Besarnya follower memang belum tentu berbanding lurus dengan kemampuan mempengaruhi (influence), tapi tetap merupakan modal penting. Rencana kedepan adalah menganalisis secara lebih mendalam hubungan antar account berdasarkan content (tweet).
Berikut adalah 50 account Twitter dengan follower terbanyak (data Januari 2012). Tiga teratas adalah Sherina Munaf, Agnes Monica dan detik.com. Menarik adalah account non personal seperti @tweetramalan, @pepatah yang bisa masuk ke 10 besar. Satu atlit yang masuk ke 10 besar adalah Irfan Bachdim.
|
User Name |
Nama |
followers_count |
| @sherinamunaf | Sherina Munaf |
2370152 |
| @agnezmo | Agnes Monica |
2010853 |
| @detikcom | detikcom |
1664032 |
| @vidialdiano | Vidi Aldiano |
1659567 |
| @TweetRAMALAN | Ramalan Indonesia |
1642051 |
| @radityadika | raditya dika |
1624734 |
| @Poconggg | ariefmuhammad |
1579399 |
| @pepatah | Denny Ch Pratama |
1574060 |
| @IrfanBachdim10 | Irfan Bachdim |
1499464 |
| @afgansyah_reza | afgansyah reza |
1425980 |
| @bepe20 | •Bambang Pamungkas• |
1389649 |
| @sule_prikitw | sule_prikitiew |
1365260 |
| @cinema21 | cinema21 |
1273892 |
| @Metro_TV | METRO TV |
1244616 |
| @LunaMaya26 | luna maya |
1243724 |
| @shireensungkar | shireen sungkar |
1162978 |
| @olla_ramlan | ollaramlan |
1122601 |
| @SoalCINTA | Denny JA_soalCINTA |
1008854 |
| @MarioTeguhWord | Mario Teguh Quotes |
993259 |
| @MotivatorSuper | Motivator Super |
989393 |
| @indrabektiasli | bekti indratomo |
970274 |
| @nikita_willy | nikita purnama willy |
874585 |
| @desta80s | Deddy Mahendra Desta |
842057 |
| @kompasdotcom | KOMPAS.com |
833448 |
| @KamusCewek | Kamus Cewek |
803361 |
| @bismakarisma | Bisma Karisma ? |
752099 |
| @tvOneNews | tvOne WebNews |
726320 |
| @OVJ_Trans7 | OVJ Trans 7 |
710756 |
| @TweetKlik | Tweet Klik |
690740 |
| @TheHitsTransTV | The Hits |
676947 |
| @indraherlambang | indra herlambang |
675835 |
| @AdrieSubono | Adrie Subono |
673247 |
| @morganoey | Morgan Oey |
642491 |
| @sarseh | sarah sechan |
622100 |
| @indybarends | indy barends |
620848 |
| @thalitalatief | thalitalatief |
615722 |
| @gadiiing | Gading Marten |
600416 |
| @tantrikotak | tantri syalindri |
596977 |
| @FaktanyaAdalah | Faktanya ?dalah™ |
580527 |
| @widikidiw | ™ |?\??????/??|? |
580489 |
Sedangkan untuk 200 teratas, komposisi jenis pengguna twitter adalah sebagai berikut. Terlihat bahwa account yang mendominasi adalah account yang berkaitan dengan dunia hiburan dan kalimat-kalimat motivasi, joke, kata mutiara.
|
Jenis |
Jumlah |
| Pepatah/kata mutiara/joke |
53 |
| Penyanyi |
30 |
| Artis/Aktor |
30 |
| Presenter/Host |
21 |
| Acara TV |
9 |
| Pelawak |
8 |
| Atlit |
7 |
| Berita |
7 |
| Penulis |
4 |
| Perusahaan |
4 |
| Pemerintah |
3 |
| Pemusik |
3 |
| sutradara/produser film |
2 |
| Produk |
2 |
| Dokter |
2 |
| Entertaint lainnya |
2 |
| Situs non berita (kaskus etc) |
2 |
| Motivator |
1 |
| Pengusaha |
1 |
| Pengusaha |
1 |
| Fans |
1 |
| Penari |
1 |
| Politikus |
1 |
| Tempat/Lokasi |
1 |
| Seniman |
1 |
| Model |
1 |
Berikut adalah rincian siapa saja yang masuk 10 besar untuk 5 kategori teratas
Kategori: kata mutiara/pepatah/joke
|
Twitter ID |
Nama |
followers_count |
| @TweetRAMALAN | Ramalan Indonesia |
1642051 |
| @pepatah | Denny Ch Pratama |
1574060 |
| @SoalCINTA | Denny JA_soalCINTA |
1008854 |
| @MarioTeguhWord | Mario Teguh Quotes |
993259 |
| @MotivatorSuper | Motivator Super |
989393 |
| @KamusCewek | Kamus Cewek |
803361 |
| @TweetKlik | Tweet Klik |
690740 |
| @FaktanyaAdalah | Faktanya ?dalah™ |
580527 |
| @pemulihanjiwa | Hatiku Tenang |
533635 |
| @NasihatSahabat | Kata Bijak & Nasihat |
523662 |
Kategori: Penyanyi
|
Twitter ID |
Nama |
followers_count |
| @sherinamunaf | Sherina Munaf |
2370152 |
| @agnezmo | Agnes Monica |
2010853 |
| @vidialdiano | Vidi Aldiano |
1659567 |
| @afgansyah_reza | afgansyah reza |
1425980 |
| @bismakarisma | Bisma Karisma ? |
752099 |
| @morganoey | Morgan Oey |
642491 |
| @tantrikotak | tantri syalindri |
596977 |
| @widikidiw | ™ |?\??????/??|? |
580489 |
| @armandmaulana | armand maulana |
539236 |
| @rafaell_16 | Rafael Tan |
491466 |
Kategori: Artis/Aktor
|
Twitter ID |
Nama |
followers_count |
| @LunaMaya26 | luna maya |
1243724 |
| @shireensungkar | shireen sungkar |
1162978 |
| @nikita_willy | nikita purnama willy |
874585 |
| @SandraDewi88 | Sandra Dewi |
566592 |
| @t_ORASUDI_ro | tora sudiro |
523023 |
| @Bellaudya829 | Laudya cynthia bella |
404641 |
| @CUTTARYtweet | Cut Tary |
393496 |
| @juliaperrez | JULIAPEREZ / JUPE |
382042 |
| @chelseaolivia92 | Chelsea Olivia |
350585 |
| @WulanGuritno | Wulan Guritno |
337107 |
Kategori: Presenter / Host
|
Twitter ID |
Nama |
followers_count |
| @indrabektiasli | bekti indratomo |
970274 |
| @desta80s | Deddy Mahendra Desta |
842057 |
| @indraherlambang | indra herlambang |
675835 |
| @sarseh | sarah sechan |
622100 |
| @indybarends | indy barends |
620848 |
| @thalitalatief | thalitalatief |
615722 |
| @gadiiing | Gading Marten |
600416 |
| @vincentrompies | vincent ryan rompies |
554440 |
| @omeshomesh | ananda omesh |
398730 |
| @dahsyatnyaolga | Olga Syahputra |
359914 |
Kategori: Acara TV non berita.
Terlihat TransTV adalah perusahaan TV yang paling sukses dengan menempatkan 6 acaranya pada 10 besar.
|
Twitter ID |
Nama |
followers_count |
| @OVJ_Trans7 | OVJ Trans 7 |
710756 |
| @TheHitsTransTV | The Hits |
676947 |
| @dahSyatMusik | dahSyat |
555197 |
| @onlinetranstv | online transtv |
448699 |
| @inserttranstv | informasi selebriti |
388146 |
| @InboxSCTV_ | Inbox SCTV |
336829 |
| @KickAndyShow | Kick Andy Show |
306330 |
| @DeRingSTransTV | Derings Trans TV |
184215 |
| @cintacenatcenut | Cinta Cenat Cenut II |
169110 |
Analisis Tweet: Opini atau Sentimen
26 December 2011 at 19:49 | Posted in penelitian, text processing, twitter | 18 CommentsTwitter seringkali digunakan untuk ‘curhat’ mengenai sesuatu hal, baik memuji ataupun mencela. Tentunya ini punya potensi besar bagi perusahaan yang ingin mengetahui feedback masyarakat untuk merk dan layanan mereka demikian juga partai politik atau politikus yang ingin mengukur tingkat popularitas mereka. Analisa ‘curhat’ ini dikenal dalam dunia pemrosesan teks sebagai analisa opini atau sentimen (opinion analysis atau sentiment analysis). Opini artinya adalah pandangan subyektif seseorang tentang suatu hal.
Ada beberapa task utama dalam analisis opini, diantaranya:
- Menentukan tweet berisi opini atau tidak. Contoh bukan opini: “Hari ini saya belanja di supermarket X”. Sedangkan contoh opini adalah “Pelayanan kasir supermarket X tidak ramah dan lambat”.
- Menentukan apakah opini tersebut adalah opini negatif atau positif. Contoh opini positif “Supermarket X bersih, enak belanja disana”. Sedangkan contoh opini negatif bisa dilihat pada contoh no 1.
- Apa yang menjadi topik dari opini? Misalnya pada contoh no 1, yang menjadi topik adalah “layanan kasir” sedangkan pada contoh no 2 yang menjadi topik adalah “kebersihan”
Dengan cara manual, analisa opini ini bisa saja dilakukan. Misalnya memonitor berita-berita di media masa. Tapi untuk data tweet, cara manual tidak mungkin bisa dilakukan. Ini karena jumlah datanya yang sangat besar dan terus mengalir. Misalnya untuk tweet berbahasa Indonesia saja diperkirakan ada aliran 6 juta tweet per hari (2010). Disinilah peranan text processing, yang secara otomatis dapat memproses data.
Sebulan yang lalu saya mengadakan eksperimen kecil untuk analisis opini. Tentunya detil teknis tidak saya tulisan di posting ini dan nanti bisa dibaca di papernya. Data yang saya gunakan adalah tweet yang mengandung kata dua operator GSM di Indonesia. Saya kumpulkan dari bulan Agustus 2010 dan masih berlangsung sampai sekarang. Tapi untuk eksperimen ini, saya hanya gunakan sebagian data saja (35 ribuan tweet).
Beberapa hal dari hasil eksperimen:
- Dari tweet yang mengandung kata operator GSM tersebut, 65% mengandung opini.
- Dari tweet opini tersebut, opini negatif mencakup 77%. Ini masuk akal karena orang biasanya saat puas diam, dan saat kesal menulis tweet negatif.
- Kata-kata kunci (keyword) yang ditemukan oleh software adalah: “emosi, mahal, bb ,<makian>, aneh, jaringan, pulsa, provider, bis, paket, sms, sinyal”.
Jika dibuat grafik, bentuknya seperti ini
Garis biru memperlihatkan opini negatif, sedangkan garis merah adalah opini positif. Sumbu x adalah hari. Terlihat opini negatif mendominasi. Analisis keyword juga dapat dilakukan per hari. Misalnya pada tanggal 9 September 2010, satu hari menjelang idul fitri, salah satu keyword yang menonjol adalah “cs”, yaitu customer support. Contoh tweetnya:
“Susah bgt sih hubungin CS [xxx] ..sibuk2 mlulu”
”tadi gua sempet nyolot22an sama CS nya [xxxx] HAHAHA songong bet sih lau neng”
Ini mungkin disebabkan jumlah CS yang terbatas di menjelang idul fitri.
Tentunya masih banyak lagi hal-hal yang bisa digali, tapi perlu eksperimen dan studi lebih lanjut, dan itu yang sedang saya lakukan bersama beberapa mahasiswa bimbingan saya
Google App Engine – Java (GAE/J) dan Twitter Search
8 June 2010 at 19:43 | Posted in twitter | 2 CommentsDulu mencari hosting gratis berbasis Java (JSP+servlet) merupakan tantangan tersendiri. Untungnya saat ini Google melalui Googgle App Engine (GAE) menyediakan hosting gratis untuk applikasi Java. Walaupun ada beberapa batasan (contoh batasannya lihat tabel di bawah), tapi menurut saya sudah sangat layak. Batasannya lumayan berbeda dan lebih rumit dibandingkan hosting pada umumnya, karena GAE ini menggunakan prinsip cloud computing. GAE versi gratis juga tidak mendukung relational database, walaupun data masih bisa disimpan dalam bentuk lain yang disebut datastore.
Untuk memulai menggunakan GAE/J, baca dokumentasinya kemudian tutorial ini dan lanjutannya jika menggunakan Netbeans. Kalau mampu dan ada waktu, bagus juga memulai dari dasar dengan hanya mengunakan text editor + ant.
Selanjutnya saya akan mencoba membuat aplikasi di GAE yang mengambil tweet mengenai sesuatu hal. Nantinya dapat diolah lebih lanjut, tapi untuk sekarang saya batasi hanya mengambil dan menampilkan saja.
Twitter sudah menyediakan fasilitas ini dengan mudah. Misalkan untuk mengambil tweet mengenai Bandung, gunakan URL: http://search.twitter.com/search.atom?q=bandung dan hasilnya sudah dalam bentuk XML. Info lebih detil mengenai search twitter ini dapat dilihat di http://search.twitter.com/api/
Untuk mengambil hasil search twitter, digunakan url.openstream sedangkan untuk memprosesnya XML-nya saya menggunakan SAX (lihat tutorial SAX bagi yang belum mengenal XML dan parsernya). Berikut kode lengkapnya:
package twmining;
import java.io.IOException;
import java.util.logging.Logger;
import javax.servlet.http.*;
import java.net.URL;
import java.net.MalformedURLException;
import java.io.BufferedReader;
import java.io.InputStreamReader;
import javax.xml.parsers.ParserConfigurationException;
import javax.xml.parsers.SAXParser;
import javax.xml.parsers.SAXParserFactory;
import org.xml.sax.*;
public class GetTweet extends HttpServlet {
private static final Logger log = Logger.getLogger(TweetXMLHandler.class.getName());
@Override
public void doGet(HttpServletRequest req, HttpServletResponse resp)
throws IOException {
resp.setContentType("text/plain");
resp.getWriter().println("Test Search Tweet:");
try {
URL url = new URL("http://search.twitter.com/search.atom?q=bandung");
BufferedReader reader = new BufferedReader(new InputStreamReader(url.openStream()));
SAXParserFactory factory = SAXParserFactory.newInstance();
SAXParser parser;
parser = null;
parser = factory.newSAXParser();
TweetXMLHandler txh = new TweetXMLHandler();
txh.resp = resp;
InputSource inS = new InputSource(reader);
parser.parse(inS, txh);
reader.close();
} catch (ParserConfigurationException ex) {
log.severe(ex.getMessage());
} catch (SAXException ex) {
log.severe(ex.getMessage());
} catch ( MalformedURLException e) {
log.severe(e.getMessage());
}
}
}
Dengan menggunakan SAX, kita tinggal membuat handler yang akan dipanggil saat event tertentu. Fokus saya hanya mengambil isi tweet dan waktunya. Berikut kode untuk handler:
package twmining;
import java.io.IOException;
import org.xml.sax.SAXException;
import org.xml.sax.helpers.DefaultHandler;
import java.util.logging.Level;
import java.util.logging.Logger;
import javax.servlet.http.HttpServletResponse;
import org.xml.sax.Attributes;
public class TweetXMLHandler extends DefaultHandler {
public HttpServletResponse resp; //hanya untuk debugging
private static final Logger log = Logger.getLogger(TweetXMLHandler.class.getName());
private String tempVal;
private void println(String val) {
try {
resp.getWriter().println(val);
} catch (IOException ex) {
Logger.getLogger(TweetXMLHandler.class.getName()).log(Level.SEVERE, null, ex);
}
}
@Override
public void endDocument() throws org.xml.sax.SAXException {
println("Selesai parsing dokumen");
}
@Override
public void startDocument() throws org.xml.sax.SAXException {
println("Mulai parsing dokumen");
}
@Override
public void startElement(String namespaceURI,
String sName, // simple name
String qName, // qualified name
Attributes attrs)
throws SAXException
{
}
@Override
public void characters(char[] ch, int start, int length) throws SAXException {
tempVal = new String(ch,start,length);
}
@Override
public void endElement(String uri, String localName,
String qName) throws SAXException {
if(qName.equalsIgnoreCase("published")) {
println("waktu:"+tempVal);
}else if (qName.equalsIgnoreCase("title")) {
println("isi:"+tempVal);
}
}
Saya menggunakan void println diatas (dengan mengirimkan variabel resp bertipe HttpServletResponse) karena saya gagal menggunakan log, entah kenapa hasil log-nya tidak keluar. Lagipula sepertinya lebih praktis dengan menampilkannya langsung. Berikut adalah contoh keluarannya (klik untuk memperbesar):
Data tweet ini selanjutnya perlu disimpan dalam datastore sebelum diolah lebih lanjut.
Geolokasi dengan Google Latitude
27 May 2010 at 20:22 | Posted in twitter | 4 CommentsUpdate Feb 2010: Twitter mengubah cara auth-nya bekerja, gunakan library ini untuk mengupdate tweet secara otomatis: http://github.com/abraham/twitteroauth Setelah download, upload saja seluruh direktorynya, ganti config.php-nya, langsung bisa dicoba dan diutak-atik.
Salah satu aplikasi geolokasi mobilephone yang menarik adalah Google Latitude. Google latititude (melalui GoogleMap) ini selalu ON dan secara terus menerus mengupdate posisi. Jika dijalankan, aplikasi ini akan menggunakan GPS dengan akurasi sampai 50m, tetapi jika aplikasinya di-hide maka akan menggunakan triangulasi BTS (?) dengan akurasi sekitar 1000m. Kelebihan lainnya adalah aplikasi ini dapat berjalan di OS Symbian (Nokia). Kebanyakan aplikasi geolocation tersedia untuk Blackberry dan iPhone, mungkin karena Symbian tidak populer di US.
Dengan Latitude, saya dan istri dapat mengetahui posisi masing-masing (bermanfaat saat harus bertemu di suatu tempat). Selain itu terdapat fasilitas melihat sejarah pergerakan lokasi (berguna misalnya untuk melihat rute jalan pagi kemarin ) dan alert jika ada teman yang posisinya dekat tapi di tempat-dan-waktu yang tidak biasa (misal istri datang ke kampus saya). Jika kita aktifkan public location badge maka orang lain (selain friend) juga dapat melihat lokasi kita. Saya mengaktifkan fitur ini agar mahasiswa dapat mencari saya dengan mudah (yuliadi.com/lokasi.htm). Tidak ada lagi sms atau telepon “Bapak ada dimana?” (kalaupun ada yang bertanya saya berikan saja link tersebut).
Dengan data lokasi yang selalu terupdate, data ini dapat dimanfaatkan sebagai input aplikasi lain untuk diolah lebih lanjut. Salah satu hal yang ingin saya coba adalah mengisi daftar hadir di kampus secara otomatis. Jadi setiap saya masuk kampus, otomatis langsung tercatat, demikian juga saat saya pulang. Dan itu dilakukan tanpa harus melakukan apapun, hanya cukup membawa mobilephone saja. Data tersebut kemudian dikirim secara otomatis ke Twitter.
Untuk membuat sistem itu tadinya saya akan menggunakan Google Latitude API. Tapi gagal terus. Dari pencarian di internet ternyata jika user memiliki public location badge maka posisi dapat diambil dengan mudah. Berikut kode php untuk mengakses data dari badge:
$c=file_get_contents('http://www.google.com/latitude/apps/badge/api?user=xxx&type=kml'); //ganti xxx dengan userid
$xml = new SimpleXMLElement($c);
$k = $xml->Document->Placemark->Point->coordinates;
$koordinat = explode(",", $k);
$long = $koordinat[0];
$lat = $koordinat[1];
Langkah berikutnya adalah menentukan koordinat UPI. Saya mencari koordinat kiri-atas dan kanan-bawah yang jika saya berada di dalamnya artinya saya berada di UPI. Googlemap dapat digunakan untuk mencari koordinat. Cari titik yang kita inginkan, klik kanan dan pilih “Center Map Here” lalu ketik dibagian address kode berikut: javascript:void(prompt('',gApplication.getMap().getCenter())); (tips dari tech-recipes.com).
Selanjutnya tinggal dilakukan pengecekan posisi saya dibandingkan dengan koordinat UPI tersebut dan ditambahkan waktu masuk atau keluar. Berikut kodenya:
$longKiri = 107.58928298950195;
$latAtas = -6.853955057941853;
$longKanan = 107.60078430175781;
$latBawah = -6.86852699425029;
if ($long>=$longKiri && $long<=$longKanan && $lat>=$latBawah && $lat<=$latAtas) {
$status = "Masuk ke UPI:".date("d-m-y : H:i:s", time());
} else {
$status = "Keluar dari UPI:".date("d-m-y : H:i:s", time());
}
Kode diatas kemudian harus ditambahkan kode untuk mengambil dan menyimpan status terakhir dari dan ke database. Gunanya untuk mendeteksi perubahan status (masuk->keluar->masuk) sehingga hanya saat status berubah twitter diupdate. Tutorial ini berisi cara untuk mengirimkan status ke Twitter.
Terakhir, kode diatas perlu dipanggil secara reguler untuk mengecek posisi, misanya setiap 10 menit (gunakan cron). Tapi saat melakukan testing harap berhati-hati karena jika terlalu sering mengupdate status, Twitter akan mencurigai ini sebagai aktivitas spam sehingga diblok. Set cron hanya aktif dari jam 7 pagi sampai jam 8 malam, Senin sd Jumat.
Kelemahan dari Google Latitude ini adalah akurasi dan masalah frekuensi update. Dari history, pernah saya tercatat berada di London, Inggris (dan beberapa menit kemudian sudah kembali ke Bandung
). Pernah juga saya lihat istri saya ada di Rusia. Di Bandung sendiri terkadang lokasinya loncat cukup jauh. Durasi antar update juga dapat mencapai 30 menitan, sehingga waktu masuk ke kampus dan keluar kampus tidak akurat.
Masih banyak hal yang bisa dilakukan dengan fitur Latitude ini, misalnya penggabungan dengan foursquare sampai ke location mining
Blog at WordPress.com. | Theme: Pool by Borja Fernandez.
Entries and comments feeds.








