[PHP]Pobieranie pliku + header + youtube

Odpowiedz Nowy wątek
2009-05-11 18:24

Rejestracja: 16 lat temu

Ostatnio: 2 lata temu

0

Witam, staram sie pobrac plik z youtube, splodzilem cos takiego :

header('Accept-Ranges: bytes', true);
header('Cache-control: private', true);
header('Pragma: private', true);
header('Content-type: video/flv', true);
header('Content-Length: '.$size, true);
header('Content-Disposition: inline; filename="'.$title.'.flv"', true);
@readfile($location);

przy czym $size - rozmiar pliku, pobierany z nagłówków
$location - bezpośredni adres do pliku .flv

Kod ten działa na Operze i FF 3. Natomiast w Chrome i IE7 skrypt ściąga pliki 0kb.

Stąd moje pytanie - co robie źle ? o_O

próbowałem modyfikować kod na np.

header("Cache-Control: private,max-age=3600");
header("Content-Description: File Transfer");

header("Content-Type: video/flv");
header('Content-Disposition: attachment; filename="'.$title.'.flv"',true);

header("Content-Type: application/force-download");
header("Content-Type: application/octet-stream");
header("Content-Transfer-Encoding: binary");
header('Content-Length: '. $size);
@readfile($location);

jednak to też nic nie daje, nadal działa tylko w Operze i FF, a IE7 / chrom zasysają pliki 0kb

Skrypty testuję na localhost, jednak po wrzuceniu na serwer nadal to samo - pliki 0kb w ie7/chrome :/

Pozostało 580 znaków

2009-05-11 18:52

Rejestracja: 12 lat temu

Ostatnio: 8 miesięcy temu

0

Zarzuć zmienne jakie podstawiasz pod header.


Women were the reason I became a monk - and, ah, the reason I switched back...

Pozostało 580 znaków

2009-05-11 19:11

Rejestracja: 16 lat temu

Ostatnio: 2 lata temu

0

Poprzednio wstawiałem pod location wstawiałem :
http://www.youtube.com/get_video?fs=1&fexp=903900%2C20291&fmt_map=34%2F0%2F9%2F0%2F115%2C5%2F0%2F7%2F0%2F0&video_id=9JG6sue8ZxU&l=204&sk=Z-DV2ZucN5XnP24gqGT6yyDREJTsTXtwC&is_doubleclick_tracked=1&vq=None&t=vjVQa1PpcFPjVrs7c6KEBxQTytYEMQDShz8tZsmr-d0%3D&hl=pl&plid=AARppgLvBQEY_xcO&keywords=%25C5%259Amieszne%252Cwypadki&cr=PL&title=Ĺmieszne wypadki i scenki

teraz wstawiam bezpośredni adres do pliku
http://v17.lscache7.googlevideo.com/videoplayback?sparams=id%2Cexpire%2Cip%2Cipbits%2Citag&itag=5&ip=89.228.206.31&signature=134ADF5B3B93FA8F88A816AF581F12178C734041.87FDDC3AC634796E0CD26358D752622859229772&sver=3&expire=1242083242&key=yt1&ipbits=0&id=f491bab2e7bc6715

$size - pobieram same nagłówki z powyższego adresu, preg_match -> dostaję rozmiar pliku

obydwa adresy uzyskuję poprzez kombinację z cURL -> to samo można uzyskąć korzystając ze sniffera.
Adresy są poprawne, problem jest w tym, że kod nie działa w IE7/Chrome :/ Przypuszczam, że to coś z nagłówkami, i rożną ich interpretacją przez przeglądarki.

Pozostało 580 znaków

2009-05-11 23:32

Rejestracja: 16 lat temu

Ostatnio: 2 lata temu

0

pomoze ktos ? :>

Pozostało 580 znaków

2009-05-12 08:45

Rejestracja: 12 lat temu

Ostatnio: 8 miesięcy temu

0

Hmm... Spróbuj zrobić czyste readfile() bez headerów i sprawdź czy output jest identyczny we wszystkich przeglądarkach.


Women were the reason I became a monk - and, ah, the reason I switched back...

Pozostało 580 znaków

2009-05-12 10:31

Rejestracja: 16 lat temu

Ostatnio: 2 lata temu

0

czy co mam dokładnie zrobić ? bo gdy daje readfile(adres) bez header'ów to w każdej przeglądarce plik jest ładowany jako tekst.

// kupilem skrypt na allegro do pobierania plikow z youtube za 1zl =] Nie wiem jakim cudem, ale w demo ktore udostepnia sprzedajacy, wszystko działa poprawnie. Wrzucam skrypt na localhost i qpa, znowu w IE7/chrome pobiera pliki 0kb. Na shared'a nie wrzuce bo nie mam dostepu do allow_url_fopen (skrypt korzysta z file_get_contents i get_meta_tags), ale po zesnifowaniu wszystko w w/w skrypcie jak moim kodzie jest takie samo :/

Tak wiec o co chodzi :/ Przeciez chce tylko skorzystac z cURL zamiast file_get_contents i innych tego typu ;/

Nawet kod prawie identyczny :/

                header('Accept-Ranges: bytes', true);
                header('Cache-control: private', true);
                header('Pragma: private', true);
                header('Content-type: video/flv', true);
                header('Content-Length: '.$head['Content-Length'], true);
                header('Content-Disposition: inline; filename="'.$url[0].'.flv"', true);
                @readfile($url[1]);

Pozostało 580 znaków

2009-05-12 16:18

Rejestracja: 12 lat temu

Ostatnio: 8 miesięcy temu

0
//Wyłączamy kompresję otputu, inaczej nagłówki Content-Disposition są ignorowane przez IE
if(ini_get('zlib.output_compression')) ini_set('zlib.output_compression', 'Off');

//header("Cache-Control: private, max-age=3600");
//header("Content-Description: File Transfer"); #Eetam

header("Content-Type: video/flv");
header('Content-Disposition: attachment; filename="'.$title.'.flv"',true);

//header("Content-Type: application/force-download"); #Się zdecyduj
//header("Content-Type: application/octet-stream");
//header("Content-Transfer-Encoding: binary");
header('Content-Length: '. $size);
@readfile($location);

Spróbuj teraz. Spróbuj stopniowo komentować nagłówki i pójdzie.


Women were the reason I became a monk - and, ah, the reason I switched back...

Pozostało 580 znaków

2009-05-12 21:48

Rejestracja: 16 lat temu

Ostatnio: 2 lata temu

0

Dzięki wielkie za pomoc. Poprawiłem troszeczkę adres do pliku, tzn. należało usunąć końcówkę z tytyułem. Dałem twoje nagłówki i ruszyło na IE, nie mniej jednak nadal nie chce działać na Chrome - jakoś przeżyję, choć nie ukrywam, że strasznie mnie to męczy :/

// cholera.... teraz po wrzuceniu na serwer w FF ma problemy ;/ yh...

Pozostało 580 znaków

2009-05-14 08:03

Rejestracja: 16 lat temu

Ostatnio: 2 lata temu

0

Dobra, ubłagałem admina, żeby włączyć mi allow_url_open i wszystko działa. Dla potomków wrzucam kod.

 public function downloadYT($link)
 {
 preg_match('/v=(.*)/',$link,$kod);
 if(strpos($kod[1],"&") !== false)
 { $id = substr($kod[1],0,strpos($kod[1],"&"));
 }  else { $id = $kod[1];}

  $link = "http://www.youtube.com/watch?v=".$id;

  $html = file_get_contents($link);

preg_match('/<title>(.*)</',$html,$kod);
$title = $kod[1];
$title = substr($title,10,strlen($title));

preg_match("/var fullscreenUrl = '(.*?)';/is", $html, $kod);
$link=str_replace('/','',$kod[1]);
$link=str_replace("watch_fullscreen?",'',$link);
$link = preg_replace('/&title(.*)/', '', $link);  
$link = "http://www.youtube.com/get_video?".$link;

$head = get_headers($link);
 $location = $head[10];
 $location = substr($location,10,strlen($location));
 $size = $head[17];
 $size = substr($size,16,strlen($size));

if(ini_get('zlib.output_compression')) ini_set('zlib.output_compression', 'Off');

header("Content-Type: video/flv");
header('Content-Disposition: attachment; filename="'.$title.'.flv"',true);
header('Content-Length: '. $size);
readfile($location);

 }

Pozostało 580 znaków

2009-05-14 14:04

Rejestracja: 12 lat temu

Ostatnio: 8 miesięcy temu

0

To nie miałeś allow_urlfopen i testowałeś ten skrypt? -- To było do przewidzenia że nie zadziała.


Women were the reason I became a monk - and, ah, the reason I switched back...

Pozostało 580 znaków

2009-05-14 15:35

Rejestracja: 16 lat temu

Ostatnio: 2 lata temu

0
mr.hex napisał(a)

Na shared'a nie wrzuce bo nie mam dostepu do allow_url_fopen (skrypt korzysta z file_get_contents i get_meta_tags)

Pisałem przecież, że nie miałem. Nie mniej jednak skrypt na operze / FF działał sprawnie, wszystko co było potrzebne (nagłówki, kod strony) pobierałem przez cURL. Nie chciało działać tylko(aż) na IE / Chrome.

Pozostało 580 znaków

Odpowiedz

1 użytkowników online, w tym zalogowanych: 0, gości: 1, botów: 0