Article:
Viết Chương Trình Chat bằng Ruby Kết Nối với Yahoo Messenger, Google Talk...
2794
ngocdaothanh.myopenid.com 172Updated over 2 years ago |
Hẳn bạn đã có dịp dùng Meebo? Bài viết sau xin hướng dẫn cách tự viết chương trình chat (instant messenger) có khả năng kết nối được với dịch vụ của các đại gia Yahoo, Google, Microsoft... Để theo được hướng dẫn, cần có chút kinh nghiệm với Linux và Ruby. Nếu khéo tay một chút, vẫn có thể làm cho chương trình chạy được trên tất cả hệ điều hành khác (ưu tiên số 1 hẳn vẫn là hệ của bác Bill và web).

Nếu đã dùng Linux, cam đoan bạn đã dùng qua Gaim, tên mới là Pidgin. Meebo tiết lộ họ dùng Lighttpd và libpurple. Chúng ta sẽ học hỏi Meebo, dùng lõi của Pidgin là libpurple để nói chuyện với các đại gia. Vì Pidgin và Ruby chạy được trên tất cả hệ điều hành, nên chương trình có thể chạy được trên tất cả hệ điều hành. Để đơn giản, hướng dẫn này chỉ giới hạn trên Ubuntu.
Ta dùng ruburple, là wrapper để gọi libpurple từ Ruby. Có thể cài từ gem: gem install rubpurple, nhưng phiên bản này (0.0.8) hơi cũ. Ta chọn giải pháp dùng phiên bản mới nhất lấy từ trunk. Hệ quả là ta cũng lấy source code mới nhất của Pidgin về rồi tự compile.
Biên Dịch libpurple
Vào SourceForge, lấy source code của Pidgin về rồi giải nén vào thư mục nào đó, tạm gọi là P.
Vào P, chạy configure để tạo Makefile với cấu hình tối thiểu:
env CFLAGS="-I/opt/local/include -L/opt/local/lib" ./configure --disable-gtkui --disable-consoleui --disable-screensaver --disable-startup-notification --disable-sm --disable-gtkspell --disable-gevolution --disable-cap --disable-gstreamer --disable-tcl --disable-tk --disable-doxygen --disable-perl --with-gnutls-includes=/opt/local/include/ --with-gnutls-libs=/opt/local/lib/ --without-x --disable-guestures
Nếu configure báo thiếu thư viện gì, thì apt-get search để xem thư viện đó nằm trong gói nào, rồi cài gói đó bằng apt-get install. Để kết nối với Google Talk và MSN, cần thư viện SSL (TLS) như cấu hình trên. Chú ý chỉnh đường dẫn cho phù hợp với máy của bạn.
Chuyển vào P/libpurple, chạy make để compile ra libpurple.so.
Chạy make install để copy libpurple.so và các file .h của libpurple vào thư mục hệ thống.
Biên Dịch Ruburple
Checkout Ruburple ra thư mục nào đó, tạm gọi là R.
Chuyển vào R/ext, chạy ruby extconf.rb để tạo Makefile.
Chạy make để tạo ruburple_ext.so.
Copy file này vào R/lib rồi copy R/lib vào thư mục thư viện của Ruby là ta xong công việc chuẩn bị, chỉ còn cần viết chương trình.
Chương Trình Chat
Thử gửi message giữa 2 account Google Talk (GMail):
require 'ruburple'
require 'monitor'
signed_on_lock = Monitor.new
signed_on_flag = MonitorMixin::ConditionVariable.new(signed_on_lock)
Ruburple::init
Ruburple::subscribe(:received_im_msg) do |a,b,c,d,e| puts "rcv im: #{a}, #{b}, #{c}, #{d}, #{e}" end
Ruburple::subscribe(:signed_on) do |c|
puts "signed on: #{c}"
signed_on_lock.synchronize do
signed_on_flag.broadcast
end
end
p = Ruburple::get_protocol("XMPP")
puts "gonna connect to #{p.id}, #{p.name}, #{p.version}, #{p.summary}, #{p.description}, #{p.author}, #{p.homepage}"
a = p.get_account("account1@gmail.com", "password")
a.connect
signed_on_lock.synchronize do
signed_on_flag.wait
end
a.connection.send_im("account2@gmail.com", "message")
a.connection.close
Để login vào YIM, cần dùng tham số hơi khác:
get_protocol("Yahoo"), get_account("account1", "password1")
Tham Khảo Thêm
- README và INSTALL của Ruburple
- purple_ruby (thư viện mới tốt hơn Ruburple)
- OpenYMSG (thư viện Java)
172