Twitterbot in Perl

Benjamins Blog

  • Blog
  • Themen
  • Fotografie
  • Sneaker
  • Kontakt
  • Impressum
-01-
12
2009

Twitterbot in Perl

Perl war schon immer eine polarisierende Sprache. Die einen lieben sie, die anderen hassen sie. Die einen sind Fan der flexiblen Syntax, die anderen verfluchen die mangelnde Lesbarkeit. Sätze wie "Perl: Write once – never understand again" oder "Perl is the only language that looks the same before and after RSA encryption." zielen genau hierauf ab.

Dennoch ist Perl eine beliebte Skriptsprache, insbesondere im Unix/Linux-Bereich (dank erkennbarer Verwandschaft zu Unix-Tools/Sprachen wie C, awk oder Shell-Builtins) zur Systemadministration oder allgemein zur schnellen Problemlösung. Aber auch im Web und in vielen speziellen Einsatzgebieten wie zum Beispiel der (DNA-)Sequenzanalyse ist Perl weiterhin eine bedeutende Sprache. Aufgrund ihrer Mächtigkeit gilt Perl mancherorts als "Swiss Army Chainsaw of Programming Languages".
Natürlich sind mit Ruby, Python und diversen Java-Derivaten viele neue Skriptsprachen auf den Markt gekommen, und Perl 6 lässt (leider) weiterhin auf sich warten.

Trotzdem bin ich weiterhin ein großer Freund dieser Sprache. Allerdings muss ich zugeben, dass ich etwas voreingenommen bin – Perl war mit die erste "richtige" Programmiersprache, mit der ich in Kontakt kam (dann kam die damals weniger richtige Sprache PHP).

Die Vorlesung Skriptsprachen und Anwendungen bei den Mathematikern hat dafür gesorgt, mein Interesse für Perl wieder etwas zu beleben und ein kleines Projekt in Angriff zu nehmen. Als Resultat entstand ein kleiner Bot, der täglich den Mensaplan der Uni Ulm abgrast und die Ergebnisse bei Twitter veröffentlicht. So besteht nicht nur die Möglichkeit, durch das Folgen des Bots bei Twitter täglich über die Tageskarte informiert zu werden, sondern es entsteht quasi als "Abfallprodukt" ein bisher nicht existenter RSS-Feed.

Das kleine Projekt zeigt sehr schön, wie man mithilfe der mächtigen CPAN-Module in Perl alltägliche Aufgabe sehr effizient und straight forward lösen kann. Zum Parsen der HTML-Seite, die als Quelle benutzt wird, wird das Paket XML::LibXML benötigt. Hiermit lassen sich per XPath direkt die interessanten Inhalte extrahieren. Die leichtgewichtige Twitter-Library Net::Twitter::Lite sorgt zudem für eine einfach Twitter-Anbindung:

#!/usr/bin/perl
use strict;
use DateTime;
use Net::Twitter::Lite;
use XML::LibXML;

#Get date
my $today = DateTime->today();
die "No working day!\n" if($today->day_of_week()>5);

#Fetch url and load document as DOM tree
my $url = sprintf("http://www.uni-ulm.de/mensaplan/%04d-%02d-%02d.html",$today->year, $today->month,$today->day);
my $doc = XML::LibXML->new()->parse_html_file($url) or die "Error while fetching/parsing document!\n";

#Gather all list entries and extract mealtype and actual meal
my @meals = $doc->findnodes('//div[@class="meal"]');
my @tweets;
foreach (@meals)
{
	my ($mealtype, $meal) = ($_->find('./div[@class="mealtype"]'),$_->find('./div[@class="item"]'));
	$meal =	(length($meal)+length($mealtype) > 138 ? substr($meal,0,136-length($mealtype)).".." : $meal);
	push(@tweets, $mealtype.": ".$meal);
}
die "Error while fetching meals!\n" if(length(@tweets) == 0);

#Login to twitter and post entries in reverse order 
my $nt = Net::Twitter::Lite->new(username => 'username', password => '...', clientname => "MensaBot",source => "web") or die "Error during twitter login procedure!\n";
$nt->update("="x 40);
foreach (reverse(@tweets))
{
	my $result = $nt->update($_);
}
$nt->update("Mensaplan Uni Ulm am ".$today->day.".".$today->month.".".$today->year.":   #uni #ulm #uulm #mensa #mensaplan");
exit;


Zugehöriger Crontab-Eintrag, wobei 1-5 für Werktage steht und 0 10 für 10:00 Uhr:
0 10 * * 1-5 /path/to/script.pl

Hiermit wird das Skript regelmäßig zu den gewünschten Zeiten ausgeführt.
Geschrieben von Benjamin Erb am 01.12.2009 in Programmierung Kommentar: (1) Trackbacks: (0)
Tags für diesen Artikel: coding, perl, studium, web 2.0
Artikel mit ähnlichen Themen:
Kurzpräsentation – Node.js
LRU-Cache in Java
Seminar: Research Trends in Media Informatics
diretto
SSH-Tunnel und SOCKS Proxy Forwarding als Alternative zum Surfen über (Web)VPN
Mehrere Werte in Java-Methoden typsicher zurückgeben
Semantic Mashup
SequentialMessageQueues in Java
Word-Cloud – Seminararbeit "Semantic Mashup"
Schnelle Quellcode-Navigation in Eclipse

Trackbacks
Trackback für spezifische URI dieses Eintrags

Keine Trackbacks

Kommentare
Ansicht der Kommentare: (Linear | Verschachtelt)

#1 - Florian Seiffert besagt:
09.12.2009 15:47 - (Antwort)

Danke der Beitrag hat sehr geholfen. Jezt twittert die ZBSport die neuen Werke des Hochschulschriftenservers automatisch.


Kommentar schreiben

Umschließende Sterne heben ein Wort hervor (*wort*), per _wort_ kann ein Wort unterstrichen werden.
Standard-Text Smilies wie :-) und ;-) werden zu Bildern konvertiert.
Die angegebene E-Mail-Adresse wird nicht dargestellt, sondern nur für eventuelle Benachrichtigungen verwendet.

Um maschinelle und automatische Übertragung von Spamkommentaren zu verhindern, bitte die Zeichenfolge im dargestellten Bild in der Eingabemaske eintragen. Nur wenn die Zeichenfolge richtig eingegeben wurde, kann der Kommentar angenommen werden. Bitte beachten Sie, dass Ihr Browser Cookies unterstützen muss um dieses Verfahren anzuwenden.
CAPTCHA

 
 

Über den Autor

Benjamin Erb Benjamin Erb ist 24 Jahre alt und studiert an der Universität Ulm Medieninformatik.

Aktuelle Projekte

  • diretto.org
  • IOException.de

Quicklinks

  • Meine Amazon-Wishlist
  • Mein PGP-Schlüßel
  • twitter.com/b_erb
  • facebook.com/benjamin.erb

Blogroll

  • Davids Blog
  • Flos Warteschleife
  • stk bloggt.es
  • guido.demelo.de
  • Sina paints her life
  • Malte Wittkugel.net
  • Marcus bloggt.es
  • claus bloggt.es
  • floBLOG
  • Basti in Japan
  • Sven in Frankreich

Sneaker-Blogroll

  • tomat3.de
  • sneakerb0b.de
  • vEnoMaZn
  • sneakerized.com
  • welovesneaker.com

Kalender

Zurück September '10
Mo Di Mi Do Fr Sa So
    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      

Getaggte Artikel

acm aesthetic computing animation apache blog bücher c++ ccc coding context free data visualization datenschutz dd-wrt design design pattern diretto eclipse fachschaft fail fotos fun gadget gdg handy hardware hip-hop homepage imaging informatik information design italien java javascript joggen kiosk system laptop latein latex mail mathematik mozilla musik mysql netbook nike af1 nike air max nmap perl pgp php politik postgresql privacy processing progwerkstatt psychologie ravensburg rivoli rutenfest s9y samsung q25 sneaker sneaker photography software sopra spanien sport sql studium studivz svn tagato trac trainingscamp typografie ubiquitous computing ubuntu ulm usability user interfaces videos virtualisierung vnc web web 2.0 welfen wikipedia wishlist xslt zivildienst

Archive

September 2010
August 2010
Juli 2010
Das Neueste ...
Älteres ...

Kategorien

  • XML Allgemeines (33)
  • XML Fotos (33)
  • XML Homepage (6)
  • XML Italien (7)
  • XML Lustiges (25)
  • XML Musik (11)
  • XML Nachdenkliches (9)
  • XML Schuhe (24)
  • XML Sonstiges (3)
  • XML Sport (5)
  • XML Videos (2)
  • XML Design (18)
  • XML IT (20)
  • XML Hardware (16)
  • XML Open-Source (7)
  • XML Programmierung (41)
  • XML Studium (61)
  • XML Web (30)
  • XML Datenschutz (6)
  • XML Usability (13)

Alle Kategorien

Feeds

XML RSS 2.0 feed
ATOM/XML ATOM 1.0 feed
XML OPML 1.0 feed

Statistiken

Letzter Artikel: 01.06.2010 16:01
242 Artikel wurden geschrieben
123 Kommentare wurden abgegeben

Verwaltung des Blogs

Login
 

© 2002 - 2010 Benjamin Erb