>_ DevTrendspl

Język

Strona główna

Języki

Sekcje

Frontend Backend Mobilne DevOps AI / ML GameDev Blockchain Systemy wbudowane Bezpieczeństwo
PHP

Jak pobierać filmy z YouTube za pomocą czystego PHP bez bólu głowy

Znany scenariusz: musisz dodać funkcję pobierania filmów do swojego projektu lub po prostu uzyskać bezpośredni link do strumienia. Pierwszą rzeczą, która przychodzi do głowy, jest stary, dobry youtube-dl. Ale problemy zaczynają się od razu. Musisz radzić sobie z wywołaniami systemowymi, zarządzać instalacjami Pythona w kontenerze i mieć nadzieję, że binarka nie zepsuje się w najgorszym możliwym momencie.

Ostatnio natknąłem się na repozytorium youtube- down- loader autorstwa programisty Athlon1600. To próba zbudowania porządnej biblioteki w czystym PHP, która nie ciągnie za sobą masy zewnętrznych zależności i zewnętrznych narzędzi.

Jaki jest sens tego projektu

Autor mówi to wprost: większość bibliotek PHP dla YouTube to albo porzucone projekty sprzed pięciu lat, albo po prostu opakowują wywołania skryptów Pythona. Ten projekt idzie inną drogą. Nie ma tu interpreterów JavaScript ani wywołań powłoki. Tylko PHP i standardowe żądania HTTP.

Projekt jest inspirowany gigantami takimi jak yt-dlp, ale dostosowany do specyfiki serwerów webowych. Jeśli potrzebujesz szybko zintegrować funkcjonalność pobierania z istniejącą aplikacją PHP, to prawdopodobnie najłatwiejsza ścieżka.

Co potrafi biblioteka

Narzędzie pokrywa podstawowe potrzeby, z którymi programiści się spotykają przy pracy z serwisami wideo.

Pobieranie bezpośrednich linków

Najczęstszy scenariusz to podanie URL filmu i otrzymanie listy dostępnych formatów. Biblioteka zwraca obiekt DownloadOptions zawierający linki do filmów w różnej jakości, ścieżki audio i połączone strumienie.

Biblioteka zwraca obiekt DownloadOptions zawierający linki do filmów w różnej jakości, ścieżki audio i połączone strumienie.

Strumieniowanie wideo przez serwer

Czasami nie możesz udostępnić bezpośredniego linku użytkownikowi (na przykład, aby nie ujawniać IP swojego serwera lub ominąć ograniczenia). Biblioteka ma wbudowany YouTubeStreamer, który pozwala przekierować strumień przez Twoje backend.

Czasami nie możesz udostępnić bezpośredniego linku użytkownikowi (na przykład aby nie ujawniać IP serwera lub ominąć ograniczenia). Biblioteka ma wbudowany YouTubeStreamer, który pozwala przekierować strumień przez Twój backend.

Praca z ograniczeniami i ciasteczkami

YouTube nie lubi automatyzacji. Jeśli film ma ograniczenia wiekowe lub jest dostępny tylko dla zalogowanych użytkowników, zwykłe żądanie zwróci błąd. Biblioteka pozwala podać plik ciasteczek wyeksportowany z przeglądarki. To "hackowate", ale działające rozwiązanie, aby serwis myślał, że żądanie pochodzi od prawdziwej osoby.

Przy okazji, jest nawet metoda consentCookies(), która programowo klika przycisk "Akceptuj" w europejskich banerach ciasteczek. Mała rzecz, ale oszczędza czas na debugowanie.

Jak to działa pod maską

Zamiast parsować stronę wyrażeniami regularnymi (co jest zawodne), biblioteka próbuje naśladować zachowanie klienta. Parsuje wewnętrzne struktury danych YouTube, znajduje sygnatury i dekoduje linki. Jeśli jesteś ciekaw, jak dokładnie działa inżynieria wsteczna protokołu YouTube, autor zostawił w README świetną kolekcję linków do artykułów i kodu źródłowego innych parserów.

Praktyczne przypadki użycia

Gdzie to naprawdę może się przydać:

  1. Boty Telegram. Jeśli piszesz bota do pobierania filmów, biblioteka PHP pozwala uniknąć tworzenia mikrousług w Pythonie.
  2. Usługi podglądu. Gdy potrzebujesz szybko pobrać metadane lub zrzut ekranu filmu bez używania ciężkiego i limitowanego API YouTube.
  3. Archiwizacja treści. Tworzenie lokalnych kopii ważnych filmów do wewnętrznych potrzeb firmy.

Czy warto używać

Projekt wygląda na aktywny: testy przechodzą, commity pojawiają się regularnie (co jest kluczowe dla narzędzi takich jak to, ponieważ YouTube ciągle zmienia swoje znaczniki).

Jeśli chodzi o wady — aktualnie występuje problem z prędkością pobierania. YouTube często throttluje żądania do 100 kbps, jeśli wydają się podejrzane. Autor wie o tym i ma to na liście zadań. Ponadto nie ma jeszcze wbudowanego łączenia wideo i audio przez ffmpeg, więc jeśli potrzebujesz 4K (gdzie audio i wideo zawsze przychodzą osobno), będziesz musiał napisać tę logikę sam.

Jeśli potrzebujesz prostego i bezpośredniego rozwiązania PHP bez dodatkowego narzutu, youtube- down- loader to świetny kandydat do Twojego composer.json.

Powiązane projekty