Subdomain Posts
Perl | 400 days ago
Recent Posts
None | 4 sec ago
INI file | 13 sec ago
Z80 Assembler | 27 sec ago
None | 40 sec ago
None | 41 sec ago
PHP | 55 sec ago
None | 1 min ago
MySQL | 1 min ago
None | 1 min ago
Bash | 1 min ago
Sitereport
Find cool info about any domain on the internet?
visit sitereport
Free Subdomains
Want a pastebin.com sub-domain for your community?
learn more...
What is pastebin?
Pastebin is a website that hosts all your text & code on dedicated servers for easy sharing.
learn more...
Learn a little bit about the new Pastebin.com on our help page. hide message
By colinb on the 12th of Feb 2009 03:37:43 PM Download | Raw | Embed | Report
  1. #!/usr/bin/perl
  2.  
  3. use XML::Simple;
  4. use XML::Writer;
  5. use Time::Local;
  6. use Date::Format;
  7. use Getopt::Long;
  8. use strict;
  9.  
  10. my $generator = "ComicsFeedParser.pl @ARGV";
  11.  
  12. my $publisherfilter;
  13. my $comicfilter;
  14. my $pricefilter;
  15. my $filter;
  16. my $feedtitle = 'Published Comic Books';
  17. my $silent = 0;
  18. GetOptions(
  19.     'publisher=s' => \$publisherfilter,
  20.     'comic=s' => \$comicfilter,
  21.     'price=f' => \$pricefilter,
  22.     'filter=s' => \$filter,
  23.     'title=s' => \$feedtitle,
  24.     'silent!' => \$silent,
  25.     );
  26.  
  27. my $curlurl = 'http://feedproxy.google.com/comiclistfeed';
  28. my $curloptions = $silent ? '--silent' : undef;
  29. my $data = `curl $curlurl $curloptions`;
  30. my $xs1 = XML::Simple->new();
  31.  
  32. my $doc = $xs1->XMLin($data);
  33.  
  34. my $pagelink = $doc->{channel}->{link};
  35.  
  36. my $writer = XML::Writer->new();
  37. $writer->xmlDecl();
  38. $writer->startTag('rss', 'version' => '2.0');
  39. $writer->startTag('channel');
  40. $writer->startTag('title');
  41. $writer->characters($feedtitle);
  42. $writer->endTag('title');
  43. $writer->startTag('link');
  44. $writer->characters($pagelink);
  45. $writer->endTag('link');
  46. $writer->startTag('description');
  47. $writer->characters('Newly Published Comic Books');
  48. $writer->endTag('description');
  49. $writer->startTag('pubDate');
  50. my @now = gmtime;
  51. $writer->characters(strftime('%a, %d %b %Y %H:%M:%S %Z', @now, 'GMT'));
  52. $writer->endTag('pubDate');
  53. $writer->startTag('generator');
  54. $writer->characters($generator);
  55. $writer->endTag('generator');
  56.  
  57. foreach my $item (@{$doc->{channel}->{item}}) {
  58.  
  59.     my @gmt;
  60.     if ($item->{title} =~ /(\d\d)\/(\d\d)\/(\d\d\d\d)/) {
  61.    
  62.         @gmt = gmtime(timelocal(0,0,0,$2,$1-1,$3-1900));
  63.     }
  64.     else {
  65.    
  66.         @gmt = gmtime;
  67.     }
  68.     my $date = strftime('%a, %d %b %Y %H:%M:%S %Z', @gmt, 'GMT');
  69.     my $link = $item->{'feedburner:origLink'};
  70.     my @lines = split("\n", $item->{description});
  71.     my $publisher;
  72.     my $publisherlink;
  73.     foreach my $line (@lines) {
  74.  
  75.         $line =~ s/\s+/ /g;
  76.         my $itemlink;
  77.         if ($line =~ s/<a href="(.*)">(.*)<\/a>/$2/) {
  78.  
  79.             $itemlink = $1;
  80.         }
  81.         if ($line =~ /<p><b><u>(.*)<\/u><\/b>/) {
  82.  
  83.             $publisher = $1 unless ($1 eq 'PUBLISHER');
  84.             $publisherlink = $itemlink;
  85.         }
  86.         elsif (defined $publisher) {
  87.  
  88.             my $comic;
  89.             if ($line =~ /(.*)<br \/>/) {
  90.  
  91.                 $comic = $1;
  92.             }
  93.             elsif ($line =~ /(.*)<\/p>/) {
  94.  
  95.                 $comic = $1;
  96.             }
  97.  
  98.             if ($comic) {
  99.  
  100.                 my $title;
  101.                 my $price;
  102.                 if ($comic =~ /(.*), (.*)$/) {
  103.  
  104.                     $title = $1;
  105.                     $price = $2;
  106.                 }
  107.                 else {
  108.    
  109.                     $title = $comic;
  110.                 }
  111.                 my $comiclink = $itemlink;
  112.        
  113.                 my $filterresults = 1;
  114.                 if ($filter) {
  115.                
  116.                     $filterresults = eval $filter;
  117.                     if ($@) {
  118.                    
  119.                         warn $@;
  120.                         $filterresults = 1;
  121.                     }
  122.                 }
  123.                 if ((!$publisherfilter || $publisher =~ /$publisherfilter/) &&
  124.                     (!$comicfilter || $title =~ /$comicfilter/) &&
  125.                     (!$pricefilter || $price <= $pricefilter) &&
  126.                     $filterresults) {
  127.            
  128.                     $writer->startTag('item');
  129.                     $writer->startTag('title');
  130.                     $writer->characters("$publisher: $title");
  131.                     $writer->endTag('title');
  132.                     $writer->startTag('link');
  133.                     $writer->characters($comiclink || $publisherlink || $link || $pagelink);
  134.                     $writer->endTag('link');
  135.                     $writer->startTag('description');
  136.                     $writer->characters("$publisher: $title, $price");
  137.                     $writer->endTag('description');
  138.                     $writer->startTag('pubDate');
  139.                     $writer->characters($date);
  140.                     $writer->endTag('pubDate');
  141.                     $writer->endTag('item');
  142.                 }
  143.             }
  144.  
  145.             if ($line =~ /(.*)<\/p>/) {
  146.        
  147.                 $publisher = undef;
  148.                 $publisherlink = undef;
  149.             }
  150.         }
  151.     }
  152. }
  153.  
  154. $writer->endTag('channel');
  155. $writer->endTag('rss');
  156. $writer->end();
Submit a correction or amendment below. Make A New Post
To highlight particular lines, prefix each line with @h@
Syntax highlighting:
Post expiration:
Post exposure:
Name / Title:
Email: