poniedziałek, 5 listopada 2007

Losowy podpis w programie pine

Jak wstawić losowy cytat via program fortune opisano na tej stronie. Jeżeli podpis ma być generowany a nie wklejany z pliku, to w konfiguracji Pine (setup -> config) literal-signature ma mieć wartość No Value Set a w signature-file należy wstawić (na końcu obowiązkowo znak ,,|''):


ścieżka-do-skryptu/skrypt |

No i dobrze. A ja chciałem w swojej sygnaturze losowy URL do mojego zbioru zdjęć na www.flickr.com/. Do tego zaadaptowałem następujący skrypcik, który ściąga informacje na temat n (konkretnie $max_photos) ostatnio umieszczonych na koncie flickr zdjęć i z tej n-ki losowo drukuje jedno:


#!/usr/bin/perl -s
# The program prints URL of random image out of $max_photos photos ...
use LWP::Simple;

my $my_flickr_id='20425995@N00'; # insert your ID
my $my_flickr_dir='http://www.flickr.com/photos/tprzechlewski';
my $max_photos = '20';
my $api_key = '????????????????'; # insert your API key here
my $method = 'flickr.people.getPublicPhotos';

my $url = "http://www.flickr.com/services/rest/?method=$method&" .
"api_key=$api_key&user_id=$my_flickr_id&per_page=$max_photos";

my $xml = get $url;

if ($xml =~ m/rsp stat=[ \t]*[\`\"]ok/) {# no errors so print
while ($xml =~ m/id=[ \t]*[\`\"]([^\"\']+)[\`\"]/g) { push @Photos, $1; }
} else { die "** Problems fetching $max_photos of $my_flickr_id **"; }

print "$my_flickr_dir/" . $Photos[ int(rand($max_photos)) . "\n";

Skrypcik jest specjalnie odchudzony, tak że korzysta wyłącznie z LWP::Simple i dzięki temu ma większe szanse działania w sytuacjach kiedy dociągnięcie tego czy tamtego modułu jest kłopotliwe. Z tego samego powodu do wyłuskania odpowiednich informacji nie parsuję pliku XML (posługując się np. XML::Simple), a używam wyrażeń regularnych (regułowych?).

1 komentarz:

  1. Wiele tutaj interesujących i ważnych informacji. Super wpis.

    OdpowiedzUsuń