bitmuncher
Senior-Nerd
Vielleicht hat hier ja noch jemand eine Idee, wie man das Script, das http://twitter.com/habofeed mit Daten versorgt, optimieren kann. Hier ist der Source:
Code:
#!/usr/bin/perl
use strict;
use warnings;
use Config::Simple;
use Net::Twitter;
my $config_file = '/home/foobar/twitter.access.ini';
my $cfg = new Config::Simple() or die $!;
$cfg->read($config_file) or die $!;
my $access_token = $cfg->param('access_token');
my $access_token_secret = $cfg->param('accesss_token_secret');
my $user_id = $cfg->param('user_id');
my $screen_name = $cfg->param('screen_name');
my $consumer_key = $cfg->param('consumer_key');
my $consumer_secret = $cfg->param('consumer_secret');
my $nt = Net::Twitter->new(
traits => [qw/API::REST OAuth/],
( consumer_key => $consumer_key, consumer_secret => $consumer_secret )
);
$nt->access_token($access_token);
$nt->access_token_secret($access_token_secret);
# auth is done let's do the real stuff
my $url = 'http://www.hackerboard.de/external.php?type=RSS2&lastpost=1';
my $file = '/home/foobar/feed.txt';
my $lastdatefile = '/home/foobar/last.txt';
my %month_names = ('Jan' => 1,
'Feb' => 2,
'Mar' => 3,
'Apr' => 4,
'May' => 5,
'Jun' => 6,
'Jul' => 7,
'Aug' => 8,
'Sep' => 9,
'Oct' => 10,
'Nov' => 11,
'Dec' => 12
);
use XML::RSS::Parser;
use FileHandle;
use WWW::Shorten::TinyURL;
use WWW::Shorten 'TinyURL';
use Time::Local;
my $cmd = "wget -O $file -o wget.log $url";
my $out = `$cmd`;
print $out."\n";
my $p = XML::RSS::Parser->new;
my $fh = FileHandle->new($file);
my $feed = $p->parse_file($fh) or die $!."\n";
my $count = $feed->item_count;
print $count." Items.\n";
my $loop_count = 1;
my @items = ();
foreach my $i ($feed->query('//item')) {
push(@items, $i);
}
my @items_new = reverse(@items);
foreach my $i (@items_new) {
my $new_item = 0;
my $node = $i->query('title');
my $title = $node->text_content;
$node = $i->query('pubDate');
my $datetime = $node->text_content;
$node = $i->query('link');
my $url = $node->text_content;
my $lastdate = '';
open(FILE, "< $lastdatefile") or die $!."\n";
while(<FILE>) {
chomp;
$lastdate = $_;
}
my $lastdate_unix;
my $datetime_unix;
# $lastdate zu unixtime umwandeln
if($lastdate =~ /(\d+)\s(...)\s(\d+)\s(\d+):(\d+):(\d+)\s.../) {
my $mday = $1;
my $mname = $2;
my $year = $3;
my $hour = $4;
my $minutes = $5;
my $seconds = $6;
my $month = $month_names{$mname};
$lastdate_unix = timelocal($seconds, $minutes, $hour, $mday, ($month -1), $year);
}
# $datetime in unixtime umwandeln
if($datetime =~ /(\d+)\s(...)\s(\d+)\s(\d+):(\d+):(\d+)\s.../) {
my $mday = $1;
my $mname = $2;
my $year = $3;
my $hour = $4;
my $minutes = $5;
my $seconds = $6;
my $month = $month_names{$mname};
$datetime_unix = timelocal($seconds, $minutes, $hour, $mday, ($month - 1), $year);
}
print "Last date unix: ".$lastdate_unix."\n";
print "Datetime unix: ".$datetime_unix."\n";
if($lastdate_unix < $datetime_unix) {
$new_item = 1;
}
if($new_item == 1) {
# diesen beitrag twittern
my $tinyurl = makeashorterlink($url);
my $msg = 'Neuer Beitrag in: '.$title.' - '.$tinyurl."\n";
print $msg;
$nt->update($msg) or die $!;
# neue zeit des letzten beitrags merken
open(INFILE, "> $lastdatefile");
print INFILE $datetime."\n";
close(INFILE);
}
$loop_count++;
close(FILE);
}
$cmd = "rm wget.log";
$out = `$cmd`;
print $out."\n";
$nt->end_session();
exit;