Moduł LJ::Simple
Uniwersytet Gdański - Instytut Matematyki - Zakład Informatyki - Strona domowaSpis treści
Obsługa modułu (LJ::Simple)
O czym to jest
LiveJournal - co to?
Serwis LiveJournal (LJ) można traktować na wiele różnych sposobów: jako narzędzie do pisania prywatnego dziennika, prowadzenia publicznie dostępnego blogu - choć równie dobrze na LJ spojrzeć można jak na ogromnie rozbudowaną społeczność internetową, czy forum dyskusyjne.
Cechą wyróżniającą LiveJournal jest tzw. "lista przyjaciół", która w bardzo wygodny sposób zbiera w jedno miejsce wiadomości i informacje, których w innym przypadku szukalibyśmy odwiedzając po kilkanaście, może nawet kilkadziesiąt stron internetowych w tym również innych LiveJournal'i. Często-stosowaną praktyką jest, że webmaster istniejącej strony internetowej posiada również odpowiadające stronie konto na LJ, gdzie pojawiają się - w formie cotygodniowych wpisów - informacje dot. update'ów na wspomnianej stronie.
Oprócz blogów informacyjnych, LJ to głównie zbiór osobistych blogów, w tym nawet tak znanych osobistości jak autor prozy fantasy George R. R. Martin.
LJ daje nam możliwość - poprzez oznaczenie innych użytkowników jako swoich przyjaciół - wygodnego czytania wszystkich interesujących nas wpisów na jednej stronie.
Własne konto można modifikować na wiele sposobów, poczynając od obszernego wyboru stylów, poprzez różnoraką edycję własnych wpisów, do ustawiania opcji dotyczących np. możliwości kontaktowania się z właścicielem LJ poprzez komentarze przy wpisach (user comments).
Każdy wpis oprócz daty i tytułu może być oznaczony definiowanymi przez nas słowami kluczami (tags), które umożliwiają łatwe wyszukiwanie; poziomem dostępności (prywatny, publiczny, itd.); zdefiniowaniem swojego nastroju w trakcie umieszczania danego wpisu (moods); jak również obrazkiem użytkownika (lj icons). Istnieją całe społeczności (communities) zajmujące się wyłącznie publikowaniem tych miniaturowych dzieł:)
Moduł LJ::Simple
Jest to proste API umożliwiające łączenie się ze swoim LiveJournal'em. Pozwala na tworzenie nowych wpisów z uwględnieniem całej masy atrybutów, jak również na pozyskiwanie informacji n.t. już istniejących wpisów, ich edycję lub też ew. usunięcie. Pozwala również na uzyskanie informacji n.t. sieci połączonych ze sobą kont na zasadzie tzw. "zaprzyjaźniania się".
Metody
Konstruktor
Utworzenie nowego obiektu w najprostszy i najbardziej podstawowy sposób (z takiego będziemy korzystać w przykładzie):
my $lj = new LJ::Simple ({
user => "uzytkownik",
pass => "haslo",
});
Wybrane metody
- user
my $user = $lj->user(); print $user, "\n";
zwraca nazwę użytkownika, użytą do zalogowania.- moods
$lj->moods($hash_ref)
hasz na który wskazuje podana referencja będzie w wyniku wywołania tej metody miał na następującą postać:%hash = ( list => [ alfabetyczna_lista_nazw_nastrojów ] moods => { mood_name => mood_id } idents => { mood_id => mood_name } )
Przykładem wywołania tej metody jest poniższy kod:my %Moods=(); if (!defined $lj->moods(\%Moods)) { die "$0: LJ error - $LJ::Simple::error"; } foreach (@{$Moods{list}}) { print "$_ -> $Moods{moods}->{$_}\n"; }
w wyniku jego uruchomienia otrzymamy:accomplished -> 90 aggravated -> 1 amused -> 44 angry -> 2 annoyed -> 3 anxious -> 4 ...
- communities
$lj->communities()
zwraca listę społeczności w których użytkownik może zamieszczać wpisy. Przykładem wywołania tej metody jest poniższy kod:my @communities = $lj->communities(); print join("\n",@communities),"\n";
w wyniku jego uruchomienia otrzymamy np. :4400spoilers aarondouglas aliasepisodes artscape bamber_news battlestar_blog ...
- pictures
$lj->pictures($hash_ref)
hasz na który wskazuje podana referencja będzie w wyniku wywołania tej metody miał na następującą postać:%hash = ( "keywords" => "URL obrazka", );
Przykładem wywołania tej metody jest poniższy kod:my %pictures=(); if (!defined $lj->pictures(\%pictures)) { die "$0: LJ error - $LJ::Simple::error"; } my ($keywords,$url)=(undef,undef); while(($keywords,$url)=each %pictures) { print "\"$keywords\"\t=> $url\n"; }
w wyniku jego uruchomienia otrzymamy np. :"bsg_centurion" => http://userpic.livejournal.com/54832919/9587607 "fs_moya starburst" => http://userpic.livejournal.com/55199477/9587607 "starbucks_frappuccino" => http://userpic.livejournal.com/54888090/9587607 "dragon" => http://userpic.livejournal.com/47110193/9587607 "fs_moya sun" => http://userpic.livejournal.com/55199461/9587607 "sg1_team" => http://userpic.livejournal.com/51438582/9587607 ...
- GetTags
$lj->GetTags()
zwraca listę słów kluczy zdefiniowanych przez użytkownika. Przykładem wywołania tej metody jest poniższy kod:my ($count,@Tags)=$lj->GetTags(); (defined $count) || die "$0: Failed to get list of tags - $LJ::Simple::error\n"; print "Total tags: $count\n"; map { print "$_->{name}\n"; } (@Tags);
w wyniku jego uruchomienia otrzymamy np. :Total tags: 71 art battlestar galactica bionic woman bleak house perl testing ...
- GetFriends
$lj->GetFriends()
zwraca listę użytkowników LiveJournal, których dany użytkownik wyróżnił jako przyjaciół. Przykładem wywołania tej metody jest poniższy kod:my ($num_friends,@Friends)=$lj->GetFriends(); (defined $num_friends) || die "$0: Failed to get friends - $LJ::Simple::error\n"; my $f=undef; foreach $f (@Friends) { foreach (qw(dob birthday)) { (defined $f->{$_}) || next; $f->{$_}=strftime("%Y/%m/%d",localtime($f->{$_})); } my ($k,$v)=(undef,undef); while(($k,$v)=each %{$f}) { (!defined $v) && ($f->{$k}="[undefined]"); } print "$f->{user}\n"; print " Name : $f->{name}\n"; print " Type : $f->{type}\n"; }
w wyniku jego uruchomienia otrzymamy np. :artscape Name : ArtScape - the Farscape art LJ Community Type : community abc123 Name : ABC Type : user battlestar_blog Name : Battlestar Galactica Fan Community Type : community def456 Name : Def Type : user ...
- GetDayCounts
$lj->GetDayCounts($hash_ref,$journal)
hasz na który wskazuje podana referencja będzie w wyniku wywołania tej metody wypełniony parami data => liczba_wpisów. opcjonalny argument $journal może być wykorzystany do zebrania informacji n.t. społeczności (community) do którego użytkownik ma dostęp. Przykładem wywołania tej metody jest poniższy kod:(defined $lj->GetDayCounts(\%gdc_hr,undef)) || die "$0: Failed to get day counts - $LJ::Simple::error\n"; foreach (sort {$a<=>$b} keys %gdc_hr) { printf("%s \tno. of entries: %03d\n",strftime("%Y/%m/%d",localtime($_)),$gdc_hr{$_}); }
w wyniku jego uruchomienia otrzymamy np. :2006/06/04 no. of entries: 001 2006/08/06 no. of entries: 001 2006/08/16 no. of entries: 001 2006/08/18 no. of entries: 002 2006/08/20 no. of entries: 001 2006/08/22 no.. of entries: 003 ..
Przykład
Utworzenie nowego wpisu
use LJ::Simple;
my $lj = new LJ::Simple ({
user => "uzytkownik",
pass => "haslo",
});
(defined $lj)
|| die "$0: Failed to log into LiveJournal: $LJ::Simple::error\n";
my %Event=();
$lj->NewEntry(\%Event)
|| die "$0: Failed to create new entry: $LJ::Simple::error\n";
my $entry=<LJ::Simple version $LJ::Simple::VERSION
EOF
$lj->SetEntry(\%Event,$entry)
|| die "$0: Failed to set entry: $LJ::Simple::error\n";
$lj->SetProtect(\%Event,"private")
|| die "$0: Failed to make entry private - $LJ::Simple::error\n";
$lj->SetMood(\%Event,"happy")
|| die "$0: Failed to set mood: $LJ::Simple::error\n";
$lj->Setprop_nocomments(\%Event,1);
my ($item_id,$anum,$html_id)=$lj->PostEntry(\%Event);
(defined $item_id)
|| die "$0: Failed to post journal entry: $LJ::Simple::error\n";
Przykładowy wynik działania powyższego skryptu:
Pobranie informacji o ostatnio wprowadzonym wpisie
use LJ::Simple;
use POSIX;
my $lj = new LJ::Simple ({
user => "uzytkownik",
pass => "haslo",
});
my %Entries=();
(defined $lj->GetEntries(\%Entries,undef,"one",-1))
|| die "$0: Failed to get the most recent entry - $LJ::Simple::error\n";
my $Entry=undef;
my $Format="%-20s: %s\n";
foreach $Entry (values %Entries) {
my $url=$lj->GetURL($Entry);
(defined $url) && print "$url\n";
my ($item_id,$anum,$html_id)=$lj->GetItemId($Entry);
(defined $item_id) && printf($Format,"Item_id",$item_id);
my $subj=$lj->GetSubject($Entry);
(defined $subj) && printf($Format,"Subject",$subj);
my $timet=$lj->GetDate($Entry);
if (defined $timet) {
printf($Format,"Date", strftime("%Y-%m-%d %H:%M:%S",localtime($timet)));
}
my $EntProt="";
my ($protect,@prot_opt)=$lj->GetProtect($Entry);
if (defined $protect) {
if ($protect eq "public") {
$EntProt="public";
} elsif ($protect eq "friends") {
$EntProt="friends only";
} elsif ($protect eq "groups") {
$EntProt=join("","only groups - ",join(", ",@prot_opt));
} elsif ($protect eq "private") {
$EntProt="private";
}
printf($Format,"Journal access",$EntProt);
}
$word="no";
$prop=$lj->Getprop_preformatted($Entry);
if ((defined $prop) && ($prop==1)) { $word="yes" }
printf($Format,"Preformatted",$word);
$word="no";
$prop=$lj->Getprop_nocomments($Entry);
if ((defined $prop) && ($prop==1)) { $word="yes" }
printf($Format,"No comments",$word);
$word="no";
$prop=$lj->Getprop_noemail($Entry);
if ((defined $prop) && ($prop==1)) { $word="yes" }
printf($Format,"No emailed comments",$word);
$word="[None]";
$prop=$lj->Getprop_current_mood_id($Entry);
if ((defined $prop) && ($prop ne "")) { $word=$prop }
printf($Format,"Current mood_id",$word);
printf($Format,"Journal entry","");
my $text=$lj->GetEntry($Entry);
(defined $text) &&
print " ",join("\n ",split(/\n/,$text)),"\n\n";
}
Wynik działania powyższego skryptu:
http://www.livejournal.com:80/talkpost.bml?journal=uzytkownik&itemid=14202 Item_id : 55 Date : 2007-06-09 18:11:00 Journal access : private Preformatted : no No comments : yes No emailed comments : no Current mood_id : 15 Journal entry : A simple entry made using LJ::Simple version 0.15
Wyedytowanie ostatnio wprowadzonego wpisu
foreach (values %Entries) {
$lj->SetMood($_,"accomplished")
|| die "$0: Failed to set mood - $LJ::Simple::error\n";
$lj->SetSubject($_,"zmodyfikowany post")
|| die "$0: Failed to set subject - $LJ::Simple::error\n";
$lj->AddToEntry($_,"Linia 2")
|| die "$0: Failed to set entry - $LJ::Simple::error\n";
$lj->Setprop_taglist($_,qw( perl testing ))
|| die "$0: Failed to set back date property - $LJ::Simple::error\n";
$lj->EditEntry($_)
|| die "$0: Failed to edit entry - $LJ::Simple::error\n";
}
Przykładowy wynik działania powyższego skryptu:
Dodatkowe informacje
Informacje o autorze opracowania
Autor: Magdalena Michowska a.k.a. M.M.