[perl-www-contact commit] r48 - in trunk: . lib/WWW lib/WWW/Contact t t/samples

6 views
Skip to first unread message

codesite...@google.com

unread,
Nov 7, 2008, 9:39:50 PM11/7/08
to perl-www...@googlegroups.com
Author: fayland
Date: Fri Nov 7 18:38:33 2008
New Revision: 48

Added:
trunk/t/samples/gmail.html
trunk/t/samples/gmail_NoEmail.html
Modified:
trunk/Changes
trunk/META.yml
trunk/lib/WWW/Contact.pm
trunk/lib/WWW/Contact/Gmail.pm
trunk/t/101-gmail.t

Log:
fix "Gmail Contacts with no email cause incorrect matchup" (RT 40756)

Modified: trunk/Changes
==============================================================================
--- trunk/Changes (original)
+++ trunk/Changes Fri Nov 7 18:38:33 2008
@@ -1,4 +1,8 @@
Revision history for WWW-Contact
+
+0.17 2008.11.08
+ fix "Gmail Contacts with no email cause incorrect matchup" (RT
40756)
+
0.16 2008.11.02
Bug fix on Gmail module to handle fancy names(like R@j@n).
Clean up quotes(that surround name and email) when importing data
from Rediffmail.

Modified: trunk/META.yml
==============================================================================
--- trunk/META.yml (original)
+++ trunk/META.yml Fri Nov 7 18:38:33 2008
@@ -1,6 +1,6 @@
---
name: WWW-Contact
-version: 0.16
+version: 0.17
author:
- 'Fayland Lam <fay...@gmail.com>'
abstract: Get contacts/addressbook from Web
@@ -29,7 +29,7 @@
version: 0.16
WWW::Contact::Gmail:
file: lib/WWW/Contact/Gmail.pm
- version: 0.16
+ version: 0.17
WWW::Contact::Hotmail:
file: lib/WWW/Contact/Hotmail.pm
version: 0.16

Modified: trunk/lib/WWW/Contact.pm
==============================================================================
--- trunk/lib/WWW/Contact.pm (original)
+++ trunk/lib/WWW/Contact.pm Fri Nov 7 18:38:33 2008
@@ -4,7 +4,7 @@
use Moose;
use Moose::Util::TypeConstraints;

-our $VERSION = '0.16';
+our $VERSION = '0.17';
our $AUTHORITY = 'cpan:FAYLAND';

has 'errstr' => ( is => 'rw', isa => 'Maybe[Str]' );

Modified: trunk/lib/WWW/Contact/Gmail.pm
==============================================================================
--- trunk/lib/WWW/Contact/Gmail.pm (original)
+++ trunk/lib/WWW/Contact/Gmail.pm Fri Nov 7 18:38:33 2008
@@ -3,7 +3,7 @@
use Moose;
extends 'WWW::Contact::Base';

-our $VERSION = '0.16';
+our $VERSION = '0.17';
our $AUTHORITY = 'cpan:FAYLAND';

use HTML::TokeParser::Simple;
@@ -40,6 +40,11 @@
$ua->follow_link( url => '?v=cl&pnl=a' );

$content = $ua->content();
+
+ open(my $fh, '>', 'E:\gmail.html');
+ print $fh $content;
+ close($fh);
+
@contacts = $self->get_contacts_from_html($content);

return wantarray ? @contacts : \@contacts;
@@ -72,15 +77,17 @@
}
}
if ($start) {
- if( $token->is_start_tag('td') ) {
+ if( scalar @names > scalar @emails and $token->is_start_tag('td') ) {
my $text = $p->peek(2);
if ($text =~ /(\S+\@\S+)/) {
push @emails, $1;
+ } else {
+ pop @names; # remove last name for NoEmail
}
}
}
}
-
+
my @contacts;
foreach my $i (0 .. $#emails) {
push @contacts, {

Modified: trunk/t/101-gmail.t
==============================================================================
--- trunk/t/101-gmail.t (original)
+++ trunk/t/101-gmail.t Fri Nov 7 18:38:33 2008
@@ -5,7 +5,7 @@
use FindBin qw/$Bin/;
use lib "$Bin/lib";
use Test::More;
-use WWW::Contact;
+use WWW::Contact::Gmail;
use Data::Dumper;

# to avoid error like
@@ -34,12 +34,55 @@
unless ( $ENV{TEST_GMAIL} and $ENV{TEST_GMAIL_PASS} ) {
plan skip_all => 'set $ENV{TEST_GMAIL} and $ENV{TEST_GMAIL_PASS}
to test';
}
- plan tests => 4;
+ plan tests => 8;
}

-my $wc = new WWW::Contact;
+my $wc = new WWW::Contact::Gmail;

my @contacts = $wc->get_contacts('fay...@gmail.com', 'pass');
+
+# test get_contacts_from_html
+open(my $fh, '<', "$Bin/samples/gmail.html");
+local $/;
+my $content = <$fh>;
+close($fh);
+my @contacts2 = $wc->get_contacts_from_html( $content );
+is(scalar @contacts2, 3);
+is_deeply(\@contacts2, [
+ {
+ name => 'fayland',
+ email => 'yy...@gmail.com'
+ },
+ {
+ name => 'mailman',
+ email => 'mai...@pm.org'
+ },
+ {
+ name => 'support',
+ email => 'sup...@pm.org'
+ }
+]);
+open($fh, '<', "$Bin/samples/gmail_NoEmail.html");
+local $/;
+$content = <$fh>;
+close($fh);
+@contacts2 = $wc->get_contacts_from_html( $content );
+is(scalar @contacts2, 3);
+is_deeply(\@contacts2, [
+ {
+ name => 'fayland',
+ email => 'yy...@gmail.com'
+ },
+ {
+ name => 'mailman',
+ email => 'mai...@pm.org'
+ },
+ {
+ name => 'support',
+ email => 'sup...@pm.org'
+ }
+]);
+
my $errstr = $wc->errstr;
is($errstr, 'Wrong Username or Password', 'get error with wrong password');
is(scalar @contacts, 0, 'empty contact list');

Added: trunk/t/samples/gmail.html
==============================================================================
--- (empty file)
+++ trunk/t/samples/gmail.html Fri Nov 7 18:38:33 2008
@@ -0,0 +1,7 @@
+ <html lang="zh-CN"> <head> <meta content="text/html; charset=utf-8"
http-equiv="Content-Type"> <title>Gmail - 联系人列表</title> <link
rel="shortcut icon" href="/mail/images/favicon.ico" type="image/x-icon">
<link rel="stylesheet" type="text/css"
href="https://mail.google.com/mail/h/125kp4blhofee/?v=ss&name=c&ver=x9tovv1s9apw">
<style type="text/css">
+@import
url("https://mail.google.com/mail/h/oa31mmzjab02/?v=ss&name=a&ver=1sthyqjwgl8hj");
+</style> <base href="https://mail.google.com/mail/h/1mgfg0yo4736y/">
<script><!--
+var
tz_path=";path=/";if(top.location.href.toLowerCase().indexOf("google.com")>0){tz_path+=";domain=.google.com"}document.cookie="TZ="+(new
Date).getTimezoneOffset()+tz_path
+//-->
+</script> </head> <body bgcolor="#ffffff"> <table width="100%"
cellpadding="4" cellspacing="0" border="0" class="bn"> <tr> <td id="bm"
bgcolor="#FAE5B0"> <b>您目前正以基本 HTML 视图查看 Gmail。 &nbsp; <a
href="?redir=%2Fmail%2F&amp;a=stsv&amp;at=xn3j2yj6l8o80m2725tkcrvyljj4t7">
切换至标准视图</a></b> | <a
href="?redir=%3F&amp;a=pbhtml&amp;at=xn3j2yj6l8o80m2725tkcrvyljj4t7"> 将基
本 HTML 设置为默认视图</a> </td> </tr> </table> <table width="100%"
cellpadding="0" cellspacing="0" border="0"> <tr> <td width="143"
rowspan="3"> <h1> <a href="?"> <img src="/mail/help/images/logo.gif"
width="143" height="59" border="0" alt="Gmail由 Google 提供"> </a> </h1>
</td> <td width="1" rowspan="3">&nbsp;</td> <td height="25" colspan="2"
align="right" valign="top"> <h2 class="hdn">帐户选项
</h2><b>xx...@gmail.com</b> | <a href="?v=prg">设置</a> | <a
href="/support/?ctx=mail&hl=zh-CN" target="_blank">帮助</a> | <a
href="https://mail.google.com/mail/h/1i6hrmsb5q89/?logout&amp;hl=zh-CN">退出
</a><tr> <form action="?" name="sf" method="GET"> <input type="hidden"
name="s" value="q"> <td> <table width="100%" cellpadding="0"
cellspacing="0" border="0"> <tr> <td width="1%" height="25" nowrap> <input
size="28" maxlength="2048" title="Search" name="q" value="">&nbsp;<input
type="submit" name="nvp_site_mail" value="搜索邮件">&nbsp;<input
type="submit" name="nvp_site_web" value="搜索网页"> </td> <td><font
size="1"> &nbsp;<a href="?v=as&pv=tl">显示搜索选项</a> </font><br><font
size="1"> <a href="?v=caf&pv=tl">创建过滤器</a> </font></form> </table>
<tr> <td height="25" colspan="2"> </table> <table width="100%"
cellpadding="0" cellspacing="0" border="0"> <tr> <td width="120"
valign="top"> <table width="100%" cellpadding="2" cellspacing="0"
border="0" class="m"> <tr> <td> <b><a href="?v=b&pv=tl&cs=b"
accesskey="c">撰写新邮件</a></b><tr> <td height="5"> <h2 class="hdn">文件夹
</h2> <tr> <td> <h3><b><a href="?" accesskey="i">收件箱
&nbsp;(52)</a></b></h3> <tr> <td> <a href="?s=r">已加星标&nbsp;<img
src="/mail/images/star_on_sm_2.gif" width="13" height="13" border="0"
alt="星标" /></a> <tr> <td> <a href="?s=s">已发邮件</a> <tr> <td> <a
href="?s=d">草稿</a> <tr> <td> <a href="?s=a">所有邮件</a> <tr> <td> <a
href="?s=m">垃圾邮件</a> <tr> <td> <a href="?s=t">已删除邮件</a> <tr> <td
height="8"> <tr> <td bgcolor="#FAD163"> <h3><b><a href="?v=cl">联系人
</a></b></h3> <tr> <td height="8"> </table> <table width="100%"
cellpadding="2" cellspacing="0" border="0" class="l"> <tr> <td class="lb">
<h2><font color="#000000">标签</font><br></h2> </td> </table> <td
valign="top"> <table width="100%" cellpadding="0" cellspacing="0"
border="0"> <tr> <td width="5" bgcolor="#FAD163">&nbsp;</td> <td> <table
width="100%" cellpadding="2" cellspacing="0" border="0" bgcolor="#fad163">
<form action="?fv=cl&pv=cl&fpnl=a&cs=fc" name="f" method="POST"> <tr> <td>
<input type="submit" name="nvp_bu_comp" value="撰写"> &nbsp;<input
type="submit" name="nvp_bu_del" value="删除"> </td> <td
align="right">&nbsp; </table> <table width="100%" cellpadding="0"
cellspacing="0" border="0" bgcolor="#fad163"> <tr> <td> <div class="hp">
<div class="tb">&nbsp;<b><a href="?v=cl&pnl=p">经常发送邮件
</a></b>&nbsp;</div> <div class="tb bg">&nbsp;<b>所有联系人</b>&nbsp;</div>
<div class="fl"> <input size="20" maxlength="2048" title="Search Contacts"
class="ml" name="scq" value="">&nbsp;<input type="submit" name="nvp_bu_sc"
value="搜索联系人"> </div> <div class="fr"> 第 <b>3</b> 个,共有 <b>3</b> 个
&nbsp; </div> </div> </td> <table width="100%" cellpadding="2"
cellspacing="0" border="0" bgcolor="#ffffff" class="th"> <tr>
<td>&nbsp;</td> <th scope="col" width="28%" class="nl">姓名</th> <th
scope="col" width="71%" class="nl">详细信息</th> <td>&nbsp;</td> </tr> <tr>
<td width="1%" nowrap> <input type="checkbox" name="c" value="0"> </td> <td
width="28%"> <b>fayland</b> </td> <td width="71%"> yy...@gmail.com &nbsp;
</td> <tr> <td> <input type="checkbox" name="c" value="1"> </td> <td>
<b>mailman</b> </td> <td> mai...@pm.org &nbsp; </td> <tr> <td> <input
type="checkbox" name="c" value="2"> </td> <td> <b>support</b> </td> <td>
sup...@pm.org &nbsp; </td> <tr> <td colspan="5" height="50"
bgcolor="#ffffff">&nbsp; </table> <table width="100%" cellpadding="2"
cellspacing="0" border="0" bgcolor="#fad163"> <tr> <td> <input
type="submit" name="nvp_bu_comp" value="撰写"> &nbsp;<input type="submit"
name="nvp_bu_del" value="删除"> </td> <td align="right"> </form> </table>
</table> <table cellpadding="2" cellspacing="0" border="0" align="center"
class="ft"> <tr> <td align="center"> 可使用搜索框或<b>搜索选项</b>快速查找邮
件! <tr> <td align="center"> <span style="color: #006633;
+font-weight: bold;"> 您目前使用了 7260 MB 的 0 MB (占 0%) </span> <div
style="font-size: 11px; line-height: 17px;"> 此帐户当前正在该 IP 的另一位置
使用 (123.14.245.15) 使用。 &nbsp; 上次帐户活动时间: 1分钟前。 &nbsp;<a
href="?v=ac" target="details">详细信息</a></div> <div style="margin:5 0
10"> <table cellpadding="0" cellspacing="0" border="0" class="bn"> <tr><td
id="bm" bgcolor="#FAE5B0"> <div style="font-size:85%;margin:3 15 3
15;">Gmail 视图: <a
href="?redir=%2Fmail%2F&amp;a=stsv&amp;at=xn3j2yj6l8o80m2725tkcrvyljj4t7">
标准</a> | <b>基本 HTML</b>&nbsp; <a
href="/support/bin/answer.py?ctx=%67mail&answer=15049" target="_blank">了解
详情</a></div> </td></tr> </table> </div> <tr> <td align="center"><font
size="1"> &copy;2008 Google - <a href="/mail/help/intl/zh-CN/terms.html"
target="_blank"> 条款 </a> - <a href="http://www.google.com"
target="_blank">Google 主页</a> </font></table> </table> </body> </html>
\ No newline at end of file

Added: trunk/t/samples/gmail_NoEmail.html
==============================================================================
--- (empty file)
+++ trunk/t/samples/gmail_NoEmail.html Fri Nov 7 18:38:33 2008
@@ -0,0 +1,7 @@
+ <html lang="zh-CN"> <head> <meta content="text/html; charset=utf-8"
http-equiv="Content-Type"> <title>Gmail - 联系人列表</title> <link
rel="shortcut icon" href="/mail/images/favicon.ico" type="image/x-icon">
<link rel="stylesheet" type="text/css"
href="https://mail.google.com/mail/h/1pbd41yep3bsx/?v=ss&name=c&ver=x9tovv1s9apw">
<style type="text/css">
+@import
url("https://mail.google.com/mail/h/joxlxx5hpxqa/?v=ss&name=a&ver=1sthyqjwgl8hj");
+</style> <base href="https://mail.google.com/mail/h/5r1t0rj86p9g/">
<script><!--
+var
tz_path=";path=/";if(top.location.href.toLowerCase().indexOf("google.com")>0){tz_path+=";domain=.google.com"}document.cookie="TZ="+(new
Date).getTimezoneOffset()+tz_path
+//-->
+</script> </head> <body bgcolor="#ffffff"> <table width="100%"
cellpadding="4" cellspacing="0" border="0" class="bn"> <tr> <td id="bm"
bgcolor="#FAE5B0"> <b>您目前正以基本 HTML 视图查看 Gmail。 &nbsp; <a
href="?redir=%2Fmail%2F&amp;a=stsv&amp;at=xn3j2zztgo9odk047u3y6jklc1ay67">
切换至标准视图</a></b> | <a
href="?redir=%3F&amp;a=pbhtml&amp;at=xn3j2zztgo9odk047u3y6jklc1ay67"> 将基
本 HTML 设置为默认视图</a> </td> </tr> </table> <table width="100%"
cellpadding="0" cellspacing="0" border="0"> <tr> <td width="143"
rowspan="3"> <h1> <a href="?"> <img src="/mail/help/images/logo.gif"
width="143" height="59" border="0" alt="Gmail由 Google 提供"> </a> </h1>
</td> <td width="1" rowspan="3">&nbsp;</td> <td height="25" colspan="2"
align="right" valign="top"> <h2 class="hdn">帐户选项
</h2><b>xx...@gmail.com</b> | <a href="?v=prg">设置</a> | <a
href="/support/?ctx=mail&hl=zh-CN" target="_blank">帮助</a> | <a
href="https://mail.google.com/mail/h/12glpbov22g9d/?logout&amp;hl=zh-CN">退
出</a><tr> <form action="?" name="sf" method="GET"> <input type="hidden"
name="s" value="q"> <td> <table width="100%" cellpadding="0"
cellspacing="0" border="0"> <tr> <td width="1%" height="25" nowrap> <input
size="28" maxlength="2048" title="Search" name="q" value="">&nbsp;<input
type="submit" name="nvp_site_mail" value="搜索邮件">&nbsp;<input
type="submit" name="nvp_site_web" value="搜索网页"> </td> <td><font
size="1"> &nbsp;<a href="?v=as&pv=tl">显示搜索选项</a> </font><br><font
size="1"> <a href="?v=caf&pv=tl">创建过滤器</a> </font></form> </table>
<tr> <td height="25" colspan="2"> </table> <table width="100%"
cellpadding="0" cellspacing="0" border="0"> <tr> <td width="120"
valign="top"> <table width="100%" cellpadding="2" cellspacing="0"
border="0" class="m"> <tr> <td> <b><a href="?v=b&pv=tl&cs=b"
accesskey="c">撰写新邮件</a></b><tr> <td height="5"> <h2 class="hdn">文件夹
</h2> <tr> <td> <h3><b><a href="?" accesskey="i">收件箱
&nbsp;(52)</a></b></h3> <tr> <td> <a href="?s=r">已加星标&nbsp;<img
src="/mail/images/star_on_sm_2.gif" width="13" height="13" border="0"
alt="星标" /></a> <tr> <td> <a href="?s=s">已发邮件</a> <tr> <td> <a
href="?s=d">草稿</a> <tr> <td> <a href="?s=a">所有邮件</a> <tr> <td> <a
href="?s=m">垃圾邮件</a> <tr> <td> <a href="?s=t">已删除邮件</a> <tr> <td
height="8"> <tr> <td bgcolor="#FAD163"> <h3><b><a href="?v=cl">联系人
</a></b></h3> <tr> <td height="8"> </table> <table width="100%"
cellpadding="2" cellspacing="0" border="0" class="l"> <tr> <td class="lb">
<h2><font color="#000000">标签</font><br></h2> </td> </table> <td
valign="top"> <table width="100%" cellpadding="0" cellspacing="0"
border="0"> <tr> <td width="5" bgcolor="#FAD163">&nbsp;</td> <td> <table
width="100%" cellpadding="2" cellspacing="0" border="0" bgcolor="#fad163">
<form action="?fv=cl&pv=cl&fpnl=a&cs=fc" name="f" method="POST"> <tr> <td>
<input type="submit" name="nvp_bu_comp" value="撰写"> &nbsp;<input
type="submit" name="nvp_bu_del" value="删除"> </td> <td
align="right">&nbsp; </table> <table width="100%" cellpadding="0"
cellspacing="0" border="0" bgcolor="#fad163"> <tr> <td> <div class="hp">
<div class="tb">&nbsp;<b><a href="?v=cl&pnl=p">经常发送邮件
</a></b>&nbsp;</div> <div class="tb bg">&nbsp;<b>所有联系人</b>&nbsp;</div>
<div class="fl"> <input size="20" maxlength="2048" title="Search Contacts"
class="ml" name="scq" value="">&nbsp;<input type="submit" name="nvp_bu_sc"
value="搜索联系人"> </div> <div class="fr"> 第 <b>4</b> 个,共有 <b>4</b> 个
&nbsp; </div> </div> </td> <table width="100%" cellpadding="2"
cellspacing="0" border="0" bgcolor="#ffffff" class="th"> <tr>
<td>&nbsp;</td> <th scope="col" width="28%" class="nl">姓名</th> <th
scope="col" width="71%" class="nl">详细信息</th> <td>&nbsp;</td> </tr> <tr>
<td width="1%" nowrap> <input type="checkbox" name="c" value="0"> </td> <td
width="28%"> <b>fayland</b> </td> <td width="71%"> yy...@gmail.com &nbsp;
</td> <tr> <td> <input type="checkbox" name="c" value="1"> </td> <td>
<b>mailman</b> </td> <td> mai...@pm.org &nbsp; </td> <tr> <td> <input
type="checkbox" name="c" value="5813cbe48840a415"> </td> <td>
<b>NoEmail</b> </td> <td> &nbsp; </td> <tr> <td> <input type="checkbox"
name="c" value="2"> </td> <td> <b>support</b> </td> <td> sup...@pm.org
&nbsp; </td> <tr> <td colspan="5" height="25" bgcolor="#ffffff">&nbsp;
</table> <table width="100%" cellpadding="2" cellspacing="0" border="0"
bgcolor="#fad163"> <tr> <td> <input type="submit" name="nvp_bu_comp"
value="撰写"> &nbsp;<input type="submit" name="nvp_bu_del" value="删除">
</td> <td align="right"> </form> </table> </table> <table cellpadding="2"
cellspacing="0" border="0" align="center" class="ft"> <tr> <td
align="center"> 通过选中多个收件人并按<b>&lsquo;撰写&rsquo;</b>按钮,可以向
多个收件人发送邮件。 <tr> <td align="center"> <span style="color: #006633;
+font-weight: bold;"> 您目前使用了 7260 MB 的 0 MB (占 0%) </span> <div
style="font-size: 11px; line-height: 17px;"> 此帐户当前正在该 IP 的另一位置
使用 (123.14.245.15) 使用。 &nbsp; 上次帐户活动时间: 0分钟前。 &nbsp;<a
href="?v=ac" target="details">详细信息</a></div> <div style="margin:5 0
10"> <table cellpadding="0" cellspacing="0" border="0" class="bn"> <tr><td
id="bm" bgcolor="#FAE5B0"> <div style="font-size:85%;margin:3 15 3
15;">Gmail 视图: <a
href="?redir=%2Fmail%2F&amp;a=stsv&amp;at=xn3j2zztgo9odk047u3y6jklc1ay67">
标准</a> | <b>基本 HTML</b>&nbsp; <a
href="/support/bin/answer.py?ctx=%67mail&answer=15049" target="_blank">了解
详情</a></div> </td></tr> </table> </div> <tr> <td align="center"><font
size="1"> &copy;2008 Google - <a href="/mail/help/intl/zh-CN/terms.html"
target="_blank"> 条款 </a> - <a href="http://www.google.com"
target="_blank">Google 主页</a> </font></table> </table> </body> </html>
\ No newline at end of file
Reply all
Reply to author
Forward
0 new messages