Konwersja zdjęć do formatu mediawiki
Mając odpowiednio spreparowaną strukturę katalogów i plików zdjęć (pisałem o tym wcześniej) można wygenerować galerię w formacie mediawiki. Konwersja jest kolejnym etapem więc lektura wcześniejszego opisu jest niezbędna.
Mówiąc w skrócie dodatkowy etap jest potrzebny ze względu na inny sposób obsługi zdjęć przez medialiwi. Tutaj, w odróżnieniu od dokuwiki, pliki są trzymane w automatycznie tworzonych podkatalogach a dodatkowe dane o zdjęciu wędrują do bazy danych (mysql). Sprawa wygląda na skomplikowaną ale to tylko pozory
Warsztat pracy
Do zabawy będziemy potrzebowali dodatkowych skryptów:
- zmiany nazwy plików do odpowiedniego szablonu (rfr.sh)
- budowania struktur katalogów dla mediawiki (rmw.sh)
Tak jak poprzednio skrypty są przeznaczone dla systemu Linux. Nie będą potrzebne żadne dodatkowe rekwizyty czy uprawnienia w systemie - wystarczy dostęp do shell (linii poleceń).
Wcześniej napisałem, że pliki zdjęć są nieco inaczej traktowane w mediawiki niż w dokuwiki. Na czym konkretnie polegają różnice?
Dokuwiki:
- system nie korzysta z bazy danych
- pliki są przechowywane w podkatalogach utworzonych przez użytkowników
- dostęp do pliku wymaga wcześniejszego poznania jego położenia (pełnej ścieżki dostępu)
- zdjęcia muszą mieć unikalne nazwy tylko w obrębie danego podkatalogu
- brak mechanizmu wyszukiwania zdjęć
Mediawiki:
- system korzysta z bazy danych do przechowywania informacji o artykułach i informacjach o zdjęciach
- pliki zdjęć są przechowywane w automatycznie tworzonych podkatalogach (tworzonych na podstawie funkcji srótu MD5)
- dostęp do pliku wymaga wcześniejszego poznania tylko jego nazwy
- nazwy plików muszą być unikalne w skali całego serwisu
- mechanizm wyszukiwania zdjęć (niestety nie obsługujący polskich znaków)
Na pierwszy rzut oka problemem będzie unikalność nazw plików. Wyjściem jest zastosowanie szablonu dzięki któremu będziemy mieli porządek w danych a odpowiednie pliki będą mogły być łatwo dostępne z poziomu wyszukiwarki mediawiki.
obiekt_miejsce_data_numer.rozszerzenie
obiekt i miejsce są zapisane bez polskich znaków, w mianowniku liczby pojedynczej;
data wykonania zdjęcia zapisana w formacie YYYYMMDD;
numer to 3-cyfrowa liczba losowa zapewniająca unikalność nazwy pliku;
na przykład:
kosciol_olsztyn_20020921_202.jpg zamek_golub-dobrzyn_20050709_120.jpg zamek_lidzbark_warminski_20030607_090.jpg
WAŻNE!
Wszystkie skrypty działają bezpośrednio na plikach, nie wykonując wcześniej żadnych kopii roboczych! Pamiętaj o zabezpieczeniu oryginałów zdjęć.
Opis poniżej dotyczy konwersji do struktur danych mediawiki 1.4.x (skrypty nie zadziałają z wersją 1.5.x!)
Zmiana nazw plików
Skrypt przenosi zdjęcia ze struktury
autor/obiekt/województwo/miejscowość/data/plik.jpg
do struktury
obiekt_miejscowość_data_numer.jpg
Skrypt tworzy także plik zawierający instrukcje SQL aktualizujące bazę danych mediawiki.
Parametry wywołania to:
- DIR katalog w którym znajdują się zdjęcia do konwersji (domyślnie bieżący katalog)
- ID użytkownika mediawiki, który jest autorem zdjęć (domyślnie 1)
- USER nazwa użytkownika o danym ID (domyślnie Admin)
Plik: rfr.sh
#! /bin/bash # Skrypt zmieniajacy nazwy plikow dla mediawiki # Utworzony na licencji GNU GPL # (C) 2005 Olsztynska Strona Rowerowa # # konwencja wywolania: # DIR nazwa katalogu w ktorym beda konwertowane zdjecia # ID id uzytkownika w systemie mediawiki # USER nazwa uzytkownika o danym ID DIR=$1 if [ -z "$DIR" -o ! -d "$DIR" ]; then DIR="."; fi ID=$2 if [ -z "$ID" ]; then ID=1; fi USER=$3 if [ -z "$USER" ]; then USER="Admin"; fi find $DIR -type f| grep -v out| egrep "(jpg|png|jpeg|gif)" | awk -v user=$USER -v id=$ID -F/ ' function toword(s) { return toupper(substr(s,1,1)) substr(s,2) } { OUT="out"; sprintf("rm -fr %s && mkdir %s", OUT, OUT)| getline rc; source=$0 split($(NF-1), d, "-") date=d[1]d[2]d[3] object=toword($(NF-4)) # nazwa pliku musi byc z duzej litery location=toword($(NF-2)) number=sprintf("%03d", int(rand()*1000)) split($NF, p, ".") suffix=tolower(p[2]) file=object"_"location"_"date"_"number"."suffix destination=OUT"/"file sprintf("cp -Rp %s %s", source, destination)| getline rc stamp=strftime("%Y-%m-%d %H:%M:%S") desc=object"_"location"_"date sprintf("find %s -printf %%s", source)| getline size printf "insert into wiki_image values (\"%s\", %d, \"%s\", %d, \"%s\", \"%s\");\n", file, size, desc, id, user, stamp >> OUT"/sql.txt" } '
Tworzenie struktur katalogów mediawiki
Mediawiki samodzielnie tworzy podkatalogi na pliki zdjęć bazując na funkcji sktótu MD5. Skrypt przenosi zdjęcia ze struktury
obiekt_miejsce_data_numer.jpg
do struktury
x/xy/obiekt_miejsce_data_numer.jpg
x jest pierwszym a y drugim znakiem skrótu MD5
Plik: rmw.sh
#! /bin/bash # Skrypt tworzacy strukture plikow mediawiki # Utworzony na licencji GNU GPL # (C) 2005 Olsztynska Strona Rowerowa ls -1 out | egrep "(jpg|png|jpeg|gif)" | awk -F/ ' function toword(s) { return toupper(substr(s,1,1)) substr(s,2) } { OUT="out"; source=OUT"/"$0 file=toword($NF) "echo "source" | md5sum | cut -c 0-32" | getline md md=tolower(md) destination=OUT"/"substr(md,0,1)"/"substr(md,1,2) "mkdir -p "destination| getline rc sprintf("mv -f %s %s/%s", source, destination, file)| getline rc } '
Konwersja
Na początek musimy mieć utwtworzoną odpowiednią strukturę podkatalogów dla plików zdjęć galerii. Zdjęcia powinny być już przygotowane do konwersji (odpowiednio pogrupowane, przeskalowane, oznaczone odpowiednim napisem).
Powiedzmy, że mamy gotową kolekcję zdjęć kościołów w katalogu "wiki". Katalog ten będzie więc zawierał skrypty (dla uproszczenia pominąłem skrypty konwerujące do formatu dokuwiki) i katalog ze zdjęciami:
$cd $HOME $ls -l wiki drwxr-xr-x 2 narg narg 16 2006-01-11 22:21 autor/ -rwxr-xr-x 1 narg narg 523 2006-03-02 21:04 rfr.sh -rwxr-xr-x 1 narg narg 1262 2006-03-02 21:04 rmw.sh
Teraz możemy wywołać skrypty konwersji do mediawiki. Nie trzeba robić kopii bezpieczeństwa katalogu ponieważ zdjęcia są kopiowane a nie przenoszone do nowej struktury.
$cd $HOME/wiki $./rfr.sh autor/ 2 narg # moje konto w mediawiki ma ID 2 oraz login "narg" $./rmw.sh
Po zakończeniu działania skryptu:
- katalog "wiki/out" zawiera zdjęcia gotowe do publikacji w internecie (format mediawiki);
- katalog "wiki/autor" zawiera zdjęcia w formacie dokuwiki
- katalog "wiki/out/sql.txt" zawiera plik SQL aktualizujący bazę danych mediawiki
Proste
C.D.N.
Na skróty
Ostatnie zmiany
- Le Mans grób ppor. Józefa Franka
- Saint-Mandé utworzono
- Pantin utworzono
- Ivry-sur-Seine utworzono
- Talence utworzono
- I Wojna Światowa (1914-18r.) [Francja]
- Nowiny [Mogiła żołnierska]
- Kowale Oleckie [Pomnik poległych i cmentarz]
- Giżycko (Lec) [Spis poległych]
- Koszyce (Košice) [Pomnik Żołnierzy Armii Czerwonej]
- Rogojny [2024-10-26]
- Krysk Nekrologi, Ltn. Max Paluka
- Kłajpeda [Cmentarz wojenny]
- Kłajpeda (Klaipėda) [Cmentarz wojenny]
- Bolków [2015-08-17]