Hackerboard Wiki HaboBlog
Hackerboard bei Facebook Hackerboard bei Google+ Hackerboard bei Twitter

[HaBo]

 
Code Kitchen Allgemeines Coder-Forum rund um das Programmieren eigenständiger, ausführbarer Programme.

Habo-Twitter-Feed optimieren

Diskussion: Habo-Twitter-Feed optimieren im Forum Code Kitchen, in der Kategorie Software Home; Anzeige Vielleicht hat hier ja noch jemand eine Idee, wie man das Script, das http://twitter.com/habofeed mit Daten versorgt, optimieren kann. ...

Antwort
Alt 05.12.10, 01:36   #1 (permalink)
Moderator
 
Benutzerbild von bitmuncher
 
Registriert seit: 30.09.06
bitmuncher Quadcorebitmuncher Quadcorebitmuncher Quadcorebitmuncher Quadcorebitmuncher Quadcorebitmuncher Quadcore
Likes: 441
Standard Habo-Twitter-Feed optimieren

Anzeige

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;
__________________
Mein Blog - Mein Job - Diaspora

Der Ring uns zu knechten besteht aus 12 Sternen auf blauem Grund.

Neue Beiträge im Habo via Twitter - Das HaBo auf FB - Das HaBo bei G+
bitmuncher ist gerade online   Mit Zitat antworten
Alt 05.12.10, 12:52   #2 (permalink)
 
Registriert seit: 12.08.10
mime Leistung: Pentium Imime Leistung: Pentium I
Likes: 30
Standard

Zitat:
Zitat von bitmuncher Beitrag anzeigen
Vielleicht hat hier ja noch jemand eine Idee, wie man das Script, das http://twitter.com/habofeed mit Daten versorgt, optimieren kann.
Was willst du da groß optimieren?

Zitat:
Code:
#!/usr/bin/perl
Code:
#!/usr/bin/env perl
Macht es etwas portabler...

Zitat:
Code:
[...]

my $url = 'http://www.hackerboard.de/external.php?type=RSS2&
use XML::RSS::Parser;
use FileHandle;
use WWW::Shorten::TinyURL;
use WWW::Shorten 'TinyURL';
use Time::Local;
Mitten im Code mit "use" Module einzubinden ist extrem hässlich. Wer hat schon Lust den gesammten Quelltext nach benutzten Modulen zu durchsuchen. Module solltest du, der besseren Übersicht halber, immer am Anfang einbinden.

"use WWW::Shorten::TinyURL;" und "use WWW::Shorten 'TinyURL';". Ich sehe einige Beispiele bei google die das so machen. Der Sinn erschließt sich mir aber derzeit nicht.

Zitat:
Code:
my $cmd = "wget -O $file -o wget.log $url";
my $out = `$cmd`;

my $p = XML::RSS::Parser->new;
my $fh = FileHandle->new($file);
my $feed = $p->parse_file($fh) or die $!."\n";
Ich würde hier nicht "wget" benutzen und den Kram auch nicht in eine Datei schreiben. Ist doch etwas umständlich.

Code:
use LWP::UserAgent;

my $ua = LWP::UserAgent->new;
my $req = HTTP::Request->new( GET => $url );
my $res = $ua->request( $req );

if ( ! $res->is_success ) { die $res->status_line ."\n"; }
my $out = $res->content;

my $p = XML::RSS::Parser->new;
my $feed = $p->parse_string($out) or die $!."\n";
Zitat:
Code:
    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);
    }
Code:
use Date::Parse;

foreach my $i (@items_new) {
    
    # $lastdate zu unixtime umwandeln
    if($lastdate =~ /(\d+)\s(...)\s(\d+)\s(\d+):(\d+):(\d+)\s.../) {
       $lastdate_unix = str2time($lastdate);
    }

    # $datetime in unixtime umwandeln
    if($datetime =~ /(\d+)\s(...)\s(\d+)\s(\d+):(\d+):(\d+)\s.../) {
       $datetime_unix = str2time($datetime);        
    }
Alles auf die schnelle und ungetestet.

HTH

Micha
__________________
http://www.openvas.org
mime ist offline   Mit Zitat antworten
   
HaBOT
 
- Anzeige -

Werbung ist gerade online    
Alt 05.12.10, 13:29   #3 (permalink)
Moderator
Themenstarter
 
Benutzerbild von bitmuncher
 
Registriert seit: 30.09.06
bitmuncher Quadcorebitmuncher Quadcorebitmuncher Quadcorebitmuncher Quadcorebitmuncher Quadcorebitmuncher Quadcore
Likes: 441
Standard

Seltsamerweise muss man die TinyURL-Module wohl so einbinden. Nutzt man nur eines von beiden, funktioniert's nicht. Den Rest deiner Tipps probiere ich nachher mal aus. Ich finde, da hast du doch 'ne Menge gefunden, was sich verbessern lässt.
__________________
Mein Blog - Mein Job - Diaspora

Der Ring uns zu knechten besteht aus 12 Sternen auf blauem Grund.

Neue Beiträge im Habo via Twitter - Das HaBo auf FB - Das HaBo bei G+
bitmuncher ist gerade online   Mit Zitat antworten
Alt 05.12.10, 13:47   #4 (permalink)
 
Registriert seit: 12.08.10
mime Leistung: Pentium Imime Leistung: Pentium I
Likes: 30
Standard

Zitat:
Zitat von bitmuncher Beitrag anzeigen
Seltsamerweise muss man die TinyURL-Module wohl so einbinden. Nutzt man nur eines von beiden, funktioniert's nicht.
Code:
#!/usr/bin/env perl

use strict;
use warnings;

use WWW::Shorten::TinyURL;

my $short_url = makeashorterlink("http://www.openvas.org");
print $short_url;

mime@kira:~ %  perl tiny.pl
http://tinyurl.com/rrjbe
Funktioniert...

Micha
__________________
http://www.openvas.org
mime ist offline   Mit Zitat antworten
Alt 05.12.10, 14:01   #5 (permalink)
Moderator
Themenstarter
 
Benutzerbild von bitmuncher
 
Registriert seit: 30.09.06
bitmuncher Quadcorebitmuncher Quadcorebitmuncher Quadcorebitmuncher Quadcorebitmuncher Quadcorebitmuncher Quadcore
Likes: 441
Standard

Ich hatte es auch probiert und dann beschwerte er sich, dass die Funktion makeashorterlink nicht gefunden werden kann. Daraufhin probierte ich knapp 20 Minuten rum wo das Problem liegen könnte und fand dann die Beispiele im Web, die beide Einbindungsarten gleichzeitig benutzten, womit es dann auch funktionierte. Welche Perl- und welche Modul-Version nutzt du denn?
__________________
Mein Blog - Mein Job - Diaspora

Der Ring uns zu knechten besteht aus 12 Sternen auf blauem Grund.

Neue Beiträge im Habo via Twitter - Das HaBo auf FB - Das HaBo bei G+
bitmuncher ist gerade online   Mit Zitat antworten
Alt 05.12.10, 14:17   #6 (permalink)
 
Registriert seit: 12.08.10
mime Leistung: Pentium Imime Leistung: Pentium I
Likes: 30
Standard

Zitat:
Zitat von bitmuncher Beitrag anzeigen
Welche Perl- und welche Modul-Version nutzt du denn?
Code:
mime@kira:~ %  perl --version
This is perl, v5.8.8 built for i686-linux

mime@kira:~ %  perl -MWWW::Shorten::TinyURL -e 'print "$WWW::Shorten::TinyURL::VERSION"'
1.90
Edit: Siehe auch http://perl-howto.de/2009/01/kurze-u...wwshorten.html

Micha
__________________
http://www.openvas.org

Geändert von mime (05.12.10 um 14:20 Uhr)
mime ist offline   Mit Zitat antworten
Antwort
   
- Anzeige -

Werbung ist gerade online    

[HaBo] » Software Home » Code Kitchen » Habo-Twitter-Feed optimieren
Themen-Optionen
Ansicht

Forumregeln
Es ist Ihnen nicht erlaubt, neue Themen zu verfassen.
Es ist Ihnen nicht erlaubt, auf Beiträge zu antworten.
Es ist Ihnen nicht erlaubt, Anhänge hochzuladen.
Es ist Ihnen nicht erlaubt, Ihre Beiträge zu bearbeiten.

BB-Code ist an.
Smileys sind an.
[IMG] Code ist an.
HTML-Code ist aus.
Trackbacks sind aus
Pingbacks sind aus
Refbacks sind aus



1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61