[PHP]Klasa MediaProvider, czyli obsługa multimediów z różnych źródeł

Osadzenie obrazka na stronie HTML jest bardzo proste – wystarczy wstawić adres internetowy grafiki do atrybutu src znacznika img. Niestety, w przypadku treści audio/wideo zwykle nie jest już tak łatwo. Poważne serwisy streamingowe, takie jak YouTube czy SoundCloud, nie udostępniają bezpośrednich URL-i swoich plików multimedialnych. Jedyne co mamy do dyspozycji to kody embed, które jednak różnią się w zależności od serwisu. Aby poradzić sobie z tym problemem, napisałem w PHP specjalną klasę MediaProvider.

MediaProvider jest klasą abstrakcyjną, zawierającą cechy wspólne dla odtwarzaczy ze wszystkich źródeł. Oprócz jej samej, potrzebne są dziedziczące od niej klasy, obsługujące poszczególne serwisy streamingowe. Ja utworzyłem 5 takich klas: dla YouTube`a, SoundClouda, Vimeo, Twittera oraz Dysku Google. Poniżej kody źródłowe każdej z nich:

abstract class MediaProvider {
    private $id;
    protected $url;
    protected $template = '<iframe frameborder=0 src="%s" width="%s" height="%s"></iframe>';
    final public function __construct ($id) {
        $this->id = $id;
    }
    final public function __get ($name) {
        if ($name == 'url') return $this->getURL();
        return $this->$name;
    }
    protected function getURL () {
        return sprintf($this->url, $this->id);
    }
}

class YouTubeVideo extends MediaProvider {
    protected $url = 'https://www.youtube.com/embed/%s';
}
class SoundCloudAudio extends MediaProvider {
    protected $url = 'https://w.soundcloud.com/player/?url=https%%3A//api.soundcloud.com/tracks/%d&amp;auto_play=false&amp;hide_related=false&amp;show_comments=true&amp;show_user=true&amp;show_reposts=false&amp;visual=true';
}
class TwitterVideo extends MediaProvider {
    protected $url = 'https://twitter.com/i/videos/tweet/%d';
}
class GoogleDriveMedia extends MediaProvider {
    protected $url = 'https://drive.google.com/file/d/%s/preview';
}
class VimeoVideo extends MediaProvider {
    protected $url = 'https://player.vimeo.com/video/%d';
}

Jeśli chcesz przetestować te klasy w akcji – mam dla Ciebie gotowy do użycia kod strony-demo. Po prostu kliknij w link „Download”, umieść pobrany plik na serwerze i uruchom w przeglądarce.

Mam nadzieję, że komuś z Was się to przyda 🙂 Jeśli znajdę czas i chęci, napiszę klasy dla kolejnych serwisów multimedialnych, i również udostępnię na blogu.

Reklamy

Skomentuj

Wprowadź swoje dane lub kliknij jedną z tych ikon, aby się zalogować:

Logo WordPress.com

Komentujesz korzystając z konta WordPress.com. Wyloguj / Zmień )

Zdjęcie z Twittera

Komentujesz korzystając z konta Twitter. Wyloguj / Zmień )

Zdjęcie na Facebooku

Komentujesz korzystając z konta Facebook. Wyloguj / Zmień )

Zdjęcie na Google+

Komentujesz korzystając z konta Google+. Wyloguj / Zmień )

Connecting to %s