flickr.com w trybie My-flickr-upld
Opisywanie zdjęć na flickr.com jest czasochłonne
jeżeli zdjęć jest dużo. Robienie tego po ich
umieszczeniu na stronie za pomocą tzw. niezwykle-wygodnego-interfejsu
praktycznie nie wchodzi w grę. Poniżej opisałem w jaki sposób dodaję
swoje zdjęcia na flickr.com.
Sposób ten jest zapewne dużo
mniej intuicyjny -- cokolwiek to oznacza -- ale niewątpliwie dużo
szybszy.
Opis zdjęcia (tagi) mają zawierać współrzędne geograficzne oraz nazwy ważniejszych obiektów na zdjęciu (osoby, budowle itp...) Zdjęcia są podzielone na zbiory (set), opis ma też zawierać informację do jakich zbiorów dodano zdjęcie oraz do jakich grup zdjęcie ma być wysłane (group pools). Reasumując opis zdjęcia to: geotagi (współrzędne geograficzne oraz nazwa miejsca), tagi (pozostałe), zbiory i pule grup (group pools). Tagi, zbiory i pule są definiowane za pomocą odpowiednich metod z API flickra.
Jeżeli chodzi o geotagi, to najprościej jest pobierać odpowiednie
wartości z GPSa a następnie dodawać geotagi w sposób opisany
np. tutaj.
(Por. też mój krótki
tekst jak to zrobić)
Jeżeli zdjęcia zawierają geotagi, to sprawa jest z punktu
widzenie trybu My-flickr-upld załatwiona.
Czasami jednak GPS zawiedzie albo go nie ma, wtedy można dodać współrzędne
,,ręcznie''. Można to zrobić na dwa sposoby:
poprzez wstawienie identyfikatora miejsca z bazy lub
poprzez dodanie współrzędnych w konwencji #długość:szerokość.
Pierwszy z wyżej wymienionych sposobów korzysta
z bazy identyfikatorów typu Sopot#Abrahama28
czy Gdańsk#Lotnisko, którymi należy się posługiwać podczas
opisywania zdjęć.
Baza identyfikatorów geograficznych (geotagi) jest plikiem XML
o następującym formacie:
<wpts> <wpt lat="54.37983" lon="18.28747"> <name>Przodkowo</name> <identifier>Przodkowo#Skrzyżowanie</identifier> </wpt> ...
Gdzie element identifier zawiera identyfikator miejsca,
a atrybuty lat i lon jego współrzędne
geograficzne. Baza ta znajduje się w pliku:
~/.flickr/knows/where.flk.
Informacja o współrzędnych geograficznych jest
dodawana zarówno do pliku ze zdjęciem (w postaci odpowiednich tagów EXIF),
jak i do opisu zdjęcia na stronie flickra (za pomocą specyficznych tagów
rozpoczynających się od geo:). Mówiąc bardziej konkretnie,
do opisu zdjęcia zostaną dodane następujące tagi:
geo:longitude=długość,
geo:latitude=szerokość oraz
geo:loc=nazwa
(geo:loc tylko w wypadku posługiwania się
identyfikatorami miejsc; nazwa jest zawsze jednowyrazowa).
Do pliku ze zdjęciem zostaną wstawione odpowiednie wartości
następujących pól EXIF:
GPSLongitudeRef,
GPSLatitudeRef,
GPSLatitude,
GPSLongitude oraz
GPSAreaInformation (to ostatnie tylko wtedy gdy posługujemy
się identyfikatorem miejsca.)
Dla pozostałych tagów stosuję konwencję (od jakiegoś czasu) wstawiania
pojęć wielowyrazowych, a nie tworzenia jednowyrazowych dziwolągów,
tj. "tomasz przechlewski" a nie
tomaszprzechlewski czy tomasz_przechlewski.
Aha, wszystkie tagi piszę małymi literami. Baza tagów -- także
w formacie XML -- znajduje się w pliku
~/.flickr/hr.icio.tags i jest zakładana/odświeżana za
pomocą skryptu flickr_getalltags.pl, który ściąga wszystkie
do tej pory zdefiniowane przez mnie tagi z flickr.com.
Bazy zbiorów i puli znajdują się odpowiednio w plikach
~/.flickr/hr.icio.sets oraz
~/.flickr/hr.icio.groups
i są zakładane/odświeżane za
pomocą skryptów flickr_getgroups.pl
oraz flickr_getsets.pl pobierających odpowiednie
informacje z flickr.com.
Bazy identyfikatorów miejsc, tagów, zbiorów i puli są potrzebne
do szybkiego dodawania opisów do zdjęć.
Do odświeżania zawartości tych
plików od czasu do czasu
uruchamiam skrypt flickr_update_kb:
#!/bin/bash echo "Refreshing information on tags/sets/geolocs/pools" flickr_getsets && flickr_getalltags && flickr_getgroups && \ flickr_xml2el > ~/.flickr/hr.icio.el
Skrypt flickr_xml2el.pl zamienienia pliki
z informacjami o tagach, pulach, zbiorach i identyfikatorach miejsc
z formatu XML do postaci Emacs lisp. Możliwe jest wprawdzie -- za
pomocą biblioteki xml.el bezpośrednie czytanie plików
.xml ale jest to przeraźliwie wolne i stąd pomysł na
zewnętrzne przetwarzanie Perlem.
Uwaga: skrypt flickr_xml2el.pl oraz
flickr_xml2el to ten sam skrypt (flickr_xml2el jest linkiem
do flickr_xml2el.pl).
Podobnie jest w przypadku innych skryptów perlowych.
www.flickr.com
Do tego służą skrypty flickr_xload.pl oraz
flickr_upld.pl. Przykładowe uruchomienie
skryptu flickr_xload.pl wygląda następująco:
flickr_xload --title tytuł --description opis --set zbiory --tag tagi --gt dł:szer:id:dokł --rotate kąt plik
Gdzie: tytuł to tytuł rysunku; opis to opis
rysunku; zbiory to lista oddzielonych przecinkami
lokalnych identyfikatorów zbiorów; tagi to oddzielone
odstępami tagi (tagi wielowyrazowe otocz cudzysłowem ");
dł:szer:id:dokł to odpowiednio: długość i szerokość
geograficzna (zapisana w notacji dziesiętnej), identyfikator
geograficzny oraz umowne oznaczenie dokładności
(por. flickr.photos.geo.setLocation);
kąt spowoduje obrót rysunku o kąt
(dopuszczalne wartości to 90, 180 lub 270) stopni w kierunku
przeciwnym do ruchu wskazówek zegara
(por. flickr.photos.transform.rotate);
plik to nazwa pliku. Przykład:
flickr_xload --set s8 --tag '"mushrooms" "mushroom picking" "Hypholoma"\ geo:lon=18.536682 geo:lat=54.442495 geo:loc=Sopot#MałaGwiazda'\ --gt '54.442495:18.536682:Sopot#MałaGwiazda:11' dscn3135.jpg
Spowoduje dla pliku dscn3135.jpg z bieżącego katalogu: 1)
wysłanie go na flickr.com oraz 2) dodanie tagów
mushrooms, mushroom picking i Hypholoma;
3) dodanie stosownych dla Sopot#MałaGwiazda geotagów (pobranych
z bazy ~/.flickr/knows/where.flk);
4) dodanie identyfikatora zbioru(ów), tj. s10 w tym przypadku.
Ponieważ posługiwanie się flickr_xload jest nieporęczne
z uwagi na skomplikowaną postać argumentów wiersza poleceń, powstał
skrypt flickr_upld, który jest rodzajem preprocesora do
flickr_xload. Można go uruchomić z opcją
--script plik, gdzie plik zawiera nazwy
i opisy zdjęć. Zakłada się, że plik jest redagowany
w odpowiednim trybie edytora Emacs a flickr_xload
uruchamiany ,,z wnętrza''Emacsa. Format pliku zawierającego nazwy/opisy
zdjęć jest następujący:
dscf2001.jpg >> @g Sopot#Abrahama28 @k krzyś,komputer,jaś @lrot dscf2003.jpg >> @g Sopot#Abrahama28 @k mushroom,flammulina_velutipes @s s1,s14 @p p1
Znaczenie przełączników @g, @k,
@s, @p, itp., powinno być oczywiste.
Uwaga: jeżeli wartość argumentu @g zaczyna się od znaku
#, to skrypt oczekuje wartości w postaci #długość:szerokość.
W pozostałych wypadkach będzie traktował argument jako identyfikator
miejsca i szukał go w bazie identyfikatorów. Brak @g lub
pusta wartość tej opcji zakłada, że albo zdjęcie zawiera współrzędne
w odpowiednich polach EXIF albo nie ma być geotagowane.
My-flickr-upld w EmacsiePosługując się wierszem poleceń albo prostym edytorem
sprawne opisanie plików ze zdjęciami jest ciężkie.
Żeby to robić sensownie trzeba
widzieć każde zdjęcie. Do tego celu służy tryb
My-flickr-upld.el dla Emacs. Pozwala oznakować zdjęcia
w trybie interaktywnym. Por. rysunek poniżej.
Należy rozpocząć od skopiowania zdjęć do jakiegoś katalogu.
Teraz uruchamiamy Emacsa
a następnie wykonujemy polecenie My-flickr-images-init.
W odpowiedzi na wyświetlone w minibuforze zapytanie
o nazwę katalogu należy podać ten, w którym są skopiowane uprzednio zdjęcia.
Emacs stworzy bufor flickr-list.dir zawierający
zestawienie zdjęć pokazane na rysunku poniżej.
Początkowo każdy wiersz zestawienia będzie zawierał tylko
nazwę pliki ze zdjęciem plus ,,puste'' przełączniki @g, @k.
Zawartość bufora flickr-list.dir może być edytowana swobodnie.
Obowiązuje w nim składnia skryptu flickr_upld.
Dodatkowo zostało zdefiniowanych kilka ułatwień przyśpieszających pracę.
W trybie My-flickr-upld ekran jest dzielony na pół, w górnym oknie jest
wyświetlana lista plików (jeden wiersz = jeden plik).
W dolnym oknie wyświetlany jest plik z wiersza,
w którym jest kursor. Zdefiniowano ponadto kilka pomocnych skrótów
klawiszowych: C-c C-c -- kopiowanie opisu z poprzedniego
wiersza C-c C-a -- wstawienie nazwy zbioru
C-c C-g -- wstawienie
identyfikatora geo C-c C-t albo
C-c C-k -- wstawienie taga.
Polecenia wstawiające zbiory i tagi działają w oparciu o bazy
~/.flickr/nazwa.tags,
~/.flickr/nazwa.sets
oraz ~/.flickr/knows/where.flk i dzięki temu pozwalają
na uzupełnianie
nazw (completion, por. rys. poniżej). Aby polecenia działały prawidłowo
trzeba co jakiś czas odświeżać bazy zbiorów/tagów używając poleceń:
flickr_getalltags.pl,
flickr_getgroups.pl
i flickr_getsets.pl.
Aby odróżnić zdjęcia zawierające zdefiniowane tagi EXIF ze współrzędnymi geograficznymi od tych, które tej informacji nie zawierają, generowana miniatura zdjęcia zawiera czerwony prostokąt w lewym górnym rogu (jeżeli zdjęcie jest już geotagowane).
Po dodaniu opisów bufor należy zapisać na dysk a następnie
uruchomić polecenie My-flickr-buffer-upload, które
wyśle zdjęcia na flickr.com. Można też oczywiście osiągnąć to samo
wpisując w wierszu
poleceń, w katalogu w którym znajdują się zdjęcia:
perl flickr_upld.pl -script flickr-list.dir
Odsyłacze do zdjęć na flickr.com są tworzone według pewnego schematu.
Strona główna zdjęcia ma adres http://www.flickr.com/tprzechlewski/<photo_id>/</photo_id>, gdzie
<photo_id> oznacza identyfikator zdjęcia.
Plik ze zdjęciem ma zaś następujący URL:
http://static.flickr.com/<server>/<photo_id>_<secret>_<size>.jpg
Wartości <server> oraz <secret> można
ustalić np. poprzez wykonanie metody
flickr.people.getPublicPhotos. Wartościami size są
s (square), t (thumbnail), m
(small), b (large), o (original). Oznaczają
one odpowiednio pliki o wielkościach 75, 100, 200, 1024 pikseli
i wielkość oryginalną. Rysunek typu square to kwadrat,
pozostałe to prostokąty o dłuższym boku równym podanej licznie
pikseli. Prostokąt o dłuższym boku równym 500 pikseli to wielkość
zdjęcia, która jest wyświetlana na stronie głównej zdjęcia. Ta
wielkość jest wybierana jeżeli URL nie zawiera części _<size>.
Aby wyświetlić stronę ze zdjęciem o podanym id należy użyć adresu URL zgodnego z poniższym schematem:
http://flickr.com/photo.gne?id=<photo_id>
Są inne użyteczne adresy URL tego typu:
http://www.flickr.com/services/feeds/photos_public.gne?id=<user_NSID>&format=rss_200
http://www.flickr.com/groups_feed.gne?id=<group_NSID>&format=rss_200
http://www.flickr.com/services/feeds/photos_public.gne?tags=<tag>&format=rss_200
http://www.flickr.com/messages_write.gne?to=<user_NSID>
Omawiane skrypty są tutaj.
Plik README zawiera wskazówki odnośnie instalacji.
Opis wcześniejszej wersji skryptów oraz trybu My-flickr-upld
jest tutaj.
Punktem wyjścia w przypadku skryptów perlowych był moduły
Flickr-Upload-1.22
i Flickr-API-0.08.
Biblioteka My-flickr-upld.el wykorzystuje
image-file.el oraz fragmenty i idee
z show-images.el Normana Walsha (jest częścią pakietu jpegrdf).