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

Article: chính xác hoá thành phần Hotmail importer của gem Blackbook 797

ndgiang84.myopenid.com 2
Updated over 3 years ago

Thỉnh thoảng trong hòm thư bạn nhận được 1 invitation của 1 người bạn nào đó mời tham gia Hi5, myspace, .... các trang web đó có chức năng cho người sử dụng nhập user/password của account Yahoo, Hotmail, AOL, Gmail rồi tự động gửi invitation tới các contacts được chỉ định.

Với Rails có thể sử dụng 1 trong 2 gems Blackbook hoặc Contacts (đã thử gem Contact với hotmail, có vẻ kém hiệu quả hơn Blackbook)

Không hiểu Hotmail thay đổi cách tổ chức dữ liệu hay người viết gem Blackbook không cẩn thận khi viết phần xử lý contacts cho Hotmail.

Blackbook version 1.0.4 chỉ get được contacts' names, không get được contacts' emails.

file C:\ruby\lib\ruby\gems\1.8\gems\blackbook-1.0.4\lib\blackbook\importer\hotmail.rb

lines 80-93:

80: rows.collect do |row|
81:      name = row.search("//div[@class='cDisplayName']").first.innerText.strip
82:      name = name[0,(name.size-3)] # char 142 is last char of clean text
83:
84:      vals = {}
85:      row.search("/table/tr").each do |pair|
86:        key = pair.search("/td[@class='TextAlignRight Label']").first.innerText.strip
87:        val = pair.search("/td[@class='Value']").first.innerText.strip
88:        vals[key.to_sym] = val
89:      end
90:      vals[:name] = name
91:      vals[:email] = (vals['Personal e-mail'.to_sym] || vals['Work e-mail'.to_sym]).split(' ').first rescue ''
92:      vals
93:    end

 

sửa thành:

80: rows.collect do |row|            
81:   name = row.search("//div[@class='cDisplayName']").first.innerText.strip
82:   name = name[0,(name.size-3)] # char 142 is last char of clean text
83:   vals = {}
84:   val = ""      
85:   
86:   row.search("//table/tr").each do |pair|
87:     unless pair.search("/td[@class='TextAlignRight Label']").first.nil?           
88:       key = pair.search("/td[@class='TextAlignRight Label']").first.innerText.strip
89:       if (key == "Windows Live ID:") || (key == "IM address:") || (key == "Personal e-mail:") || (key == "Work e-mail:") || (key == "Other e-mail:")
90:         val = pair.search("/td[@class='Value']").first.innerText.strip                              
91:       end
92:       break unless val.empty?
93:     end
94:   end
95:  
96:   vals[:name] = name
97:   vals[:email] = val
98:   vals
99: end

là OK.

(1) thêm 1 dấu "/" ở line 86

(2) cần phải check nil ở line 87, có trường hợp "td" không có tên

(3) lấy name ở "td" có name cDisplayname là chuẩn.

(4) lấy email đầu tiên (hotmail lưu vài cái email của 1 contact: personal email, work e-mail, other e-mail....)

để chủ động thì vào địa chỉ http://mail.live.com/mail/PrintShell.aspx?type=contact để thấy cụ thể bố trí table của hotmail.

hope this helps.

Comments

ngocdaothanh.myopenid.com 174
Updated over 3 years ago

Không hiểu Hotmail thay đổi cách tổ chức dữ liệu hay người viết gem Blackbook không cẩn thận khi viết phần xử lý contacts cho Hotmail.

Theo mã nguồn ở trên, thì có vẻ cách hoạt động của Blackbook là tái tạo lại quá trình login, rồi phân tích mã HTML để trích ra thông tin cần thiết. Do đó, khi Microsoft thay đổi mã HTML của Hotmail thì nó không hoạt động được nữa (bản mới nhất của Blackbook ra cách đây 9 tháng, có thể nó hoạt động đúng với mã HTML của Hotmail vào thời điểm đó).

ndgiang84 nên báo lỗi và đề xuất cách sửa cho tác giả của Blackbook.

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