Article:
chính xác hoá thành phần Hotmail importer của gem Blackbook
797
ndgiang84.myopenid.com 2Updated 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.
2
Updated over 3 years ago