From: <de...@de...> - 2012-10-31 11:07:26
|
Author: MahiroAndo Date: 2012-10-31 06:07:17 -0500 (Wed, 31 Oct 2012) New Revision: 23806 Trac url: http://develop.twiki.org/trac/changeset/23806 Modified: twiki/trunk/HeadlinesPlugin/lib/TWiki/Plugins/HeadlinesPlugin.pm twiki/trunk/HeadlinesPlugin/lib/TWiki/Plugins/HeadlinesPlugin/Core.pm Log: Item7016: use <guid>; use addToHEAD; use getExternalResource Modified: twiki/trunk/HeadlinesPlugin/lib/TWiki/Plugins/HeadlinesPlugin/Core.pm =================================================================== --- twiki/trunk/HeadlinesPlugin/lib/TWiki/Plugins/HeadlinesPlugin/Core.pm 2012-10-31 10:29:19 UTC (rev 23805) +++ twiki/trunk/HeadlinesPlugin/lib/TWiki/Plugins/HeadlinesPlugin/Core.pm 2012-10-31 11:07:17 UTC (rev 23806) @@ -42,7 +42,6 @@ my $isInitialized; my $userAgent; my $userAgentTimeout; -my $userAgentName; my $doneHeader; my %entityHash = ( 160 => 'nbsp', @@ -315,16 +314,9 @@ '<div class="headlinesChannel"><div class="headlinesLogo"><img src="$imageurl" alt="$imagetitle" border="0" />%BR%</div><div class="headlinesTitle">$n---+!! <a href="$link">$title</a></div><div class="headlinesDate">$date</div><div class="headlinesDescription">$description</div><div class="headlinesRight">$rights</div></div>'; $defaultFormat = TWiki::Func::getPreferencesValue('HEADLINESPLUGIN_FORMAT') || '<div class="headlinesArticle"><div class="headlinesTitle"><a href="$link">$title</a></div>$n<span class="headlinesDate">$date</span> <span class="headlinesCreator"> $creator</span> <span class="headlinesSubject"> $subject </span>$n<div class="headlinesText"> $description</div></div>'; - $useLWPUserAgent = TWiki::Func::getPreferencesValue('HEADLINESPLUGIN_USELWPUSERAGENT') - || '1'; $userAgentTimeout = TWiki::Func::getPreferencesValue("HEADLINESPLUGIN_USERAGENTTIMEOUT") || 20; - $userAgentName = TWiki::Func::getPreferencesValue("HEADLINESPLUGIN_USERAGENTNAME") || - 'TWikiHeadlinesPlugin/' . $TWiki::Plugins::HeadlinesPlugin::RELEASE; - $useLWPUserAgent =~ s/^\s*(.*?)\s*$/$1/go; - $useLWPUserAgent = ($useLWPUserAgent =~ /on|yes|1/)?1:0; - } # ========================= @@ -375,9 +367,11 @@ } #writeDebug("url=$theUrl"); - my ($text, $errorMsg) = $useLWPUserAgent?&getUrlLWP($theUrl):&getUrl($theUrl); - return ( undef, "ERROR: $errorMsg", $updated ) if $errorMsg; + my $res = TWiki::Func::getExternalResource($theUrl, [], {timeout => $userAgentTimeout}); + return ( undef, "ERROR: ".$res->status_line, $updated ) if $res->is_error; + my $text = $res->content; + if ($theRefresh) { unless(-e $cacheDir) { # create the cache directory in the pub dir of the HeadlinesPlugin @@ -538,6 +532,7 @@ my $line = ""; my $ok = 0; my $count = 0; + my $link = ""; foreach (split(/<item[^>]*>/, $raw)) { next unless $_; #writeDebug("item='$_'"); @@ -549,9 +544,9 @@ $ok = 1; } if (/<link[^>]*>\s*(.*?)\s*<\/link>/) { - $val = $1; + $val = &recode($1); $val =~ s/^http:\/\/.*\*(http:\/\/.*)$/$1/gos; # yahoo fix - $line =~ s/\$(item)?link/$val/gos; + $link = $val; $ok = 1; } if (&parseCONTENT(\$_, \$line)) { @@ -577,12 +572,19 @@ $line =~ s/\$(item)?category/$val/gos; $ok = 1; } + if (/<guid[^>]*>(.*?)<\/guid>/) { + $link ||= &recode($1); + $ok = 1; + } if (&parseDC(\$_, \$line)) { $ok = 1; } if (&parseIMAGE(\$_, \$line)) { $ok = 1; } + if ( $link ) { + $line =~ s/\$(item)?link/$link/gos; + } $line =~ s/\$title/Untitled/go; $line =~ s/\$(item)?(link|description|date|category)//go; $line =~ s/\$(rights|coverage|relation|language|source|identifier|format|date|contributor|creator|subject|description)//go; @@ -740,7 +742,6 @@ $text =~ s/"/"/go; } - $text =~ s/
/\n/go; # TODO: partial utf8 support @@ -762,6 +763,7 @@ # map integer representations to html entities $text =~ s/&#(\d+);/($1<160)?chr($1):'&'.($entityHash{$1}||"#$1").';'/ge; + $text =~ s/%/%/g; return $text; } @@ -941,91 +943,5 @@ return $ok; } -# ========================= -sub getUrlLWP { - my $theUrl = shift; - - #writeDebug("called getUrlLWP($theUrl)"); - - unless ($userAgent) { - eval "use LWP::UserAgent"; - die $@ if $@; - - my $proxyHost = TWiki::Func::getPreferencesValue('PROXYHOST') || ''; - my $proxyPort = TWiki::Func::getPreferencesValue('PROXYPORT') || ''; - $proxyHost ||= $TWiki::cfg{PROXY}{HOST}; - $proxyPort ||= $TWiki::cfg{PROXY}{PORT}; - my $proxySkip = $TWiki::cfg{PROXY}{SkipProxyForDomains} || ''; - - $userAgent = LWP::UserAgent->new(); - $userAgent->agent( $userAgentName ); - # don't leave the LWP default string there as - # this is blocked by some sites, e.g. google news - $userAgent->timeout( $userAgentTimeout ); - if( $proxyHost && $proxyPort ) { - my $proxyURL = "$proxyHost:$proxyPort/"; - $proxyURL = 'http://' . $proxyURL unless( $proxyURL =~ /^https?:\/\// ); - $userAgent->proxy( "http", $proxyURL ); - my @skipDomains = split( /[\,\s]+/, $proxySkip ); - $userAgent->no_proxy( @skipDomains ); - } - } - - my $request = HTTP::Request->new('GET', $theUrl); - $request->referer(TWiki::Func::getViewUrl($web, $topic)); - my $response = $userAgent->request($request); - if ($response->is_error) { - return (undef, $response->status_line); - } else { - my $text = $response->content; - $text =~ s/\r\n?/ /gos; - $text =~ s/\n/ /gos; - #$text =~ s/ +/ /gos; - return ($text, undef); - } -} - -# ========================= -sub getUrl { - my $theUrl = shift; - - my $host = ''; - my $port = 0; - my $path = ''; - if ($theUrl =~ /https?\:\/\/(.*?)\:([0-9]+)(\/.*)/) { - $host = $1; - $port = $2; - $path = $3; - } elsif($theUrl =~ /https?\:\/\/(.*?)(\/.*)/) { - $host = $1; - $path = $2; - } - return (undef, "invalid format of the href parameter") unless $path; - - # figure out how to get to TWiki::Net which is wide open in Cairo and before, - # but Dakar uses the session object. - my $text = $TWiki::Plugins::SESSION->{net} - ? $TWiki::Plugins::SESSION->{net}->getUrl( $host, $port, $path ) - : TWiki::Net::getUrl( $host, $port, $path ); - - if ($text =~ /text\/plain\s*ERROR\: (.*)/s) { - my $msg = $1; - $msg =~ s/[\n\r]/ /gos; - return (undef, "Can't read $theUrl ($msg)"); - } - if ($text =~ /HTTP\/[0-9\.]+\s*([0-9]+)\s*([^\n]*)/s) { - return (undef, "Can't read $theUrl ($1 $2)") - unless $1 == 200; - } - $text =~ s/^.*?\n\n(.*)/$1/os; # strip header - $text =~ s/\r\n?/ /gos; - $text =~ s/\n/ /gos; - #$text =~ s/ +/ /gos; - - return ($text, undef); -} - - - 1; Modified: twiki/trunk/HeadlinesPlugin/lib/TWiki/Plugins/HeadlinesPlugin.pm =================================================================== --- twiki/trunk/HeadlinesPlugin/lib/TWiki/Plugins/HeadlinesPlugin.pm 2012-10-31 10:29:19 UTC (rev 23805) +++ twiki/trunk/HeadlinesPlugin/lib/TWiki/Plugins/HeadlinesPlugin.pm 2012-10-31 11:07:17 UTC (rev 23806) @@ -44,18 +44,18 @@ } # ========================= +my $cssLink = + '<link rel="stylesheet" '. + 'href="%PUBURL%/%SYSTEMWEB%/HeadlinesPlugin/style.css" '. + 'type="text/css" media="all" />'; sub commonTagsHandler { - $_[0] =~ s/([ \t]*)%HEADLINES{(.*?)}%/handleHeadlinesTag($_[2], $_[1], $1, $2)/geo; + my $r = ($_[0] =~ + s/([ \t]*)%HEADLINES{(.*?)}%/handleHeadlinesTag($_[2], $_[1], $1, $2)/geo); - unless ($doneHeader) { - my $link = - '<link rel="stylesheet" '. - 'href="%PUBURL%/%SYSTEMWEB%/HeadlinesPlugin/style.css" '. - 'type="text/css" media="all" />'; - if($_[0] =~ s/<head>(.*?[\r\n]+)/<head>$1$link\n/o) { - $doneHeader = 1; - } + if ($r && !$doneHeader) { + TWiki::Func::addToHEAD('HEADLINESPLUGIN', $cssLink); + $doneHeader = 1; } } |