Pada postingan sebelumnya, kita menyiapkan twitter bot dengan memanfaatkan yahoo pipes. Namun, yahoo pipes belum kita elaborasi lebih dalam karena cukup rumit penjelasan alurnya. Kali ini, kita akan lihat bagaimana bot twitter itu bekerja.
Yahoo Pipes adalah aplikasi web dari Yahoo yang menyediakan GUI untuk membangun gabungan yang mengumpulkan feed, laman, dan layanan lainnya, menciptakan aplikasi berbasis web dari berbagai sumber dan menerbitkan aplikasi tersebut. Aplikasi ini membuat pengguna dapat “mempipakan” informasi dari berbagai sumber dan kemudian menentukan aturan dalam memodifikasi konten tersebut, misalnya filter.
“Pipes” selain sebagai aplikasi web juga bisa dipandang sebagai sebuah proyek dalam aplikasi web tersebut. Misalnya pada postingan sebelumnya, untuk membuat bot twitter kita menggunakan pipe bernama Retweeting. Untuk membuat pipe kita bisa memanfaatkan pipe editor yang tersedia di Yahoo Pipes.
Perlu akun yahoo dan gabung ke Yahoo Pipes. Navigasinya bisa dijelajahi dahulu. Editor kosong juga bisa dibuka dengan cara Create a Pipe.
Sebuah editor pipe terdiri atas: tombol kendali di bagian atas, kanvas tempat membuat pipe di tengah-tengah, daftar modul di sebelah kiri, dan debugger di sebelah bawah.
Pipe Retweeting ini apabila diberikan widget ID tertentu ia akan menghasilkan retweet feed sesuai dengan isi tweet yang ditunjuk oleh widget. Widget ID adalah kode unik untuk mengidentifikasikan widget twitter yang bisa kita buat melalui twitter. Agar pipe ini dapat bekerja, pipe ini memanfaatkan google script dari labnol di belakang layarnya. Input Widget ID ke pipe ini perlu ditambah dengan awalan “http://” dan akhiran “.com” untuk mengakali validasi input yang hanya menerima URL, tidak mau menerima teks biasa. Pipe ini memanfaatkan tak kurang dari 9 modul. Hehehe karena cukup panjang pembahasan akan dipecah dalam beberapa bagian.
Sebelum membaca pembahasan modul 1-3, sebaiknya membaca dahulu How to Create RSS Feeds for Twitter. Berdasarkan artikel tersebut, kita bisa mengakses feed dari URL seperti ini:
Untuk bagian “https://script.google.com/macros/s/AKfycbwd6dl4S31dQz_ECPjCzDNdrYSV0allJZl_8S05100aQppDCMQ/exec?” ini adalah tetap, sedangkan “464561739908931584” adalah widget ID yang bersifat variabel. Karena itu, agar lebih sederhana kita akan menerima input berupa widget ID saja. Hal ini kita lakukan dengan memasang modul Text Input. Dengan memasang modul Text Input, di halaman pipe kita akan muncul kotak isian seperti ini.
Sayangnya, meski namanya Text Input, modul ini tidak bisa menerima teks biasa, namun hanya menerima URL. Karenanya kita perlu mengakalinya dengan mengapit widget ID dengan “http://” dan “.com” untuk input.
Karena input yang diterima adalah “http://widget-id.com”, maka kita perlu menyingkirkan “http://” dan “.com”. Modul String Regex yang pertama mengganti “http://” ataupun “https://” dengan “?exec”. Sedangkan modul String Regex yang kedua mengganti \..*$ dengan kosong (atau dengan kata lain menghapusnya). “\..*$” ini adalah sebuah regex. Maksudnya adalah:
\. artinya tanda titik (.)
. artinya karakter apapun
* artinya sebanyak nol-atau-lebih
$ artinya di belakang
Jika diterjemahkan ke bahasa manusia artinya adalah jika menemukan karakter titik maka karakter apapun setelah titik termasuk titik itu sendiri akan dihapus sampai belakang. Misalnya “dar.web.id” akan menjadi “dar”. Selengkapnya tentang dasar regex dapat dipelajari pada tutorial regular expression (regex) dari master.web.id. Regex memang relatif rumit, tapi dengan membaca tutorial itu akan cukup membantu pemahaman kita.
Operasi dari kedua modul di atas akan menghasilkan teks “exec?widget-id”, dalam contoh ini: “exec?464561739908931584”. Teks ini akan menjadi input bagi modul selanjutnya.
Langkah selanjutnya yang dilakukan oleh modul keempat (URL Builder) adalah menambahkan teks di atas, yaitu “exec?widget-id”, dalam contoh ini: “exec?464561739908931584” setelah “https://script.google.com/macros/s/AKfycbwd6dl4S31dQz_ECPjCzDNdrYSV0allJZl_8S05100aQppDCMQ/”. Hasilnya adalah URL lengkap untuk mengakses feed yang dihasilkan widget seperti yang telah disebutkan sebelumnya.
URL ini selanjutnya di-”wire” (disambungkan) sebagai input ke modul kelima (Fetch Feed). Modul Fetch Feed menyebabkan Yahoo Pipes mampu menerima input berupa feed.
Modul keenam adalah modul Filter. Dalam modul inilah kita mulai melakukan manipulasi sebenarnya terhadap feed. Feed di sini adalah kumpulan tweet (linimasa). Feed terdiri atas item-item yang bisa kita manipulasi. Item di sini adalah sebuah tweet. Setiap item mengandung beberapa elemen. Elemen-elemen yang penting antara lain adalah:
1. item.title: username + isi tweet (akun dimention dihilangkan), elemen ini akan kita pergunakan sebagai tempat untuk output pengolahan, isinya ditimpa
2. item.description: isi tweet dalam format HTML
3. item.link: link ke tweet di twitter, dari sini kita dapat mengambil username yang membuat tweet
4. item.pubDate: tanggal tweet, ini akan diperlukan oleh twitterfeed tapi tidak perlu kita ubah sama sekali
Modul keenam ini memfilter linimasa agar tweet yang di item.description – nya mengandung teks “RT” tidak muncul. Ini dilakukan agar bot twitter tidak meretweet tweet yang merupakan retweet, termasuk tweet yang ia buat sendiri.
Kita ingin agar tweet yang dihasilkan oleh bot adalah seperti ini: “RT @username: tweet”. Sayangnya, kita tidak dapat langsung menggunakan elemen item.description, karena item.description tidak menjelaskan username pemilik tweet dan ketika ditweet akan terdapat tag html yang akan mengotori tampilan. Contoh isi dari item.description:
Username pemilik tweet dapat kita peroleh dari elemen item.link yang memuat URL ke tweet di situs asli twitter.com. Contoh isi dari item.link:
Dengan menggunakan regex, kita dapat mengambil username dari item.link (modul ketujuh) dan membersihkan html tags dalam item.description (modul kedelapan).
Pada modul ketujuh, tujuan utama kita adalah mengganti “http://twitter.com/username/status/idtwit” dengan “RT @username: ”. Pertama, semua “http://twitter.com/” maupun “https://twitter.com” diganti dengan tanda a-keong “@”, tanda awalan username twitter. Selain itu kita juga gunakan regex dengan mengganti “^(.*?)[/](.*)” dengan “RT $1: “. “^(.*?)[/](.*)” ini adalah sebuah regex. Maksudnya adalah:
^ artinya di awal
. artinya karakter apapun
* artinya sebanyak nol-atau-lebih
(kurung biasa) untuk mengelompokkan
[kurung siku] untuk memilih di antara sebuah karakter/ di dalam kurung siku artinya adalah garis miring (/)
Jika diterjemahkan ke bahasa manusia artinya adalah mengambil karakter mulai dari awal, sebanyak berapapun, hingga menemukan tanda garis miring (/) dan menyimpannya sebagai $1. Karakter apapun selanjutnya disimpan sebagai $2. Jangan lupa bahwa kita sudah mengganti “https?://twitter.com/” menjadi “@”.
Dengan regex ini, “@dmwsdq/status/465314009026408449” akan menyebabkan $1 = “@dmwsdq” dan $2 = “status/465314009026408449”. Saat ini aku belum tahu apakah adanya variabel penampungan $1 dan $2 ini adalah fasilitas dari regex secara umum atau hanya berlaku di Yahoo Pipes.
Teks pengganti yang kita siapkan adalah “RT $1: ”. $1 di sini adalah username, dalam contoh ini adalah “@dmwsdq”. Sedangkan adalah tanda spasi. Tanda spasi perlu kita nyatakan dalam mengingat tanda tersebut tidak akan tampil karena letaknya di belakang, sehingga tampaknya Yahoo Pipes secara otomatis menganggapnya tak perlu dan tak memunculkannya.
Hasil akhir dari modul ketujuh ini adalah “RT @username: “. Dalam contoh ini:
Selanjutnya, pada modul kedelapan dilakukan pembersihan tag HTML pada item.description. Pembersihan ini dilakukan dengan mengganti “(?s)<.*?>” dengan kosong (atau dengan kata lain menghapusnya). “(?s)<.*?>” ini adalah sebuah regex. Maksudnya adalah:
(?s) modifier s, yang akan menggunakan mode single-line. Selain modifier s, digunakan juga modifier g dan m di checkbox. Modifier g menyebabkan pencocokan dilakukan terus hingga akhir teks, meskipun sudah ada yang ditemukan. Sedangkan modifier m memungkinkan teks punya beberapa baris. Sepertinya modifier s juga bisa dicentang juga, tidak harus diketik. 😀
. artinya karakter apapun
* artinya sebanyak nol-atau-lebih
? artinya opsional, bisa ada bisa tidak
< dan > artinya adalah < dan > itu sendiri
Jika diterjemahkan ke bahasa manusia artinya adalah jika menemukan karakter yang diawali < dan diakhiri >, maka akan dihapus mulai dari < sampai >. Misalnya:
akan menjadi:
Dengan demikian, di akhir modul kedelapan kita sudah punya item.link yang mengandung “RT @username: “ dan item.description yang mengandung tweet yang sudah bersih dari tag HTML. Bisa dibilang kedua modul ini adalah inti dari pipes ini, di mana manipulasi tweet berlangsung.
Modul ini sebenarnya mengandung dua modul. Modul Loop berfungsi untuk melakukan iterasi / perulangan. Yang diiterasikan adalah modul yang ada di dalamnya, yaitu modul String Builder. Yang dilakukan kedua modul ini cukup sederhana, yakni menggabungkan elemen item.link dengan elemen item.description kemudian hasilnya dimasukkan ke item.title untuk setiap item (tweet) yang ada.
Dengan contoh di atas, maka hasil dari modul 9 ini adalah isi item.title menjadi:
Begitu saja. Hehehehehe.
Selanjutnya pipe ini bisa di-run seperti ini:
Membuat pipe seperti ini bisa jadi terlalu sepele untuk sekedar sebuah bot. Tapi fungsionalitas dari yahoo pipe dapat kita manfaatkan untuk melakukan hal lain yang bermanfaat. Begitu pula pengetahuan tentang regex akan sangat bermanfaat, insya allah. Dan kalau mau bermain regex dengan mudah tanpa pusing mikir kode lainnya, kita bisa manfaatkan Yahoo Pipes ini, tinggal geret modul string builder (input string), geret modul string regex (proses regex), dan pelototin debugger (output). :p
Sekian. Begitulah. Artikel ini sebenarnya hanyalah menunjang artikel sebelumnya.