views:

60

answers:

6

I've used a simple file_get_contents function but that didn't get the actual contents (output) of that..

I could not figure the error!!!

Code:

<?php 

// $url = $_GET['url'];

// $flv_http_path = urlencode($url);

 $flv_http_path = 'http://r12.bhartibb-maa1.c.youtube.com/videoplayback?ip=0.0.0.0&amp;sparams=id%2Cexpire%2Cip%2Cipbits%2Citag%2Calgorithm%2Cburst%2Cfactor%2Coc%3AU0dXSlBSUl9FSkNNN19ITFZB&amp;algorithm=throttle-factor&amp;itag=34&amp;ipbits=0&amp;burst=40&amp;sver=3&amp;expire=1285074000&amp;key=yt1&amp;signature=3E1E4994130745C392FA479F6ACCE5F40E703A2C.A87325A1DCB178B04FD89A9DEEE811CDCB08157C&amp;factor=1.25&amp;id=8b2fd4fd9ac2f09f&amp;st=lc';

 echo "----$flv_http_path------";


 $data = file_get_contents($flv_http_path);

 echo "$data";

 if($data)
    echo "data is avail";
 else
    echo "data not available";

// $new_flv_path = dirname(_FILE_).'/flvs/sample.flv' ;

 $new_flv_path = '/home/public_html/temp/sample.flv' ;

 if(file_put_contents($new_flv_path, $data))
    return $new_flv_path ;
 else
 {
    echo "else part ";
    return false;
 }

?>

I got that url from the response headers of the youtube video

and the headers which i got is

http://v3.lscache1.c.youtube.com/videoplayback?ip=0.0.0.0&amp;sparams=id%2Cexpire%2Cip%2Cipbits%2Citag%2Calgorithm%2Cburst%2Cfactor%2Coc%3AU0dXSlBTVl9FSkNNN19ITVpF&amp;algorithm=throttle-factor&amp;itag=34&amp;ipbits=0&amp;burst=40&amp;sver=3&amp;expire=1285088400&amp;key=yt1&amp;signature=536A81F10AA43A4E015BB05FA182A9A966047C3C.C22269E2E1ECFC2C2DE7A8A45BA2C3DF7CF1EC08&amp;factor=1.25&amp;id=fd61d32bbbd1be5e&amp;

GET /videoplayback?ip=0.0.0.0&sparams=id%2Cexpire%2Cip%2Cipbits%2Citag%2Calgorithm%2Cburst%2Cfactor%2Coc%3AU0dXSlBTVl9FSkNNN19ITVpF&algorithm=throttle-factor&itag=34&ipbits=0&burst=40&sver=3&expire=1285088400&key=yt1&signature=536A81F10AA43A4E015BB05FA182A9A966047C3C.C22269E2E1ECFC2C2DE7A8A45BA2C3DF7CF1EC08&factor=1.25&id=fd61d32bbbd1be5e& HTTP/1.1
Host: v3.lscache1.c.youtube.com
User-Agent: Mozilla/5.0 (Windows; U; Windows NT 5.1; en-US; rv:1.9.1) Gecko/20090616 Firefox/3.5
Accept: text/html,application/xhtml+xml,application/xml;q=0.9,*/*;q=0.8
Accept-Language: en-us,en;q=0.5
Accept-Encoding: gzip,deflate
Accept-Charset: ISO-8859-1,utf-8;q=0.7,*;q=0.7
Keep-Alive: 300
Connection: keep-alive
Cookie: VISITOR_INFO1_LIVE=9CH-GUrsSEQ; __utma=27069237.1455305642.1275034254.1279868001.1280568792.6; __utmz=27069237.1279868001.5.2.utmcsr=google.com|utmccn=(referral)|utmcmd=referral|utmcct=/landing/youtube/lifeinaday/; watched_video_id_list_kvijayhari=7b1d7ce3852b9aca07a985813b83aaa6WxMAAABzCwAAADFuNzRnSExwU0M4cwsAAAB2ajgxNXlQNDFMQXMLAAAARWNjZ0lLdHVDM1lzCwAAAHFHZFo5elhoQ0ZvcwsAAAB0WXMwTXhvbTRjSXMLAAAAYUdBdDZwNGh0c2NzCwAAAGR2V25wMjdBSGZvcwsAAABtNDBhbG1SQzNzSXMLAAAANjhVT1BhTUtwOTBzCwAAADZnaFUxWDBqdVM4cwsAAABiRy0xYTRsUnlEMHMLAAAAWjh5OFFDRFNUQ29zCwAAADY0T0w3NzhBeUlFcwsAAABzQkl1OWpnSWtwQXMLAAAASllYM08wWEEteWdzCwAAAF95WGxpc0g4dkF3cwsAAABzcXZCSXdDMWxtWXMLAAAAaEMzd09EU0U5MHdzCwAAAGZaODhxaHduTVow; auto_translation=b901c47ed36700682e23d64062529856cwQAAAB0cnVl; PREF=f1=50000000&f2=2000&emt=iceberg&ftuc=32&ems=hd720&HIDDEN_MASTHEAD_ID=brO_JIa6RTI; use_hitbox=72c46ff6cbcdb7c5585c36411b6b334edAEAAAAw; GEO=489e10e70a42c0dfed7513e1895ffe1bcwsAAAAzSU56spxTTJhEAw==; watched_video_id_list=2aa4a241cbdc35137f13b3513ea3e653WwQAAABzCwAAAF9XSFRLN3ZSdmw0cwsAAABpeV9VX1pyQzhKOHMLAAAAd3ZsTUFKLVU2SEVzCwAAAENaQmpoVGQ0WjlN

HTTP/1.0 200 OK
Last-Modified: Sun, 20 Jun 2010 03:59:10 GMT
Content-Type: video/x-flv
Date: Tue, 21 Sep 2010 10:05:34 GMT
Expires: Tue, 21 Sep 2010 16:55:00 GMT
Cache-Control: public, max-age=24566
Content-Length: 4077907
Accept-Ranges: bytes
X-Content-Type-Options: nosniff
Server: gvs 1.0
X-Cache: MISS from localhost.localdomain
X-Cache-Lookup: MISS from localhost.localdomain:3128
Via: 1.0 localhost.localdomain:3128 (squid/2.6.STABLE6)
Connection: keep-alive
+1  A: 

Check your URL.

When I put your url in browser it gives nothing so file_get_contents returns an empty string.

You need to check the output of file_get_contents as:

if($data !== false)

instead of

if($data)
codaddict
I tried it but no output.. And when i try that url in browser its popping up a window asking whether to save or open that file
kvijayhari
Additionally, you can look if allow_url_fopen is enabled. Alternatively you can try it by using cURL.
Prot0
+1  A: 

I also get a HTTP Response 500. In order to crawl Youtube, you probably would have to spoof the User-Agent of the call and other measures to prevent Youtube from identifying you as a crawler.

bouke
A: 

I get a HTTP 403 at the follwoing Location:

http://r12.bhartibb-maa1.c.youtube.com/videoplayback?ip=0.0.0.0&amp;sparams=id,expire,ip,ipbits,itag,algorithm,burst,factor,oc:U0dXSlBSUl9FSkNNN19ITFZB&amp;algorithm=throttle-factor&amp;itag=34&amp;ipbits=0&amp;burst=40&amp;sver=3&amp;expire=1285074000&amp;key=yt1&amp;signature=3E1E4994130745C392FA479F6ACCE5F40E703A2C.A87325A1DCB178B04FD89A9DEEE811CDCB08157C&amp;factor=1.25&amp;id=8b2fd4fd9ac2f09f&amp;st=lc

Response headers:

Content-Type:text/plain

Date:Tue, 21 Sep 2010 09:59:13 GMT

Proxy-Connection:close

Server:gvs 1.0

Via:1.0 [email protected]:8080 (squid/2.6.STABLE19), 1.0 wcsproxy.XXXX.org.uk:8080 (squid/2.6.STABLE19)

X-Cache:MISS from [email protected], MISS from wcsproxy.XXX.org.uk

X-Content-Type-Options:nosniff

RobertPitt
A: 

Well, when I tried to load the URL you refer to in $flv_http_path I got:

HTTP/1.1 403 Forbidden
Content-Type: text/plain
Connection: close
X-Content-Type-Options: nosniff
Date: Tue, 21 Sep 2010 09:57:19 GMT
Server: gvs 1.0

In return.

That should give you a clue :)

If that was not the acutal file you were trying to open, and you're not actually trying to scrape youtube you should try wrapping the url in urlencode() edit: But the url is already urlencoded (duh!)

"If you're opening a URI with special characters, such as spaces, you need to encode the URI with urlencode()." -- http://www.php.net/manual/en/function.file-get-contents.php

thomasmalt
A: 

The link is empty. Fire the link in your browser and check the sourcecode. there is no data.

ESCOBAR
A: 

It's youtubes way of preventing you from grabbing their flv files automatically.

You can't get the file from your server because the download link (which you got from your browser, or how did you find the flv link) is locked to your browser.

Which is why when someone other than you try to call the link we all get the 403 HTTP forbidden, even with a spoofed user-agent.

Try to use cURL and show the headers, you'll see what I mean.

Birk
So if i use the cURL how can match that exact headers from a list of live headers that's sent by youtube..
kvijayhari
Even if you matched the exact headers it wouldn't work. Because that link you've gotten from your live headers is locked to your IP, and not the servers. I just suggested cURL because that way you could see the 403 message from youtube on your server call. (am I making any sense?)
Birk