Foros del Web » Programando para Internet » PHP »

Leer XML de servidor remoto

Estas en el tema de Leer XML de servidor remoto en el foro de PHP en Foros del Web. Buenas noches, Escribo aquí por que he buscado por internet alguna solución a mi problema y no he encontrado lo que buscaba. He realizado una ...
  #1 (permalink)  
Antiguo 04/10/2018, 17:14
 
Fecha de Ingreso: mayo-2011
Ubicación: Navarra
Mensajes: 13
Antigüedad: 7 años, 5 meses
Puntos: 0
Leer XML de servidor remoto

Buenas noches,

Escribo aquí por que he buscado por internet alguna solución a mi problema y no he encontrado lo que buscaba.

He realizado una página para mostrar los datos de una estación meteorológica. La estación crea en un servidor externo al mío y en el cual no puedo realizar ninguna modificación, un XML cada minuto. El XML tiene la siguiente forma:

This XML file does not appear to have any style information associated with it. The document tree is shown below.
<current_observation xmlns:xsd="http://www.w3.org/2001/XMLSchema" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" version="1.0" xsi:noNamespaceSchemaLocation="http://www.weather.gov/view/current_observation.xsd">
<credit>Davis Instruments Corp.</credit>
<credit_URL>http://www.davisnet.com</credit_URL>
<disclaimer_url>http://www.davisnet.com/about/terms.asp</disclaimer_url>
<copyright_url>http://www.davisnet.com/about/terms.asp</copyright_url>
<privacy_policy_url>http://www.davisnet.com/about/privacy.asp</privacy_policy_url>
<image>
<url>
http://www.weatherlink.com/images/Logo_Davis_reflxblu.jpg
</url>
<title>Davis WeatherLink</title>
<link>http://www.weatherlink.com</link>
</image>
<suggested_pickup>15 minutes after the hour</suggested_pickup>
<suggested_pickup_period>60</suggested_pickup_period>
<dewpoint_c>3.9</dewpoint_c>
<dewpoint_f>39.0</dewpoint_f>
....

en la página que he creado hasta el momento, estaba trabajando con una copia del XML en local y estaba leyendo el XML de la siguiente manera:

<script>

if(window.XMLHttpRequest)
{
xmlhttp=new XMLHttpRequest();
}
else
{
xmlhttp=new ActiveXObject("Microsoft.XMLHTTP");
}
xmlhttp.open("GET","meteo.xml",false);
xmlhttp.send();
xmlDoc=xmlhttp.responseXML;


document.getElementById("temperature").innerHTML=x mlDoc.getElementsByTagName("temp_c")[0].childNodes[0].nodeValue;
document.getElementById("daymintemperature").inner HTML = ((xmlDoc.getElementsByTagName("temp_day_low_f")[0].childNodes[0].nodeValue-32)/1.8).toFixed(1);
document.getElementById("daymintemperaturetime").i nnerHTML=xmlDoc.getElementsByTagName("temp_day_low _time")[0].childNodes[0].nodeValue;
document.getElementById("daymaxtemperature").inner HTML = ((xmlDoc.getElementsByTagName("temp_day_high_f")[0].childNodes[0].nodeValue-32)/1.8).toFixed(1);
...

De esta manera en local me funciona todo a la perfección y casi todo está hecho con js, ya que con los datos me crea gráficos automáticamente entre otras funciones.

El problema es que si cambio meteo.xml por la ruta donde se encuentra el xml, el navegador me devuelve un error de CORS, por lo que no es válido para lo que necesito.

¿Hay alguna manera de leer el archivo XML del servidor remoto y luego poder seguir trabajando con XmlHttpRequest? ¿o debería rehacer todo?

Gracias de antemano.
  #2 (permalink)  
Antiguo 04/10/2018, 18:16
 
Fecha de Ingreso: abril-2006
Mensajes: 117
Antigüedad: 12 años, 5 meses
Puntos: 9
Respuesta: Leer XML de servidor remoto

usa un archivo Intermediario, te sugiero PHP

obtener_xml.php
Código PHP:
Ver original
  1. <?php
  2. //>
  3. echo file_get_contents("http://loquesea.com/etc/meteo.xml");
  4. //si no retorna los datos, es posible que el PHP no este funcionando configurado con URL open
  5. //por lo cual usa la libreria CURL
EL CORS se invento para eso para evitar que otros sitios webs USEN recursos de otros sitios sin el permiso,

ten en cuenta al USAR PHP, para obtener el XML o algun otro lenguaje, este Creara trafico internamente,al archivo, que solicitas, y del cual pueden obtener la IP de tu servidor, y si son muy estrictos, con el trafico podrian banear la IP impidiendo que accedas a su archivo, bueno yo configuro asi los servidores con esas medidas de seguridad.



La zona horaria es GMT -6. Ahora son las 17:56.