Hola, creo que la pregunta está clara, no sé cómo sacar el contenido de una web para ponerlo en la mía, o usarlo en parte. Sería una imagen de imdb.com, en concreto el cartel de una película, que va dentro de estas líneas:
<td rowspan="2" id="img_primary">
<a onclick="(new Image()).src='/rg/title-overview/primary/images/b.gif?link=%2Fmedia%2Frm3162935808%2Ftt0072431';" href="/media/rm3162935808/tt0072431" ><img src="http://ia.media-imdb.com/images/M/MV5BMTc2MzgwNjAzNV5BMl5BanBnXkFtZTcwNTUyNjQzMQ@@._V1._SY317_CR7,0,214,317_.jpg"
style="max-width:214px; max-height:317px;"
height="317"
alt="El jovencito Frankenstein Poster"
title="El jovencito Frankenstein Poster"
itemprop="image" /></a>
</td>
A mí me gustaría sacar esa imagen, la que está entre <img>, claro, pero teniendo en cuenta que cambia según la película que busque.
La forma que se me ocurre es que PHP saque el código HTML generado y que busque la cadena de texto que le diga, en este caso la etiqueta <td rowspan="2" id="img_primary">, y que saque lo que hay ahí hasta que ponga </td>, pero no estoy seguro de que esto se pueda hacer, ¿alguna ayuda?
Un saludo y gracias.
:http://pastebin.com/8QYAeXpQ
El eregi ya no se recomienda usarlo pues esta marcado como obsoleto en php 5.3.
Saludos
vale, lo he conseguido, pero tengo unos cuantos problemas. Dejo lo que tengo:
función extraer, que quita una parte de una cadena:
function extraer($cadena,$antes,$despues,$cuenta)
{
/*Función para obtener extraer una subcadena
Creado por johandebruin.com el 29-12-2009*/
if(!$cuenta)
return false;
$localizacion1 = $localizacion2 = 0;
do
{
$localizacion1 = strpos($cadena,$antes,$localizacion1 + 1);
if($localizacion1 == false)
return false;
$cuenta--;
} while ($cuenta > 0);
$localizacion2 = strpos($cadena, $despues, $localizacion1 + 1);
if ($localizacion2 == false)
return false;
$localizacion1 += strlen($antes);
return substr($cadena,$localizacion1,$localizacion2 - $localizacion1);
}
función que saca la URL de una web:
<?php
class Url{
public $mi_cadena;
public $archivo;
public $url;
public function sacar_url($mi_url){
$this->archivo = fopen("$mi_url","r") or die ("No se ha encontrado la pagina.");
while(!feof($this->archivo)){
$this->cadena .= fgets($this->archivo, 4096);
}
}
}
?>
<div id="cont_center" >
<?php
$email = $_SESSION["email_user"];
$sql = sprintf("select users_pelis.id_usuario, users_pelis.id_peli, users.email from users_pelis, users where users.email='%s' AND users_pelis.id_usuario = users.id_usuario", mysql_real_escape_string($email));
$usuario->consulta($sql);
$usuario->extraer_registro();
$fuente = new Url();
while($usuario->extraer_registro()){
$cartel = $usuario->resultado['id_peli'];
$url = "http://www.imdb.com/title/tt$cartel/";
$fuente->sacar_url($url);
//echo $fuente->cadena;
$cadena_comienzo = '<table border="0" cellpadding="0" cellspacing="0" id="title-overview-widget-layout">
<tr>';
$cadena_fin = '<td id="overview-top">';
echo extraer($fuente->cadena, $cadena_comienzo, $cadena_fin, 1);
}
En al bd tengo un id_usuario con un id_peli juntos, y el id_usuario tiene en otra tabla sus cosas asociadas, pero al ejecutar esto sólo me muestra la segunda fila, es decir, tengo en la bd:
id_usuario-----id_peli
1---------------34
1---------------65
Pero al ejecutar sólo sale el cartel correspondiente al id_peli 65, no el otro. ¿Sabéis por qué puede ser?
Un saludo.
Cita de: drvy | BSM en 23 Marzo 2012, 18:03 PM
El eregi ya no se recomienda usarlo pues esta marcado como obsoleto en php 5.3.
Saludos
Es cierto, pero no sabes como me toca las *****.
Más que nada por que no encontré ninguna alternativa 'similar' ¿Me recomiendas alguna?
:http://www.php.net/manual/es/function.preg-match.php
Cita de: Shell Root en 27 Marzo 2012, 02:11 AM
:http://www.php.net/manual/es/function.preg-match.php
Shell Root El problema es que no es 'igual'.
http://php.net/manual/es/function.stripos.php
@dimitrix, dime que quieres hacer...
Cita de: Shell Root en 27 Marzo 2012, 20:17 PM
@dimitrix, dime que quieres hacer...
Ahora ya lo hice, no me acuerdo que fue, pero recuerdo que eregi iba genial y tenía que migrarlo por que estaba 'obsoleto' y me costó Dios y la madre...
Tal vez esto te sirva de algo.
function getImage($url) { // GET IMDB image
try {
$doc = new DOMDocument();
$doc->loadHTML( file_get_contents($url) );
$xpath = new DOMXPath($doc);
return $xpath->query('//td[@id="img_primary"]/a/img')->item(0)->getAttribute('src');
} catch( Exception $e ) { return null; }
}
echo getImage("http://www.imdb.com/title/tt0137523/");
Muchas gracias Og. ya está funcionando, pero creo que es demasiado lento si quieres hacer más de una petición, hay alguna forma de acelerarlo? De todas maneras, así está bien.
Un saludo!
Bueno, cada que obtengas una imagen de cierto ID en IMDb puedes descargar y guardar la imagen con un el mismo ID de la entrada en IMDb, y insertar en una tabla de "visitados" una columna que te diga que ya visitaste ese ID.
Entonces el proceso quedaría así:
1.- Conoces el ID de la pag en IMDb
2.- haces una consulta a una tabla de tu DB que te diga si ya tienes esa imagen
si la tienes:
devuelves el link local de la imagen que ya descargaste
si no la tienes:
usas la función que te puse arriba para obtener el link de la imagen
descargas la imagen a tu servidor
metes un registro en tu DB
devuelves el link de la imagen que acabas de descargar
Hola, al final lo hice guardando el link de las imágenes ya visitadas en una base de datos, y todo funcionaba bien en localhost. Pero cuál es mi sorpresa, que al subirlo a un servidor web (nixiweb, en este caso) no se me ven las imágenes, pero en cambio si visito el link de la imagen y vuelvo a entrar, salen bien. He mirado la consola de errores de Chrome y me da un error 403 (Frobidden) para cada link:
"failed to load resource: the server responded with a status of 403 (forbidden)"
Es raro, porque esto en localhost no pasaba. ¿Puede ser porque nixiweb tenga alguna restricción?
Un saludo y gracias.