iMagazine

Keyboard Maestro i wstawianie linków zamiast znaczników

13/12/2014, 02:29 · · · 1

W tytule mógłbym zawrzeć słowo #nerdalert, bo niniejszy wpis będzie zapewne bardzo niszowy, bo dotyczy osobistego problemu – jeszcze szybszego publikowania tekstów. Ale mam nadzieję, że przynajmniej paru osobom podane rozwiązania kiedyś się przydadzą, a być może ktoś z Was podpowie jeszcze, jak to wszystko można bardziej usprawnić.

Problem

Swoje wpisy przygotowuję w sposób oddany na poniższym przykładowym zrzucie:

Są tu teksty oraz znaczniki <!--photo--> przeznaczone do wstawienia w ich miejsce linków do zdjęć. Linki będą w postaci kodu HTML, a całość opublikowana bezpośrednio z Byword na iMagazine.

Do tej pory ręcznie wstawiałem linki za każdy ze znaczników. Postanowiłem jednak, że sobie to ułatwię i zaprzęgnę jakąś aplikację, która mogłaby jak najbardziej zautomatyzować ten proces.

Rozwiązanie

Problem udało się rozwiązać przy pomocy Keyboard Maestro, skryptu Bash oraz Pythona, a całe makro (jego najważniejsza część) przedstawia się następująco:

Po kolei objaśnię:

Tu odbywa się cała „magia”, która jednak nie jest przedmiotem tego wpisu – tworzony jest link do każdego z plików graficznych. Żeby jednak rzucić trochę światła na sprawę, każdy link przedstawia się w postaci:

Skrypt przy pomocy narzędzia sips wydobywa, a potem składa do „kupy” wszystkie niezbędne informacje, na podstawie których powstaje link według powyższego schematu. Tak dzieje się z każdym plikiem, który był zaznaczony w chwili wywołania makra. Linki są zapisywane do pliku links, który tworzony jest w katalogu /tmp, na zasadzie dopisywania. Tyle ile było zaznaczonych plików, tyle będzie linków. Dlatego też na początku makra znajduje się akcja, która kasuje ten plik, żeby móc zacząć „na czysto”.


Ostatni element odpowiedzialny jest za właściwe podstawianie linków w miejsce znaczników <!--photo-->.

Objaśnienie kodu:

DOCS="/Users/$USER/Desktop/" – wskazanie folderu z tworzonymi dokumentami (testowo jest to Biurko).

LAST=$(ls -t $DOCS | awk '{printf("%s",$0);exit}')1 – odnalezienie w katalogu ostatnio modyfikowanego pliku. Nie stanowi to dużego problemu, bo w folderze, w którym tworzę tylko dokumenty do wpisów ten ostatni w 99% przypadków jest właśnie tym, nad którym pracuję. A zawsze mogę go jeszcze zmodyfikować i zapisać, gdybym pracował jednak nad dwoma.

PLIK="$DOCS$LAST" – połączenie ścieżki do katalogu i nazwy pliku w celu otrzymania pełnych „namiarów” na dokument.

LINKI="/tmp/links" – zmienna określająca miejsce zapisanych linków.

python << EOF … – właściwe podmienianie. Plik dokumentu otwierany jest dwukrotnie jako inputoutput, ponieważ w nim będziemy szukać i do niego zapisywać zmiany. Z kolei plik z linkami dzięki zastosowaniu pętli idzie linia po linii wypełniając polecenie podmiany: input = input.replace('<!--photo-->', line, 1). Jedynka na samym końcu wymusza podmianę tylko na pierwszym rezultacie (odnalezionym znaczniku <!--photo-->). Następnie przechodzimy do drugiej linii pliku z linkami i sytuacja się powtarza. Pętla kończy się w momencie braku linków bądź znaczników <!--photo-->.2

Początkowo chciałem trzymać się tylko Bash’a i skorzystać z narzędzia sed. O ile jednak działało prawidłowo z pojedynczymi słowami w czasie testów, o tyle z utworzonymi linkami nie radziło sobie w ogóle.3

Wynik

Wynikiem jest tekst uzupełniony o linki. :)


Zapewne wprawne oko osoby obytej z Bash’em i Pythonem (a może nawet z Keyboard Maestro) wychwyci tu parę błędów, czy rzeczy, które można lub nawet trzeba poprawić. Nieźle się namęczyłem zanim w końcu osiągnąłem pożądany rezultat, ale jak się pewnie domyślacie, rozwiązanie dało ogromną satysfakcję tym bardziej, że nie zajmuję się „programowaniem” na codzień, a tylko hobbystycznie.

P.S.: Stack Overflow i inne jemu podobne strony to taka ściąga.pl dla geeków. ;)

P.P.S.: Niniejszy wpis jest „żywym” przykładem prawidłowego działania całego makra. Z jednym wyjątkiem, w skrypcie z kawałkiem Pythona, zaraz za jego wywołaniem python << EOF w następnej linijce zabrakło zapisu kodowania # coding=utf-8. :)


Maciej Skrzypczak

Użytkownik sprzętu z nadgryzionym jabłkiem, grafik komputerowy, nałogowy gracz ARK: Survival Evolved. Redaktor iMagazine.pl.


Dodaj komentarz

Dbamy o Twoją prywatność

Od dnia 25 maja 2018 r. dostosowujemy naszą działalność do nowego Rozporządzenia Unii Europejskiej o Ochronie Danych Osobowych (RODO).

Zaktualizowaliśmy naszą Politykę Prywatności, aby udzielić Ci bardziej szczegółowych informacji, w jaki sposób iMagazine.pl chroni twoją prywatność, oraz w jaki sposób możesz korzystać ze swoich praw odnośnie danych osobowych.

Kliknij w poniższy link, aby zapoznać się z zaktualizowaną Polityką Prywatności.

Dziękujemy, że jesteś z nami,
redakcja iMagazine

DOWIEDZ SIĘ WIĘCEJ OK