Changeset 1614

Show
Ignore:
Timestamp:
07/30/05 10:43:12
Author:
miyagawa
Message:

0.04: LibXMLify

Files:

Legend:

Unmodified
Added
Removed
Modified
Copied
Moved
  • WWW-OpenSearch/trunk/Changes

    r1609 r1614  
    11Revision history for Perl extension WWW::OpenSearch 
     2 
     30.04  Sat Jul 29 18:34:31 PDT 2005 
     4        - Drop off XML::Simple for efficiency. 
     5          LibXMLify everything. Now you need XML::RSS::LibXML  
    26 
    370.03  Sun Jul 24 02:36:46 PDT 2005 
  • WWW-OpenSearch/trunk/MANIFEST

    r1611 r1614  
    66t/00_compile.t 
    77t/01_live.t 
     8t/02_paginate.t 
  • WWW-OpenSearch/trunk/Makefile.PL

    r1523 r1614  
    77        LWP => 5.60, 
    88        Data::Page => 2.00, 
    9         XML::RSS => 1.00
    10         XML::Simple => 2.00
     9        XML::RSS::LibXML => 0.05
     10        XML::LibXML => 1.58
    1111    }, 
    1212); 
  • WWW-OpenSearch/trunk/lib/WWW/OpenSearch.pm

    r1609 r1614  
    33use strict; 
    44use vars qw($VERSION); 
    5 $VERSION = '0.03'; 
     5$VERSION = '0.04'; 
    66 
    77use Carp; 
     
    99use LWP::UserAgent; 
    1010use URI::Escape; 
    11 use XML::RSS; 
    12 use XML::Simple; 
     11use XML::RSS::LibXML; 
     12use XML::LibXML; 
     13 
     14my @Cols = qw( 
     15Url Format ShortName LongName Description Tags Image SampleSearch 
     16Developer Contact SyndicationRight AdultContent 
     17); 
     18for my $col (@Cols) { 
     19    no strict 'refs'; 
     20    *$col = sub { shift->{$col} }; 
     21
    1322 
    1423sub new { 
     
    3746        unless $response->is_success; 
    3847    eval { 
    39         my $data = XML::Simple::XMLin($response->content); 
     48        my $data = parse_description($response->content); 
    4049        for my $attr (keys %$data) { 
    41             next if $attr eq 'xmlns'; 
    4250            $self->{$attr} = $data->{$attr}; 
    4351        } 
     
    4654        croak "Error while parsing Description XML: $@"; 
    4755    } 
     56} 
     57 
     58sub parse_description { 
     59    my $xml = shift; 
     60    my $parser = XML::LibXML->new; 
     61    my $doc = $parser->parse_string($xml); 
     62    my $nodename = $doc->documentElement->nodeName; 
     63    croak "Node should be OpenSearchDescription: $nodename" 
     64        if $nodename ne "OpenSearchDescription"; 
     65    my %data; 
     66    for my $col (@Cols) { 
     67        my $node = $doc->documentElement->getChildrenByTagName($col); 
     68        $data{$col} = $node->string_value if $node; 
     69    } 
     70    \%data; 
    4871} 
    4972 
     
    5881    my $rss; 
    5982    eval { 
    60         $rss = XML::RSS->new(); 
     83        $rss = XML::RSS::LibXML->new(); 
    6184        $rss->add_module( 
    6285            prefix => "openSearch", 
     
    87110    $url =~ s/{(searchTerms|count|startIndex|startPage)}/$data->{$1}/g; 
    88111    $url; 
    89 } 
    90  
    91 my @cols = qw( 
    92 Url Format ShortName LongName Description Tags Image SampleSearch 
    93 Developer Contact SyndicationRight AdultContent 
    94 ); 
    95 for my $col (@cols) { 
    96     no strict 'refs'; 
    97     *$col = sub { shift->{$col} }; 
    98112} 
    99113 
     
    143157=head1 SEE ALSO 
    144158 
    145 L<XML::Simple>, L<XML::RSS>, L<Data::Page>, L<LWP> 
     159L<XML::LibXML>, L<XML::RSS::LibXML>, L<Data::Page>, L<LWP> 
    146160 
    147161=cut