2012-08-25 32 views
5

Estoy usando un código que cambia el fondo de mi sitio web wordpress según la URL de la API de Yahoo que inserté. ¿Hay alguna forma de hacer que muestre automáticamente el tiempo de los visitantes sin ninguna base de datos? He pensado en usar la API de Google, pero soy un novato en programación y no sé cómo implementarlo en mi sitio web. ¡Por favor ayuda! El código se puede ver aquí: http://css-tricks.com/using-weather-data-to-change-your-websites-apperance-through-php-and-css/Mostrar el tiempo según la ubicación de los usuarios

Sé minucioso porque soy nuevo en PHP ¡Gracias!

Respuesta

5

Esto obtendrá un código postal del usuario desde su dirección IP utilizando el código abierto IP2Coordinates service del Data Science Toolkit.

Hay más precisas API de geolocalización, pero esta es absolutamente gratuita y fácil de usar. Si estuviera desarrollando esto en un sitio de producción, usaría HTML5 Geolocation como mi método principal con una alternativa a un mejor geolocalizador IP, como Max Mind.

Tenga en cuenta que esto solo funcionará para los usuarios estadounidenses de su sitio. Probablemente deba pasar datos más detallados a una de las otras API de lugar de Yahoo para utilizar uno de sus WOEID (o elegir una API de clima diferente).

Aquí está el código para usted. Coloque esto justo después de la etiqueta <?php en su código de muestra. Una vez que esté seguro de que está funcionando, comente todas las líneas que comienzan con print.

//Get the user's IP address 
$user_ip = $_SERVER['REMOTE_ADDR']; 
//The Data Science Toolkit URL 
$url = 'http://www.datasciencetoolkit.org/ip2coordinates/'; 
//Find the user's location from their IP. 
//*** You need the get_data function from the sample code 
$raw_geocode = json_decode(get_data($url . $user_ip)); 
//Check if the user is in the US 
if ('US' === $raw_geocode->$user_ip->country_code) { 
    //If yes, store their zip code in a variable, and print it 
    $zip_code = $raw_geocode->$user_ip->postal_code; 
    printf('<p>Your zip code is: %s</p>', $raw_geocode->$user_ip->postal_code); 
} else { 
    //If the user isn't in the US, set a sip code that will work. 
    $zip_code = '97211'; 
    //and print an error 
    printf('<p>Sorry, this app does not work in %s.</p>', $raw_geocode->$user_ip->country_name); 
} 

//Print the raw data for debugging. 
printf('<pre>%s</pre>', print_r($raw_geocode, true)); 

Ahora cambiar la línea en el código de ejemplo que comienza con $data = a esto:

$data = get_data("http://weather.yahooapis.com/forecastrss?p={$zip_code}&u=f"); 
+0

¿Qué debo reemplazar para que este código funcione (o funciona de inmediato)? Lo siento, no tengo acceso a una oferta hasta mañana. muchas gracias por el código y debes publicar esto en trucos CSS o algo así; ¡Creo que este es uno de los únicos tutoriales que pueden hacer esto! – user1373771

+0

Debería funcionar fuera de la caja. – cpilko

+0

Funciona perfectamente! Todo lo que tuve que hacer fue eliminar las partes donde se imprimía el texto (arruinó mi tema wp) y funcionó como un amuleto. ¿Tienes una página web? ¡Me encantaría agregarle un crédito en el pie de página! – user1373771

1

Usando ipinfo.io y OpenWeatherMap

Javascript:

<script type="text/javascript" src="jquery.simpleopenweather.js"></script> 
<script type="text/javascript"> 
    $(document).ready(function() { 
     $.get("http://ipinfo.io", function (response) { 
      $("#weather").attr('data-simpleopenweather-city', response.city).simpleopenweather({template: '<h2>'+'{{temperature}} '+'&deg;'+'C'+'<h2>', units: 'metric'}); 
     }, "jsonp"); 
    }); 
</script> 

HTML:

<div id="weather" class="simpleopenweather" data-simpleopenweather-city=""></div> 

Se mostrará algo así como 6,3 ºC

5

Tendrá una API para los visitantes de mapeo dirección IP a la ubicación (ipapi.co) y otro para obtener el pronóstico del tiempo para la ubicación (openweathermap.org). El siguiente código es para php (lado del servidor):

# Part 1 (get latitude & longitude) 
$ip = '1.2.3.4'; 
$api_1 = 'https://ipapi.co/' . $ip . '/latlong/'; 
$location = file_get_contents($api_1); 
$point = explode(",", $location); 

# Part 2 (get weather forecast) 
$api_2 = 'http://api.openweathermap.org/data/2.5/weather?lat=' . $point[0] . '&lon=' . $point[1] . '&appid=API_KEY'; 
$weather = file_get_contents($api_2); 
+1

También puede obtener una previsión extendida '$ api_3 = 'http://api.openweathermap.org/data/2.5/forecast?lat='. $ punto [0]. '& lon ='. $ punto [1]. '& appid ='.$ api_key; $ forecast = file_get_contents ($ api_3); ' –

Cuestiones relacionadas