vandamp
Erfahrenes Mitglied
Hallo,
habe da ein kleines Problem welches mich quält.
Ich versuche die Dateigröße von YouTube-Videos zu ermitteln.
Habe es mittlerweile schon auf ein paar arten versucht, leider klappt es nicht bekommen entweder -1 oder eine Fehlermeldung zurück .
variante 1(die billige)
Ergibt leider einen stat failed error.
Variante 2(curl)
hier kommt zwar ein großes Array, aber download_content_length"] führt leider zu float(-1)
Variante 3(die aufwändige)
Google bringt leider auch keine Lösung, die Youtube-api liefert auch nicht die Dateigröße.
Es muss irgendwie funktionieren, wenn man sich so video converter Seiten anschaut, dort ist ja immer eine Fortschrittsanzeige, um diese zu erstellen wird doch die Dateigröße benötigt.
Vielleicht hat sich ja hier schon mal jemand damit beschäftigt wär echt nice.
habe da ein kleines Problem welches mich quält.
Ich versuche die Dateigröße von YouTube-Videos zu ermitteln.
Habe es mittlerweile schon auf ein paar arten versucht, leider klappt es nicht bekommen entweder -1 oder eine Fehlermeldung zurück .
variante 1(die billige)
PHP:
ini_set('user_agent', 'Mozilla/5.0 (Windows; U; Windows NT 5.1; en-US; rv:1.8.1.9) Gecko/20071025 Firefox/2.0.0.9');
echo filesize("http://v7.lscache7.c.youtube.com/videoplayback?ip=0.0.0.0&sparams=id%2Cexpire%2Cip%2Cipbits%2Citag%2Calgorithm%2Cburst%2Cfactor%2Coc%3AU0dYRVlSVl9FSkNNOF9RTFpB&fexp=906324%2C901801&algorithm=throttle-factor&itag=34&ipbits=0&burst=40&sver=3&expire=1290978000&key=yt1&signature=2C67A89B9040AC109D5352028D9D58C741A5FEC1.43AA29318C2FA5CF46D2A3E0916C8E1EE1E38341&factor=1.25&id=8568eb3135971f6f");
Variante 2(curl)
PHP:
$url = "http://v7.lscache7.c.youtube.com/videoplayback?ip=0.0.0.0&sparams=id%2Cexpire%2Cip%2Cipbits%2Citag%2Calgorithm%2Cburst%2Cfactor%2Coc%3AU0dYRVlTVl9FSkNNOF9RTVpJ&fexp=906324%2C901801&algorithm=throttle-factor&itag=34&ipbits=0&burst=40&sver=3&expire=1290988800&key=yt1&signature=92CF4E0DB03330098833631BFFEB1656C0061D0A.A3274FEECBDC66FD14BDA5E53FBAB8FF45B3989C&factor=1.25&id=8568eb3135971f6f&";
$ch = curl_init();
curl_setopt($ch, CURLOPT_URL, $url);
curl_setopt($ch, CURLOPT_USERAGENT, "Mozilla/5.0 (Windows; U; Windows NT 5.1; en-US; rv:1.8.1.11) Gecko/20071127 Firefox/2.0.0.11");
curl_setopt($ch, CURLOPT_RETURNTRANSFER, true);
curl_setopt($ch, CURLOPT_NOBODY, true);
curl_setopt($ch, CURLOPT_HEADER, 1);
curl_setopt($ch, CURLOPT_FOLLOWLOCATION, 1);
curl_setopt($ch, CURLOPT_COOKIEFILE, COOKIE);
curl_setopt($ch, CURLOPT_COOKIEJAR, COOKIE);
$chGetSizeInfo = curl_getinfo($ch);
curl_close($ch);
var_dump($chGetSizeInfo);
Variante 3(die aufwändige)
PHP:
$test =remote_file_size("http://v7.lscache7.c.youtube.com/videoplayback?ip=0.0.0.0&sparams=id%2Cexpire%2Cip%2Cipbits%2Citag%2Calgorithm%2Cburst%2Cfactor%2Coc%3AU0dYRVlSVl9FSkNNOF9RTFpB&fexp=906324%2C901801&algorithm=throttle-factor&itag=34&ipbits=0&burst=40&sver=3&expire=1290978000&key=yt1&signature=2C67A89B9040AC109D5352028D9D58C741A5FEC1.43AA29318C2FA5CF46D2A3E0916C8E1EE1E38341&factor=1.25&id=8568eb3135971f6f");
echo '<br> test '.$test.'<br><br>';
function remote_file_size ($url){
$head = "";
$url_p = parse_url($url);
$host = $url_p["host"];
if(!preg_match("/[0-9]*\.[0-9]*\.[0-9]*\.[0-9]*/",$host)){
// a domain name was given, not an IP
$ip=gethostbyname($host);
if(!preg_match("/[0-9]*\.[0-9]*\.[0-9]*\.[0-9]*/",$ip)){
//domain could not be resolved
return -1;
}
}
$port = intval($url_p["port"]);
if(!$port) $port=80;
$path = $url_p["path"];
//echo "Getting " . $host . ":" . $port . $path . " ...";
$fp = fsockopen($host, $port, $errno, $errstr, 20);
if(!$fp) {
return false;
} else {
fputs($fp, "HEAD " . $url . " HTTP/1.1\r\n");
fputs($fp, "HOST: " . $host . "\r\n");
fputs($fp, "User-Agent: http://www.example.com/my_application\r\n");
fputs($fp, "Connection: close\r\n\r\n");
$headers = "";
while (!feof($fp)) {
$headers .= fgets ($fp, 128);
}
}
fclose ($fp);
//echo $errno .": " . $errstr . "<br />";
$return = -2;
$arr_headers = explode("\n", $headers);
// echo "HTTP headers for <a href='" . $url . "'>..." . substr($url,strlen($url)-20). "</a>:";
// echo "<div class='http_headers'>";
foreach($arr_headers as $header) {
// if (trim($header)) echo trim($header) . "<br />";
$s1 = "HTTP/1.1";
$s2 = "Content-Length: ";
$s3 = "Location: ";
if(substr(strtolower ($header), 0, strlen($s1)) == strtolower($s1)) $status = substr($header, strlen($s1));
if(substr(strtolower ($header), 0, strlen($s2)) == strtolower($s2)) $size = substr($header, strlen($s2));
if(substr(strtolower ($header), 0, strlen($s3)) == strtolower($s3)) $newurl = substr($header, strlen($s3));
}
// echo "</div>";
if(intval($size) > 0) {
$return=intval($size);
} else {
$return=$status;
}
// echo intval($status) .": [" . $newurl . "]<br />";
if (intval($status)==302 && strlen($newurl) > 0) {
// 302 redirect: get HTTP HEAD of new URL
$return=remote_file_size($newurl);
}
return $return;
}
Google bringt leider auch keine Lösung, die Youtube-api liefert auch nicht die Dateigröße.
Es muss irgendwie funktionieren, wenn man sich so video converter Seiten anschaut, dort ist ja immer eine Fortschrittsanzeige, um diese zu erstellen wird doch die Dateigröße benötigt.
Vielleicht hat sich ja hier schon mal jemand damit beschäftigt wär echt nice.