Показывать погоду в зависимости от местоположения пользователя

Я использую код, который изменяет фон моего веб-сайта wordpress в соответствии с введенным мной URL-адресом Yahoo API. Есть ли способ заставить его автоматически показывать погоду посетителей без каких-либо баз данных? Я использую API Google, но я новичок в программировании и не знаю, как реализовать его на своем веб-сайте. Пожалуйста помоги! Код можно посмотреть здесь: http://css-tricks.com/using-weather-data-to-change-your-websites-apperance-through-php-and-css/

Пожалуйста, будьте внимательны, потому что я новичок в PHP. Спасибо!


person user1373771    schedule 25.08.2012    source источник


Ответы (4)


Это позволит получить почтовый индекс пользователя с его IP-адреса с помощью службы IP2Coordinates с открытым исходным кодом из Data Science Toolkit.

Существуют более точные API-интерфейсы геолокации, но этот абсолютно бесплатный и чрезвычайно прост в использовании. Если бы я разрабатывал это на рабочем сайте, я бы использовал в качестве основного с возможностью перехода к лучшему геолокационному IP-адресу, например Max Mind.

Обратите внимание, что это будет работать только для пользователей вашего сайта из США. Вероятно, вам следует передать более подробные данные одному из других API-интерфейсов Yahoo Place, чтобы использовать один из их WOEID (или выбрать другой API погоды).

Вот вам код. Поместите это сразу после тега <?php в вашем примере кода. Убедившись, что он работает, закомментируйте все строки, начинающиеся с 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));

Теперь измените строку в примере кода, начинающуюся с $data =, на следующую:

$data = get_data("http://weather.yahooapis.com/forecastrss?p={$zip_code}&u=f");
person cpilko    schedule 26.08.2012
comment
Что мне нужно заменить, чтобы этот код заработал (или он работает прямо из коробки)? Извините, у меня нет доступа к компу до завтра. Большое спасибо за код, и вы должны опубликовать это в CSS-трюках или что-то в этом роде; Я думаю, что это одно из немногих учебных пособий, которые могут это сделать! - person user1373771; 26.08.2012
comment
Работает отлично !!! Все, что мне нужно было сделать, это удалить части, в которых напечатан текст (это испортило мою тему wp), и это сработало как шарм. У вас есть вебсайт? Я хотел бы отметить вас в нижнем колонтитуле! - person user1373771; 26.08.2012
comment
Спасибо за похвалу. Если вы хотите пополнить счет, вы можете использовать getwellgabby.org. - person cpilko; 26.08.2012
comment
Вы сделали этот сайт? Это очень приятно. - person user1373771; 26.08.2012
comment
Я добавляю его на свой сайт (который скоро появится). Я скоро опубликую ссылку! - person user1373771; 26.08.2012

Вам понадобится API для сопоставления IP-адреса посетителей с местоположением (ipapi.co) и еще один для получения информации о погоде. прогноз местоположения (openweathermap.org). Код ниже предназначен для php (на стороне сервера):

# 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);
person user6299091    schedule 06.05.2016
comment
Вы также можете получить расширенный прогноз $api_3 = 'http://api.openweathermap.org/data/2.5/forecast?lat=' . $point[0] . '&lon=' . $point[1] . '&appid=' . $api_key; $forecast = file_get_contents($api_3); - person Nicolas Giszpenc; 01.06.2016

Использование ipinfo.io и 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>

Будет показано что-то вроде 6,3 ºC.

person Joep    schedule 17.12.2013

***You can get data about the location with use third-party API. for example:http://ip-api.com/.**
You get your location weather data from OpenWeatherMap service using the ip-api. its help you to get visitor location weather.*



 var getIP = 'http://ip-api.com/json/';
    var openWeatherMap = 'http://api.openweathermap.org/data/2.5/weather'
    $.getJSON(getIP).done(function(location) {
        $.getJSON(openWeatherMap, {
            lat: location.lat,
            lon: location.lon,
            units: 'metric',
            APPID: 'Your-Openweather-Apikey'
        }).done(function(weather) {
          $('#weather').append(weather.main.temp);
            console.log(weather);
        })
    })

HTML:

<div id="weather"> </div>

Показывает текущую температуру погоды.

person Devsaiful    schedule 13.10.2020