]> git.donarmstrong.com Git - infobot.git/blobdiff - src/Modules/Plug.pl
plug.org, there should be a general xml news app...
[infobot.git] / src / Modules / Plug.pl
diff --git a/src/Modules/Plug.pl b/src/Modules/Plug.pl
new file mode 100644 (file)
index 0000000..3467a83
--- /dev/null
@@ -0,0 +1,105 @@
+#
+#     Plug.pl: hacked for http://Plug.org/ by Tim Riker <Tim@Rikers.org>
+# Slashdot.pl: Slashdot headline retrival
+#      Author: Chris Tessone <tessone@imsa.edu>
+#    Modified: dms
+#   Licensing: Artistic License (as perl itself)
+#     Version: v0.4 (19991125)
+#
+
+###
+# fixed up to use XML'd /. backdoor 7/31 by richardh@rahga.com
+# My only request if this gets included in infobot is that the
+# other header gets trimmed to 2 lines, dump the fluff ;) -rah
+#
+# added a status message so people know to install LWP - oznoid
+# also simplified the return code because it wasn't working.
+###
+
+
+package Plug;
+
+use strict;
+
+sub plugParse {
+    my @list;
+
+    foreach (@_) {
+       next unless (/<title>(.*?)<\/title>/);
+       my $title = $1;
+       $title =~ s/&amp\;/&/g;
+       push(@list, $title);
+    }
+
+    return @list;
+}
+
+sub Plug {
+    my @results = &::getURL("http://www.plug.org/plug.xml");
+    my $retval  = "i could not get the headlines.";
+
+    if (scalar @results) {
+       my $prefix      = "Plug Headlines ";
+       my @list        = &plugParse(@results);
+       $retval         = &::formListReply(0, $prefix, @list);
+    }
+
+    &::performStrictReply($retval);
+}
+
+sub plugAnnounce {
+    my $file = "$::param{tempDir}/plug.xml";
+
+    my @Cxml = &::getURL("http://www.plug.org/plug.xml");
+    if (!scalar @Cxml) {
+       &::DEBUG("sdA: failure (Cxml == NULL).");
+       return;
+    }
+
+    if (! -e $file) {          # first time run.
+       open(OUT, ">$file");
+       foreach (@Cxml) {
+           print OUT "$_\n";
+       }
+       close OUT;
+
+       return;
+    }
+
+    my @Oxml;
+    open(IN, $file);
+    while (<IN>) {
+       chop;
+       push(@Oxml,$_);
+    }
+    close IN;
+
+    my @Chl = &plugParse(@Cxml);
+    my @Ohl = &plugParse(@Oxml);
+
+    my @new;
+    foreach (@Chl) {
+       last if ($_ eq $Ohl[0]);
+       push(@new, $_);
+    }
+
+    if (scalar @new == 0) {
+       &::status("Plug: no new headlines.");
+       return;
+    }
+
+    if (scalar @new == scalar @Chl) {
+       &::DEBUG("sdA: scalar(new) == scalar(Chl). bad?");
+    }
+
+    open(OUT,">$file");
+    foreach (@Cxml) {
+       print OUT "$_\n";
+    }
+    close OUT;
+
+    return "Plug: ".
+                       join(" \002::\002 ", @new);
+}
+
+1;