Foros del Web » Programando para Internet » PHP »

Ayuda añadiendo parametro a php (creo que es muy fácil)

Estas en el tema de Ayuda añadiendo parametro a php (creo que es muy fácil) en el foro de PHP en Foros del Web. Hola, Ante todo decir que no tengo ni idea de php, así que lo siento si me expreso mal en las definiciones Tengo varios archivos ...
  #1 (permalink)  
Antiguo 02/03/2010, 15:53
 
Fecha de Ingreso: marzo-2010
Mensajes: 10
Antigüedad: 9 años, 11 meses
Puntos: 0
Ayuda añadiendo parametro a php (creo que es muy fácil)

Hola,

Ante todo decir que no tengo ni idea de php, así que lo siento si me expreso mal en las definiciones
Tengo varios archivos php que cargándolos desde la web y añadiendole un dato me descarga videos de utube en HD a 720p (fmt=22). El problema es que quiero añadirle el parametro fmt=18 para que en caso de que el vídeo no esté en fmt=22 me lo descarge en fmt=18, pero no sé como hacerlo...
Uno de los archivos que tengo es este:
Código PHP:
<?php

// call with: http://www.mydomain.com/path/YouTube_Multi-Format.php?v=K2_U1kbIcJQ&fmt=18
// JWMP code:
// 'file': encodeURIComponent('YouTube_Multi-Format.php?v=K2_U1kbIcJQ&fmt=18'),
// 'type': 'video',
// fmt=6 HQ FLV 480x360
// fmt=18 HQ MP4 480x270
// fmt=22 HQ MP4 1280x720
// fmt=35 HQ MP4 640x360

$videoid=$_GET["v"];
//$videoid = (isset($_GET['videoid'])) ? strval($_GET['videoid']) : '8bV0XSwnPkI';
//$fmt = (isset($_GET['fmt'])) ? intval($_GET['fmt']) : '';
$fmt 22;
parse_str(file_get_contents("http://youtube.com/get_video_info?video_id=$videoid"));
//$uri = "http://www.youtube.com/get_video.php?video_id=$videoid&t=$token";
$uri "http://www.youtube.com/get_video.php?video_id=$videoid&t=$token&fmt=$fmt";
//...debug

//$headers = get_headers($uri);
//print "<pre>\n";
//print " uri: $uri\n" ;
//print "videoid: $videoid\n";
//print " token: $token\n";
//print " fmt: $fmt\nheaders: ";
//print_r($headers);
//print "\n</pre>\n";
//exit;

//...debug


function http_test_existance(
$url,
$timeout 10
) {
$timeout = (int)round($timeout/2+0.00000000001);
$return = array();

### 1 ###
$inf parse_url($url);

if (!isset(
$inf['scheme']) or $inf['scheme'] !== 'http') return array('status' => -1);
if (!isset(
$inf['host'])) return array('status' => -2);
$host $inf['host'];

if (!isset(
$inf['path'])) return array('status' => -3);
$path $inf['path'];
if (isset(
$inf['query'])) $path .= '?'.$inf['query'];

if (isset(
$inf['port'])) $port $inf['port'];
else 
$port 80;

### 2 ###
$pointer fsockopen($host$port$errno$errstr$timeout);
if (!
$pointer) return array('status' => -4'errstr' => $errstr'errno' => $errno);
socket_set_timeout($pointer$timeout);

### 3 ###
$head =
'HEAD '.$path.' HTTP/1.1'."\r\n".
'Host: '.$host."\r\n";

if (isset(
$inf['user']))
$head .= 'Authorization: Basic '.
base64_encode($inf['user'].':'.(isset($inf['pass']) ? $inf['pass'] : ''))."\r\n";
if (
func_num_args() > 2) {
for (
$i 2$i func_num_args(); $i++) {
$arg func_get_arg($i);
if (
strpos($arg':') !== false and
strpos($arg"\r") === false and
strpos($arg"\n") === false
) {
$head .= $arg."\r\n";
}
}
}
else 
$head .=
'User-Agent: Selflinkchecker 1.0 (http://aktuell.selfhtml.org/artikel/php/existenz/)'."\r\n";

$head .=
'Connection: close'."\r\n"."\r\n";

### 4 ###
fputs($pointer$head);

$response '';

$status socket_get_status($pointer);
while (!
$status['timed_out'] && !$status['eof']) {
$response .= fgets($pointer);
$status socket_get_status($pointer);
}
fclose($pointer);
if (
$status['timed_out']) {
return array(
'status' => -5'_request' => $head);
}

### 5 ###
$res str_replace("\r\n""\n"$response);
$res str_replace("\r""\n"$res);
$res str_replace("\t"' '$res);

$ares explode("\n"$res);
$first_line explode(' 'array_shift($ares), 3);

$return['status'] = trim($first_line[1]);
$return['reason'] = trim($first_line[2]);

foreach (
$ares as $line) {
$temp explode(':'$line2);
if (isset(
$temp[0]) and isset($temp[1])) {
$return[strtolower(trim($temp[0]))] = trim($temp[1]);
}
}

//$return['_response'] = $response;
//$return['_request'] = $head;






return $return;

}

$response=http_test_existance($uri);
$uri=$response["location"];

header("location: $uri");
exit;


?>
-Si abro la siguiente url (en firefox) me descarga el video en calidad fmt=22 , es decir a 720p:
http://estosesale.com/test2.php?v=lsPaYZ26Cw0 (lo que va trás el v= es el id del video de youtue)
-Pero sin embargo si pongo esto http://estosesale.com/test2.php?v=ljxUQ07NXB4c no descarga nada ya que ese video no está en fmt=22 sino fmt=18.
Por tanto se trata de hacer que si ese video no tiene fmt=22, lo coja en fmt=18.

Espero haberme exlicado bien y que me podáis ayudar... Gracias mil!
  #2 (permalink)  
Antiguo 03/03/2010, 03:44
Avatar de memoadian
Colaborador
 
Fecha de Ingreso: junio-2009
Ubicación: <?php echo 'México'?>
Mensajes: 3.696
Antigüedad: 10 años, 8 meses
Puntos: 641
Respuesta: Ayuda añadiendo parametro a php (creo que es muy fácil)

y si le cambias a tu codigo la parte que dice
$fmt = 22;
a
$fmt = 18;

???

podría funcionar.
  #3 (permalink)  
Antiguo 03/03/2010, 04:28
 
Fecha de Ingreso: marzo-2010
Mensajes: 10
Antigüedad: 9 años, 11 meses
Puntos: 0
Respuesta: Ayuda añadiendo parametro a php (creo que es muy fácil)

Hola y gracias por la respuesta,

Si hago eso coge el video que está en fmt=18. Yo lo que quiero es que coja el fmt=22, y en caso de que fmt=22 no exista para ese video pues que coja el fmt=18, pero no sé como meter eso ahí.

¿Se podría hacer algo así como si la siguiente línea no existe:
$uri = "http://www.youtube.com/get_video.php?video_id=$videoid&t=$token&fmt=22";
Que coga la esta?
$uri = "http://www.youtube.com/get_video.php?video_id=$videoid&t=$token&fmt=18";

AVISO: No tengo conocimeintos de php, estoy dando palos de ciego.

Saludos y gracias

Última edición por tubos; 03/03/2010 a las 04:42
  #4 (permalink)  
Antiguo 03/03/2010, 05:31
Avatar de xalupeao  
Fecha de Ingreso: mayo-2008
Ubicación: Santiago, Chile
Mensajes: 749
Antigüedad: 11 años, 9 meses
Puntos: 12
Respuesta: Ayuda añadiendo parametro a php (creo que es muy fácil)

podrias leer lo que te dice la web al no encontrar el video en fmt x... asi lees ese error y mandas un nuevo valor a fmt.
__________________
Hosting en Chile en Silverhost - La solución en Hosting en Chile.
  #5 (permalink)  
Antiguo 03/03/2010, 05:48
 
Fecha de Ingreso: marzo-2010
Mensajes: 10
Antigüedad: 9 años, 11 meses
Puntos: 0
Respuesta: Ayuda añadiendo parametro a php (creo que es muy fácil)

Hola,

Y como lo puedo leer. Yo simplemente pongo la siguiente url en firefox y como es obvio no me descarga el video porque no está en fmt=22:
http://estosesale.com/test2.php?v=ljxUQ07NXB4c
Pero no sale ningún error...
  #6 (permalink)  
Antiguo 03/03/2010, 07:24
Avatar de Eleazan  
Fecha de Ingreso: abril-2008
Ubicación: Ibiza
Mensajes: 1.879
Antigüedad: 11 años, 10 meses
Puntos: 326
Respuesta: Ayuda añadiendo parametro a php (creo que es muy fácil)

Código PHP:
$response=http_test_existance($uri);

if(
$response['status']==404) echo "No se encuentra en fmt=22 ;)";
else {
$uri=$response["location"];
header("location: $uri");
}
exit; 
Si no existe, devuelve 404, sino, creo q era 303 o aglo asi xD

EDIT:

Con un par de pequeños cambios, quedaría así:
Código PHP:
<?php


// call with: http://www.mydomain.com/path/YouTube_Multi-Format.php?v=K2_U1kbIcJQ&fmt=18
// JWMP code:
// 'file': encodeURIComponent('YouTube_Multi-Format.php?v=K2_U1kbIcJQ&fmt=18'),
// 'type': 'video',
// fmt=6 HQ FLV 480x360
// fmt=18 HQ MP4 480x270
// fmt=22 HQ MP4 1280x720
// fmt=35 HQ MP4 640x360

$videoid=$_GET["v"]; 
//$videoid = (isset($_GET['videoid'])) ? strval($_GET['videoid']) : '8bV0XSwnPkI';
//$fmt = (isset($_GET['fmt'])) ? intval($_GET['fmt']) : '';
$fmt 22;
parse_str(file_get_contents("http://youtube.com/get_video_info?video_id=$videoid"));
//$uri = "http://www.youtube.com/get_video.php?video_id=$videoid&t=$token";
$uri "http://www.youtube.com/get_video.php?video_id=$videoid&t=$token&fmt=";
//...debug

//$headers = get_headers($uri);
//print "<pre>\n";
//print " uri: $uri\n" ;
//print "videoid: $videoid\n";
//print " token: $token\n";
//print " fmt: $fmt\nheaders: ";
//print_r($headers);
//print "\n</pre>\n";
//exit;

//...debug


function http_test_existance(
$url,
$timeout 10
) {
$timeout = (int)round($timeout/2+0.00000000001);
$return = array();

### 1 ###
$inf parse_url($url);

if (!isset(
$inf['scheme']) or $inf['scheme'] !== 'http') return array('status' => -1);
if (!isset(
$inf['host'])) return array('status' => -2);
$host $inf['host'];

if (!isset(
$inf['path'])) return array('status' => -3);
$path $inf['path'];
if (isset(
$inf['query'])) $path .= '?'.$inf['query'];

if (isset(
$inf['port'])) $port $inf['port'];
else 
$port 80;

### 2 ###
$pointer fsockopen($host$port$errno$errstr$timeout);
if (!
$pointer) return array('status' => -4'errstr' => $errstr'errno' => $errno);
socket_set_timeout($pointer$timeout);

### 3 ###
$head =
'HEAD '.$path.' HTTP/1.1'."\r\n".
'Host: '.$host."\r\n";

if (isset(
$inf['user']))
$head .= 'Authorization: Basic '.
base64_encode($inf['user'].':'.(isset($inf['pass']) ? $inf['pass'] : ''))."\r\n";
if (
func_num_args() > 2) {
for (
$i 2$i func_num_args(); $i++) {
$arg func_get_arg($i);
if (
strpos($arg':') !== false and
strpos($arg"\r") === false and
strpos($arg"\n") === false
) {
$head .= $arg."\r\n";
}
}
}
else 
$head .=
'User-Agent: Selflinkchecker 1.0 (http://aktuell.selfhtml.org/artikel/php/existenz/)'."\r\n";

$head .=
'Connection: close'."\r\n"."\r\n";

### 4 ###
fputs($pointer$head);

$response '';

$status socket_get_status($pointer);
while (!
$status['timed_out'] && !$status['eof']) {
$response .= fgets($pointer);
$status socket_get_status($pointer);
}
fclose($pointer);
if (
$status['timed_out']) {
return array(
'status' => -5'_request' => $head);
}

### 5 ###
$res str_replace("\r\n""\n"$response);
$res str_replace("\r""\n"$res);
$res str_replace("\t"' '$res);

$ares explode("\n"$res);
$first_line explode(' 'array_shift($ares), 3);

$return['status'] = trim($first_line[1]);
$return['reason'] = trim($first_line[2]);

foreach (
$ares as $line) {
$temp explode(':'$line2);
if (isset(
$temp[0]) and isset($temp[1])) {
$return[strtolower(trim($temp[0]))] = trim($temp[1]);
}
}

//$return['_response'] = $response;
//$return['_request'] = $head;






return $return;

}

$response=http_test_existance($uri.$fmt);

if(
$response['status']==404) {
    
$fmt=18;
    
$response=http_test_existance($uri.$fmt);
    }
    
$uri=$response["location"];
print_r($response);
header("location: $uri");
exit;


?>
No lo he probado, pero creo q funcionará :)

Última edición por Eleazan; 03/03/2010 a las 07:31
  #7 (permalink)  
Antiguo 03/03/2010, 08:13
 
Fecha de Ingreso: marzo-2010
Mensajes: 10
Antigüedad: 9 años, 11 meses
Puntos: 0
Respuesta: Ayuda añadiendo parametro a php (creo que es muy fácil)

Eleazan, ese código que has puesto funciona. Eres un hacha!
Por defecto coje el video con el valor fmt=22, y si ese no existe coje el fmt=18 :)

¿Podrías añadirle lo necesario para que en caso que ni fmt=22 ni fmt=18 existan coja el fmt=5?

Muchísimas gracias!
  #8 (permalink)  
Antiguo 23/03/2010, 08:27
Avatar de Eleazan  
Fecha de Ingreso: abril-2008
Ubicación: Ibiza
Mensajes: 1.879
Antigüedad: 11 años, 10 meses
Puntos: 326
Respuesta: Ayuda añadiendo parametro a php (creo que es muy fácil)

Perdón, hasta ahora no lo leí :S

Veamos, si tienes
Código PHP:
if($response['status']==404) {
    
$fmt=18;
    
$response=http_test_existance($uri.$fmt);
    }
    
$uri=$response["location"];
print_r($response);
header("location: $uri");
exit; 
Simplemente añade una opción más
Código PHP:
if($response['status']==404) {
    
$fmt=18;
    
$response=http_test_existance($uri.$fmt);
    }
    
if(
$response['status']==404) {
    
$fmt=15;
    
$response=http_test_existance($uri.$fmt);
    }
    
$uri=$response["location"];
print_r($response);
header("location: $uri");
exit; 
Otra opción sería hacerlo dentro de un while, e ir probando cada vez a bajarle el fmt hasta que encuentre uno (así siempre bajaria el más alto)

Un saludo! Y siento el retraso xD
  #9 (permalink)  
Antiguo 24/03/2010, 04:12
 
Fecha de Ingreso: marzo-2010
Mensajes: 10
Antigüedad: 9 años, 11 meses
Puntos: 0
Respuesta: Ayuda añadiendo parametro a php (creo que es muy fácil)

Muchas gracias, más vale tarde que nunca. Asçi funciona perfecto :)

Etiquetas: parámetros
Atención: Estás leyendo un tema que no tiene actividad desde hace más de 6 MESES, te recomendamos abrir un Nuevo tema en lugar de responder al actual.
Respuesta




La zona horaria es GMT -6. Ahora son las 00:19.