Vinova tuyển lập trình viên Mobile & Web ở Hà Nội, lương $300-1000

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 172
Updated 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

 

 

1 2 3 4 

Editors
ngocdaothanh.myopenid.com 172
nguoitapdich.myopenid.com 35
alide.myopenid.com 32

Comments

You must login to be able to comment

Uploaded files

No file uploaded yet

You must login to be able to upload

Nhà tài trợ:

Mọi người đều tự do viết bài, sửa bài của người khác, và bình luận ở trang web này. Bạn muốn chủ động tạo bài mới để chia sẻ kinh nghiệm với mọi người? Xin click link ở dưới.

Create new content