Moduł LJ::Simple

Uniwersytet Gdański - Instytut Matematyki - Zakład Informatyki - Strona domowa

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ł:)

[czytaj więcej... ]

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.

Uniwersytet Gdański - Instytut Matematyki - Zakład Informatyki - Strona domowa - Perl - Wyklady
[c] Piotr Arłukowicz, materiały z tej strony udostępnione są na licencji GNU.