3
0
mirror of https://github.com/pragma-/pbot.git synced 2024-11-05 11:39:34 +01:00
pbot/applets/headlines.pl
Pragmatic Software 3d97dc2c33 Rename "modules" to "applets"
"Applet" is a much better name for the external command-line
scripts and programs that can be loaded as PBot commands. They
will no longer be confused with Perl modules.

https://en.wikipedia.org/wiki/Applet
2021-11-19 18:05:50 -08:00

115 lines
2.6 KiB
Perl
Executable File
Vendored

#!/usr/bin/perl -w
# SPDX-FileCopyrightText: 2021 Pragmatic Software <pragma78@gmail.com>
# SPDX-License-Identifier: MIT
use XML::RSS;
use LWP::Simple;
# Note: Some of these may no longer exist.
# http://radio.xmlstoragesystem.com/rcsPublic/rssHotlist and many other
# similiar URLS (try Google?) may be useful.
my %news_sites = (
"jbad" => [
"http://jalalabad.us/backend/geeklog.rdf",
"Jalalabad.us"
],
"bbc" => [
"http://news.bbc.co.uk/rss/newsonline_uk_edition/world/rss091.xml",
"news.bbc.co.uk"
],
"cnn" => [
"http://www.cnn.com/cnn.rss",
"CNN News"
],
"chealth" => [
"http://www.cnn.com/health/health.rdf",
"CNN Health"
],
"ctech" => [
"http://www.cnn.com/technology/tech.rdf",
"CNN Technology"
],
"csports" => [
"http://www.cnn.com/sports/sports.rdf",
"CNN Sports"
],
"/." => [
"http://slashdot.org/slashdot.rdf",
"Slashdot"
],
"nyttech" => [
"http://xml.newsisfree.com/feeds/62/162.xml",
"New York Times Technology"
],
"morons" => [
"http://www.morons.org/morons.rss",
"morons.org"
]
);
my $args = join(' ', @ARGV);
my $links = 0;
my $key;
my $value;
if ($args =~ /^links\s+(.*)/i) {
$args = $1;
$links = 1;
}
$args = quotemeta($args);
foreach $key (keys %news_sites) {
$value = $news_sites{$key}->[0];
if ($key =~ /$args/i) {
check_news($value, $links, $news_sites{$key}->[1]);
exit(0);
}
}
print "Invalid Headline. Usage: .headlines [links] <news server> - News servers are: ";
foreach $key (keys %news_sites) { print "$key => $news_sites{$key}->[1], "; }
print "\n";
sub check_news {
my ($site, $links, $headline) = @_;
my $text = "$headline: ";
my $rss = new XML::RSS;
my $content = get($site);
if ($content) {
eval { $rss->parse($content); };
if (my $error = $@) {
$error =~ s/\n//g;
print "Got error: $error\n";
return 0;
}
foreach my $item (@{$rss->{'items'}}) {
next unless defined($item->{'title'}) && defined($item->{'link'});
if ($links == 1) {
$text = " $item->{'title'} : ( $item->{'link'} )";
$text =~ s/\n//g;
$text =~ s/\t//g;
$text =~ s/\r//g;
print "$text\n";
} else {
$text .= " $item->{'title'} -";
}
}
}
$text =~ s/\n//g;
$text =~ s/\t//g;
$text =~ s/\r//g;
print "$text\n" if ($links == 0);
}