Praca programisty nie zawsze polega na rozwiązywaniu zaawansowanych problemów programistycznych, czy też tworzeniu złożonych algorytmów przeliczających niewyobrażalne zbiory danych. Czasem potrzebujemy zwyczajnych, prostych, czasem wręcz trywialnych rozwiązań dla problemów naszych klientów. Ostatnio zetknąłem się z jednym z takich problemów – pobieraniem miniaturek do filmów wstawianych poprzez element <iframe> YouTube’a. Zapraszam do lektury krótkiego i treściwego wpisu na ten temat. ;]
Fotografia: mauritsonline, CC-BY.
YouTube: Pobieranie miniatury filmu / wideo.
Do opisu całej sytuacji użyję jednej z genialnych animacji pt. „Animator vs Animation” – dokładnie części czwartej tej „sagi”:
Jak widać, animacja wstawiła się bardzo ładnie, ale co z miniaturką?
Kiedy pierwszy raz pomyślałem o rozwiązaniu tego problemu, zmartwiłem się, że pewnie trzeba będzie znowu użyć jakiegoś API, żeby zrobić teoretycznie prostą rzecz. Okazuje się jednak, że nie jest aż tak źle. Na początku musimy wyciągnąć z adresu identyfikator wideo w systemie. Biorąc pod uwagę to, że nasz URL wideo wygląda następująco:
http://www.youtube.com/embed/Afx85mWjwZA
nie będzie to specjalnie trudne. Wystarczy użyć wyrażenia regularnego, ew. skorzystać z następującego kodu:
$url = 'http://www.youtube.com/embed/Afx85mWjwZA'; $imgPath = substr($url, strrpos($url, '/') + 1, strlen($url));
i mamy już nasz identyfikator [Afx85mWjwZA] zapisany w zmiennej $imgPath.
Teraz wystarczy użyć następujących adresów URL, aby bezproblemowo uzyskać miniaturki dowolnych wielkości [ID to nasz identyfikator]:
Mała miniaturka [120x90]:
http://img.youtube.com/vi/ID/default.jpg
[lub]
http://img.youtube.com/vi/ID/1.jpg

Duża miniaturka [320x240]:
http://img.youtube.com/vi/ID/0.jpg

Możemy też użyć plików 2.jpg i 3.jpg, które zawierają kolejne zrzuty ekranu z danego filmu.
Mam nadzieję, że dzięki tak prostej informacji wstawianie miniaturek na stronach internetowych stanie się o wiele prostsze. Nie będziecie też musieli szukać rozwiązania nigdzie indziej. ;]
Warto przeczytać.
Trwa ładowanie…
Fajna rzecz. Na pewno się przyda. Od siebie dodam tylko, że warto zobaczyć co przygotowała dla ekipa Zend Frameworka. Jakiś czas tym o tym pisałem – http://blog.wilgucki.pl/2010/02/zendgdatayoutube-w-5-minut.html
Smushit – optymalizacja grafiki na potrzeby www
Zend_Gdata_Youtube wygląda ciekawie, nie powiem – na pewno ułatwi pracę tym, którzy potrzebują wyciągnąć z YouTube nieco więcej.
Ja robiłem moduł, w którym admini mieli możliwość wstawiania linków z YT do odtwarzania na stronie [właśnie w tej formie /embed/ID]. Wszystko byłoby dobrze, gdyby na etapie wdrażania nie pojawił się problem z miniaturkami [nikt o tym wcześniej nie wspominał], także potrzebowałem czegoś, co nie zmusi mnie do dodatkowej pracy, a pozwoli osiągnąć to w łatwy sposób.
Linkdump 43- PeHaPe
Z tego co wiem, to jest javascript’owe api youtube, które pozwala na takie sztuczki. Chociaż osobiście na swoją stronę wybrałem własne rozwiązanie w PHP (do kodu embed wstawiam tylko identyfikator wyciągnięty z linku.
O tym, jak pobierać obrazki nie myślałem, ale na pewno ten wpis się przyda :)
Jak wyłączyć Unity w Ubuntu
Tak jak napisałem w odpowiedzi do komentarza @batmana, chodziło o coś mniej problematycznego niż użycie API. Skoro można bezpośrednio, to po co sobie utrudniać życie. ;]
Linkdump 43- PeHaPe
Po to jest API aby przy zmianie schematu linkowania takiej ikony programista nie musiał sobie tym głowy zawracać (a serwisy to wykorzystujące bez problemu dalej działały). Jak dla mnie sposób fajny ale i tak użyłbym API.
Myślę, że ten schemat linkowania raczej się prędko nie zmieni – serwisy z taką „renomą” jak YT nie mogą sobie pozwolić na nagłe „zniknięcie” milionów [miliardów?] linków na rzecz czyjejś fanaberii. Podobnie jak ja w tym momencie nie mogę np. zmienić schematu linkowania na blogu, bo by się wysypały wszystkie pozycje w Google. ;]
Aczkolwiek w „bardziej krytycznych” sytuacjach masz rację – lepiej skorzystać z udokumentowanej drogi dostępu niż ze skrótu, który może działać, a może nie.
YouTube- Pobieranie miniatury filmu – wideo