Obtener número de una web

eXtreM3

Buenas, estoy desarrollando una web de compra y venta de oro y el cliente quiere que automáticamente se obtenga el valor actual del oro (para las conversiones de la calculadora) de esta web http://www.24hgold.com/

Arriba sale un gráfico que puedes convertir en euros. Bicheando un poco he encontrado esta subpágina

http://www.24hgold.com/english/gold_silver_converter.aspx

Donde tienen una calculadora y el valor del oro, que en estos momentos está en 1300€ el kilogramo. Ese valor, mirando el código fuente, está en un span con id lbGoldValue. Bien, tengo dos preguntas:

  1. Cómo puedo leer el código fuente de esa página y sacar el valor del lbGoldValue ?

  2. Hay alguna manera más fácil y rápida de obtener el valor real del oro? Supongo que no tiene porqué ser esa web, mientras que el valor sea real la fuente es indiferente. He googleado (quizás no lo suficiente) un poco y no he encontrado nada por el estilo.

Gracias, saludos.

EDIT: la actualización la realizaría de manera automática una vez al día, para no abusar.

Soltrac

Le haces un POST y punto no? Obviamente no la puedes hacer en tiempo real porque se van a dar cuenta de que tu IP abusa del sistema, pero una vez cada 24 horas o así y listo.

Si no sabes como formular el POST te instalas un sniffer (wireshark o googlea por http sniffer) y ya juegas con ello.

1 respuesta
SicKneSs

la manera artesana imagino que será teniendo el valor en tu BD q ir actualizándolo a medida que vaya cambiando el valor.

esta opción es viable si el valor no fluctua demasiado, pero sospecho que no es asi...

eXtreM3

#2 No entiendo xD

Ok, veamos.

1 respuesta
Soltrac

#4 He ampliado mi respuesta, lo que entiendo que no sabes hacer es como preguntarle a esa web el valor no?

Lo primero que tienes que hacer es ver que parámetros se le envían y q te devuelve, eso se mira con un sniffer como te he dicho.

Luego tienes que reconstruir tú esa petición en tu página. Suponiendo que usas PHP, lo que necesitas es CURL (http://php.net/manual/es/curl.examples-basic.php).

Por último, como te he dicho, si vas haciendo la pregunta en tiempo real puede que pongan tu IP en lista negra si la web de tu cliente tiene muchas visitas (piensa que cada visita sería una pregunta desde la IP de tu web), por lo que yo creo que tendrías que convencer a tu cliente de que tu web haga una pregunta cada X tiempo y lo guarde en BBDD.

1 respuesta
EnZo

Te va a tocar scrapear con expresiones regulares.

eXtreM3

#5 he instalado el wireshark pero no tengo ni idea de qué hay que hacer para obtener lo que busco. Lo de la BBDD y el CURL no es problema.

#8 voy, ahora comento.

2 respuestas
Soltrac

#7 Ignora el wireshark, quizás es demasiado grande para lo q necesitas y vamos a estar más tiempo liados que otra cosa.

Bájate el tamper data que es una extensión para firefox. Entonces lo abres, y haces una consulta tú de prueba y de ahí saldrá la magia : )))

1 respuesta
EnZo

#7 Mirate esta clase de loco http://www.mediavida.com/foro/9/fastcurl-388430

Pero me repito, a menos que consigas una pagina que te proporcione los valores en JSON para parsear directamente. Vas a tener que usar expresiones regulares. Sabes usarlas?

LOc0

Si te sirve el valor en $:

<?php

$html = file_get_contents('http://www.24hgold.com/tools/gold_silver_currency_calculator.aspx');
preg_match('/"lbGoldValue"[^<>]+\> *?(?P<oro>[\d,]+)/i', $html, $regex); 
echo "\n{$regex['oro']}\n\n";

?>

SI lo necesitas en € -> http://www.mediavida.com/foro/9/fastcurl-388430 y haces un POST (bastante tocho por cierto):

http://pastebin.com/i1ucCwyn

Salu2 ;)

6 respuestas
catalon

Si la web es en php pk no usas algo tipo:
file_get_contents("http://www.24hgold.com/english/gold_silver_converter.aspx")

eso te devuelve todo el texto de la web como string, luego simplemente buscas el span con el id ese y sacas su contenido.

#10 Fuuuuuuuuuu

1 respuesta
Soltrac

#10 En realidad ese post es tan tocho porque es ASPX, pero mucho de ahí no hace falta.

Anyway no quería darle la respuesta directa a #1 para que entendiera como se sacaban estas cosas, pero habeis fastidiado la clase xDDDD.

Mi recomendación #1 es que te pelees con el sniffer para futuras aplicaciones. Y recuerda decirle al cliente que si la web 24hgold.com cambia no es tu culpa, pero que se lo solucionas de nuevo previo pago : ))) (o cóbrale un mantenimiento)

EnZo

Te me has adelantao Loco ya estaba haciendo la regexp xD

/id="lbGoldValue" [^<]+>([0-9,.]+) ([A-Z]{2,})? ?(.)/
eXtreM3

jajajajaja qué gracia me ha hecho el Fuuuuuuuu de #11 :si:

Gracias a todos por contestar, voy a ponerme a la faena.

#10 me sirve el valor en dólares, no importa, por una multiplicación no me voy a morir :P

1 respuesta
Tunnecino

#14 Y una pregunta tonta, y si cambia el valor del euro respecto al del dollar?

2 respuestas
EnZo

#15 Fastcurl :P

1 respuesta
eXtreM3

#15 justo eso estaba pensando xDDD, toca tirar de fastcurl por cojones jajaja.

Tunnecino

Que por cierto #10 #16 la web donde está la docu y fastcurl no funciona :(

LOc0

Sí, a ver, la documentación la tenía en un server dedicado de un amigo pero tuvo que apagarlo. Si alguien tiene un hueco para colgarla y quiere prestarlo, pues de pm. Por otro lado, el código está comentado y (creo) se entiende bien.

#1 Haz caso a Soltrac e instálate una extensión para el navegador que "esnife" HTTP (tamper data, httpfox, etc) para ver qué datos se envían desde la calculadora al darle a convertir a euros (eso fue el chorizo que pegué más arriba). Luego tira de CURL y ya está.

Te pondría el código pero ME TENGO QUE PIRAR, sorry. Si no sabes, estoy seguro de que alguien del foro te lo podrá apañar.

Salu2 ;)

Edito: he redirigido el dominio a mi casa -> http://tonikelope.es/fastcurl (la docu la subo luego).

RaymaN

He encontrado esta web buscando "gold value api": http://drayah.no.de/metals/latest

Si no me equivoco es JSON, por lo que te será bastante rápido y limpio obtener el valor. Desconozco que tasa de actualización tiene y si se corresponde con el valor real xD

1 respuesta
eXtreM3

#20 está en dólares, putada xD

1 respuesta
RaymaN

#21 pues apis de cambio de moneda hay a patadas. Yo las utilizaría en vez de hacer scraping, porque si tocan algo del código te van a joder bastante, te lo digo por experiencia propia xD

2 respuestas
Tunnecino

#22 De todas formas, si ha dicho que el cliente quiere expresamente esa web...

1 respuesta
eXtreM3

#22 #23 no pasa nada, con el resultado en dólares de #10, estoy usando la API de Google de conversión de divisas

/**
 * conversor_divisas()
 *
 * Conversor de moneda usando la API de Google
 *
 * @param String $divisa_origen  :siglas de las diferentes monedas / divisas según ISO 4217
 * @param String $divisa_destino :siglas de las diferentes monedas / divisas según ISO 4217
 * @param float $cantidad
 * @return int
 */
function conversor_divisas($divisa_origen, $divisa_destino, $cantidad) {
    $cantidad = urlencode($cantidad);
    $divisa_origen = urlencode($divisa_origen);
    $divisa_destino = urlencode($divisa_destino);
    $url = "http://www.google.com/ig/calculator?hl=en&amp;q=$cantidad$divisa_origen=?$divisa_destino";
    $rawdata = file_get_contents($url);
    $data = explode('"', $rawdata);
    $data = explode(' ', $data['3']);
    $var = $data['0'];
    return round($var,3);
}//END FUNCTION
 
echo conversor_divisas("USD","EUR",1);

y a volar :si:

1 respuesta
Tunnecino

#24 Ah, pues no la conocía, mientras no la jodan como la API del translator xD

djtonight

este subforo está lleno de buena gente, siempre contestando a las dudas y sacando del bloqueo a los compañeros. No podría soportar que alguien que pasa por aquí a menudo no disponga de invitaciones a feda.me, y ya que me quedan 2.... ahi van xD

MHRK78V2RR7GKNKH
F10Z6L6RBVRVGEPP

eXtreM3

:si: puto fap caster xDD

Me está dando problemas la activación / instalación de la librería cURL porque la función que puse está desactualizada y he buscado otra

function conversor_monedas($moneda_origen,$moneda_destino,$cantidad) {
			$cantidad = urlencode($cantidad);
			$moneda_origen = urlencode($moneda_origen);
			$moneda_destino = urlencode($moneda_destino);
			$url = "http://www.google.com/ig/calculator?hl=en&q=$cantidad$moneda_origen=?$moneda_destino";
			$ch = curl_init();
			$timeout = 0;
			curl_setopt ($ch, CURLOPT_URL, $url);
			curl_setopt ($ch, CURLOPT_RETURNTRANSFER, 1);
			curl_setopt($ch,  CURLOPT_USERAGENT , "Mozilla/4.0 (compatible; MSIE 8.0; Windows NT 6.1)");
			curl_setopt ($ch, CURLOPT_CONNECTTIMEOUT, $timeout);
			$rawdata = curl_exec($ch);
			curl_close($ch);
			$data = explode('"', $rawdata);
			$data = explode(' ', $data['3']);
			$var = $data['0'];
			return round($var,3);
		}

Me estoy haciendo la picha un lío, vaya día más perry xD

#28 tengo que cargar primero la librería cURL que no se me activa!

1 respuesta
Tunnecino

#27 Pero no te vale fast-curl?

1 respuesta
eXtreM3

Cómo leches se activa el curl en wamp? Muchos sitios dicen que tienes que modificar los php.ini de la carpeta php y de apache quitándole el ; de la línea donde sale la libreria curl, con el servidor desconectado. Lo he hecho, y sigue tirándome el error. He comprobado los dos php.ini y se han guardado bien, con el ; quitado.

También he leido por ahí que tienes que bajarte la libreria php_curl.dll y meterla en la carpeta system32, lo he hecho y nada.

Seguro que es una tontería...

edit: y la tontería era reiniciar el pc.

EDIT 2: CONSEGUIDO, a tomar por culo xD

Gracias a todos los que habeis aportado ;)

1 respuesta
BLZKZ

#29 tienes que reiniciar apache, no el pc entero xDDDDd dios mio :P

1 respuesta