Dodawanie zdjęć na flickr.com w trybie My-flickr-upld UK

Wprowadzenie

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.

Pliki ,,konfiguracyjne''

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 latlon 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.

Umieszczanie zdjęć na 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 pickingHypholoma; 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.

Tryb My-flickr-upld w Emacsie

Posł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ę.

flickr-1  flickr-2  flickr-2

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.plflickr_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).

flickr-3  flickr-4 flickr-4

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

Różne użyteczne informacje nt. flickr.com

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:

Pobierz

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.22Flickr-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).

PowrótPowrót