android youtube download url 403 forbidden

Są filmy, których nie można pobrać.

Otrzymałem URL do pobrania używając tego

http://www.youtube.com/get_video_info?video_id=itGNQbJwRSk

Czy jest ktoś, dlaczego poniżej url nie jest dostępny do pobrania?

Całkowity url:

http://r1---sn-a5m7lnek.googlevideo.com/videoplayback?expire=1391267516&ms=au&source=youtube&sver=3&upn=OzZzFV_-2o4&id=8ad18d41b2704529&itag=22&mt=1391243224&ipbits=0&ratebypass=yes&fexp=935622%2C914924%2C926515%2C916623%2C936910%2C936913&sparams=gcr%2Cid%2Cip%2Cipbits%2Citag%2Cratebypass%2Csource%2Cupn%2Cexpire&mv=m&ip=183.101.166.55&key=yt5&gcr=kr&signature=F303D0C863C27A6A46124A09E40F308BB67181E013.3FA3E17460DDF6ECA004D9E48B1356849534EBFFFF

Oddzielony adres url z każdym param:

http://r1---sn-a5m7lnek.googlevideo.com/videoplayback?

expire=1391267516&

ms=au&

source=youtube&

sver=3&

upn=OzZzFV_-2o4&

id=8ad18d41b2704529&

itag=22&

mt=1391243224&

ipbits=0&

ratebypass=yes&

fexp=935622%2C914924%2C926515%2C916623%2C936910%2C936913&

sparams=gcr%2Cid%2Cip%2Cipbits%2Citag%2Cratebypass%2Csource%2Cupn%2Cexpire&

mv=m&

ip=183.101.166.55&

key=yt5&

gcr=kr&

signature=F303D0C863C27A6A46124A09E40F308BB67181E013.3FA3E17460DDF6ECA004D9E48B1356849534EBFFFF

I użyłem poniższych kodów w open stream

    u = new URL(url);
    HttpURLConnection huc = (HttpURLConnection)u.openConnection();//to know the size of video
    huc.setRequestProperty("User-Agent", "Mozilla/5.0 (Macintosh; Intel Mac OS X 10_9_1) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/32.0.1700.102 Safari/537.36");
    huc.setRequestProperty("Accept","*/*");
    huc.setRequestMethod("GET");
    huc.setDoOutput(false);
    int size = huc.getContentLength();      
    int status = huc.getResponseCode();
    Log.e("download", status+ huc.getResponseMessage());
    is = new BufferedInputStream(huc.getInputStream());

Ale zwraca status = 403, Rozmiar = -1. Nie mogłem znaleźć nic, co mogłoby pomóc.

Czy ktoś ma jakiś pomysł?
Author: yountae.kang, 2014-02-01

4 answers

Ten film używa szyfru signatrue, jak widać w informacji zwróconej przez http://www.youtube.com/get_video_info?video_id=itGNQbJwRSk ma

'use_cipher_signature=True'

Aby pobrać tego typu wideo, najpierw musisz odkodować jego podpis. Algorytm dekodowania jest obecny w pliku odtwarzacza (HTML5player lub Flash player)

Po dekodowaniu musisz użyć tego samego adresu IP, aby pobrać wideo, z którego pobrałeś wszystkie informacje. (Możesz ominąć to samo ograniczenie IP using Proxy)

Lepiej użyć zeskrobać stronę tego konkretnego filmu i poszukać ;ytplayer.config = {(.*?)};. Zawiera wszystkie wymagane informacje.

Jeśli nie chcesz zeskrobywać, możesz użyć poniższej metody, aby uzyskać obiekt JSON

https://www.youtube.com/watch?v=<Video-ID>&spf=prefetch

Proszę sprawdzić ten API dla łatwego rozwiązania: CipherAPI

Inne fajne API: YTstream API

 12
Author: Akhilesh,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2014-11-11 20:19:40

W skrócie: https://github.com/lure/YoutubeGrabber

Długa historia: Każda strona wideo youtube zawiera blok js, który inicjalizuje odtwarzacz html5. Oczywiście jest też aa flash player, ale js one jest łatwiejszy do zrozumienia.

Strumienie znajdujące się w dwóch paramach: url_encoded_fmt_stream_map dla wideo+audio i adaptive_fmts dla oddzielnych strumieni wideo lub audio. Każdy link składa się z dwóch części let ' s call it:

  1. wszystko, co się dzieje przed url=https: i
  2. Wszystko od tego punktu do , (przecinek), który oddziela strumienie.

Co powinieneś wiedzieć o inicjalizacji bloku to: niektóre paramy mogą pojawić się dwa razy i musisz zachować tylko jedną kopię w żądaniu. Nie możesz przewidzieć, które paramy mogą zostać wycofane, więc spróbuj uwzględnić wszystko, co znalazłeś w" surowym " linku. Szczególną częścią tego wszystkiego jest podpis, który jest wymagany przez backendy. Uważaj, że podpis może pojawić się w pierwszej lub drugiej części link.

Istnieją 3 rodzaje podpisów w bieżącym czasie:

  • signature - ten jest prosty i nie wymaga rozszyfrowania, nie wymaga obsługi.
  • sig - zaszyfrowane
  • s - zaszyfrowane

Mając te bloki, gracz powinien przygotować każdy link i zażądać zaplecza dla wybranego strumienia. Odbywa się to poprzez połączenie wszystkich istniejących param z wyłączeniem duplikatów i dołączenie przygotowanego podpisu.

Podczas gdy można dokładnie znaleźć wszystkich możliwych graczy wersja ta prawdopodobnie nie jest najlepszym rozwiązaniem. Wydaje się lepiej pobrać odtwarzacz z aplikacji i wyodrębnić z niego dokładną funkcję dekodowania. To podejście będzie działać z każdej strony wideo youtube.

Pomimo twojej decyzji, nadal potrzebujesz tej funkcji. W większości przypadków funkcja ta może być znaleziona z tym RegEx

set\("signature",\s*(?:([^(]*).*)\);

Użyj dowolnego narzędzia do formatowania, aby odczytać źródło. Przekonasz się, że główna funkcja używa jednego dodatku, więc powinieneś go też wyodrębnić. Potem jest dość łatwo zaimplementować funkcję w Javie lub (co wolę lepiej) wyodrębnić funkcję rozszyfrowania i zachować ją wokół.

Kroki w skrócie: 1. ekstrakt url_encoded_fmt_stream_map i adaptive_fmts 2. podziel przez , 3. Znajdź funkcję rozszyfrowania w odtwarzaczu i zaimplementuj ją w wybranym języku lub wyodrębnij i eval.

Na przykład, tutaj jest funkcja wyodrębniona z http://s.ytimg.com/yts/jsbin/html5player-new-en_US-vflhlPTtB/html5player-new.js

var fs = {
    Q2: function (a, b) {
        a.splice(0, b)
    }, cK: function (a) {
        a.reverse()
    }, yy: function (a, b) {
        var c = a[0];
        a[0] = a[b % a.length];
        a[b] = c
    }
};
function gs(a) {
    a = a.split("");
    fs.yy(a, 40);
    fs.Q2(a, 3);
    fs.yy(a, 53);
    fs.yy(a, 11);
    fs.Q2(a, 3);
    fs.cK(a, 8);
    fs.Q2(a, 3);
    fs.yy(a, 16);
    fs.cK(a, 75);
    return a.join("")
};
 3
Author: Observer,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2015-09-14 08:45:10

Ja również szukać na tego samego rodzaju rzeczy i znaleźć kilka przydatnych linków, na niektórych filmach nie są tak dobre, ale mam nadzieję, że po debugowaniu lub zobaczyć kod można łatwo zrozumieć, jak one działajd

Co rozumiemy:

1 - Ten kod do pobrania oglądaj Url z linku, który jest podstawowym metadanych wideo 2-Parsuj ten plik zgodnie z formatem (URL wideo , Jakość ) 3-Odszyfruj URL

Http://www.codeproject.com/Tips/323771/YouTube-Downloader-Using-Csharp-NET https://github.com/flagbug/YoutubeExtractor

 1
Author: user3269770,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2014-02-10 08:56:29

Nie można pobierać filmów z youtube. To nielegalne. Możesz korzystać tylko z usług odtwarzania.

Sekcja 4c użytkownik zgadza się nie uzyskiwać dostępu do treści za pomocą technologii lub środków innych niż strony odtwarzania wideo w samej usłudze, wbudowanego odtwarzacza lub innych wyraźnie upoważnionych środków, które YouTube może wyznaczyć.

 1
Author: Naveen Prince,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2015-05-17 02:34:50