Pages

Jan 26, 2012

Siri berinteraksi dengan HTTP



 

Salam 1Malaysia. Hari ini aku nak berkongsi dengan para pembaca sekalian berkenaan dengan Mechanize. Mechanize ialah sebuah library atau perpustakaan untuk ruby (juga python, perl dan lain-lain) untuk berinteraksi dengan laman sesawang secara automatik.

Apa yang best tentang Mechanize ini ialah, berbanding dengan http library yang lain, ia secara automatik menyimpan dan menghantar cookie, follow redirect, submit form dan lain-lain tanpa perlu susah payah untuk meng'pattern-matching'kan segala yang ada dalam HTTP GET/POST header.

Bagi setiap form submission, auth_token juga selalunya diperlukan untuk dihantar melalui POST request, Mechanize dengan bergayanya akan menyimpan dan menghantar bersama-sama auth_token tersebut semasa form submission.

Tambah menarik lagi, bagi sesebuah login page, atau apa-apa page yang mempunyai field form element untuk disubmit, Mechanize menyediakan fungsi untuk meng'list-down'kan semua form field (berserta dengan id, name, value dan lain-lain untuk field tersebut) dan anda boleh meng'assign'kan apa-apa value yang berpatutan kepada field tersebut untuk disubmit ke operasi HTTP yang seterusnya.

Ini sememangkan sesuatu yang bagus, kerana melalui fungsi dan kehebatan ini, anda dapat melakukan sesebuah automasi untuk sesebuah laman sesawang dengan jayanya. Sebagai contoh, berikut adalah sebuah automasi untuk meng'update' status facebook anda melalui skrip ruby.

# Require this libraries..
require 'rubygems'
require 'mechanize'

# don't verify SSL cert. WARNING: MITM-alert!
OpenSSL::SSL::VERIFY_PEER = OpenSSL::SSL::VERIFY_NONE

# Please enter this details
email = "YOUR_FACEBOOK_EMAIL@LALA.COM"
pass = "YOUR_FACEBOOK_PASSW@RD"
status = "I'm updating my facebook through Ruby Mechanize y'all"

# Initialize new Mechanize class
agent = Mechanize.new

# Set user agent to mechanize
agent.user_agent_alias = 'Mac Safari'

# We'll use facebook mobile page. Less hassle, nuff said
puts "::: Connecting to Facebook..."
sign_in = agent.get('http://m.facebook.com/')

# Find form name "email" and "pass" and set the facebook email and password
puts "::: Signing in to Facebook..."
signin_form = sign_in.forms[0]
signin_form.fields.find{|f| f.name == "email"}.value = email
signin_form.fields.find{|f| f.name == "pass"}.value = pass

# And submit the form to facebook
sign_in = agent.submit(signin_form)

# Now we've logged in, update status now!
puts "::: Updating your status to: #{status}"
status_form = sign_in.forms[0]
status_form.fields.find{|f| f.name == "status"}.value = status
status_update = agent.submit(status_form)

Pelbagai aktiviti-aktiviti lain yang anda boleh lakukan dengan Mechanize. Ambil masa untuk belajar dan mengkaji, insyaAllah, dengan izinNya, dapatlah kita menggunakan Mechanize untuk memudahkan kerja-kerja kita seharian yang selama ini kita lakukan secara manual.

Artikel ini telah dirujuk kepada: