18-02-2019 | Programming
Projekt „Cyclotron”

Projekt „Cyclotron” jest to interfejs do aplikacji serwisu Flickr, służący do masowego pobrania zdjęć poprzez api.

W przeszłości Flickr oferował 1TB przestrzeni na przechowywanie swoich zdjęć i filmów. Pozwalał na automatyczny backup zdjęć ze smartphonów. Dzięki integracji z Lightroomem można było także z poziomu programu eksportować swoje zdjęcia do serwisu. Z racji dostępnej przestrzeni oraz łatwości uploadu był częstym wyborem dla fotografów lub osób które po prostu robiły dużo zdjęć. Niestety pod koniec 2018 roku Flickr ogłosił że 1TB będzie dostępny tylko dla kont Pro. W wersji darmowej użytkownik może obecnie przechowywać tylko 1000 zdjęć. W momencie wejścia w życie zmian u użytkowników, którzy pozostali przy opcji darmowej, a posiadają ponad tysiąć zdjęć, Flickr usuwa najstarsze zdjęcia. Flickr pozwalał na bardzo łatwy upload plików, natomiast pobranie czegokolwiek z serwisu nie jest już takie łatwe. Co prawda można żądać przygotowania paczek z plikami do pobrania, ale słyszałem że, są spore problemy z otwarciem niektórych archiwów.

Jeden z moich znajomych, odezwał się do mnie, czy nie ma opcji jakoś pobrać tych danych (miał właśnie spore problemy z otwarciem plików zip przygotowanych przez Flickra). Ów znajomy posiada na koncie Flickra po 31 tyś plików, więc pobieranie poprzez klikanie „pobierz” na każdym pliku zdecydowanie było nie do zaakceptowania. Więc cóż … challenge accepted.

Implementacja:

Cyclotron jest aplikacją, a właście interfesjem. Do jego stworzenia użyty został React a także kilka skryptów w PHP. Pewne dane trzymane są w local storage, więc po odświeżeniu karty aplikacja automatycznie się zaloguje. Dostęp do publicznych zdjęć jest bardzo prosty i można to zrobić z poziomu js’a. Natomiast dostanie się do zdjęć prywatnych nie jest już takie łatwe (co ma sens). Aplikacja generuje access token w OAuth i każdy request musi być podpisany kluczem, co powoduje że js’owe requesty nie przechodzą. Stąd obecność phpowych skryptów.

Instrukcja:

Tak jak pisałem wcześniej „Cyclotron” jest interfejsem do aplikacji flickra, ma to niewątpliwie swoje wady i zalety. Flickr dla swojego api ma ustawiony limit 3600 requestów na godzinę, co daje jeden request na sekundę. Po przez konstrukcję flickrowego api moja aplikacja potrzebuje dwóch requestów aby pobrać zdjęcie. Dlatego ustawiony jest dwu sekundowy interwał. Dzięki temu nie powinno dojść do wysycenia puli reqestów. Dodatkowo dzięki temu dwóch lub więcej użytkowników (jakby jakimś cudem chciało skorzystać z mojej aplikacji dwóch użytkowników naraz ), nie wchodzi sobie „w paradę” w komunikacji z api. Minusem takiego rozwiązania jest jedna konieczność skonfigurowania pewnych rzeczy przez rozpoczęciem pobierania. Poniżej szczegółowa instrukcja:

  • A więc tak, na początek musisz zalogować się w przeglądarce na swoje konto Flickr
  • Następnie wejdź na adres: https://www.flickr.com/services/apps/create/apply/ . Będziesz na stronie utworzenia nowego ApiKey do aplikacji (moja aplikacja będzie interfejsem właśnie do aplikacji którą zaraz stworzysz)
  • Wybierz Non-Commercial 
  • Zostaniesz przeniesiony na strony tworzenia aplikacji. To co tam wpiszesz nie ma większego znaczenia. Tworzysz aplikacje przypisaną do twojego konta, nie publiczną więc nikt jej nie zobaczy. Oczywiście akceptujesz regulamin itd.
  • Twój ApiKey oraz SecretKey zostały wygenerowany, skopiuj je sobie gdzieś, będą potem potrzebne.
  • Po wygenerowaniu kluczy kliknij „Edit app details”
  • Następnie wybierz „Edit the authentication flow”
  • jako „Callback URL” wpisz http://cyclotron.pixelcorn.pl . Jest to adres zwrotny dla procesu autentykacji. Zapisz zmiany

W celu sprawnego działania zalecam jeszcze jedną rzecz. Otóż upewnij się z przeglądarce ustawione masz automatyczny zapis plików do danego folderu (w sensie że, nie wyskakuje za każdym razem pytanie gdzie zapisać dany plik). Dla Chrome: „ustawienia” -> „zaawansowane”

I to wszystkie ustawienia. Wejdź teraz na:

http://cyclotron.pixelcorn.pl

i skorzystaj z mojej aplikacji zgodnie z zawartymi w niej instrukcjami.

W razie pytań proszę o kontakt.

Kod projektu dostępny na githubie