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ł?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
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:
- wszystko, co się dzieje przed
url=https:
i - 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("")
};
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
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ć.
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