php 根据用户位置显示天气

edqdpe6u  于 2023-01-29  发布在  PHP
关注(0)|答案(4)|浏览(124)

我正在使用一个代码,改变我的WordPress网站的背景根据雅虎API的URL我插入。有无论如何,使它自动显示游客天气没有任何数据库?我想到使用谷歌的API,但我是一个新手编程,不知道如何实现到我的网站。请帮助!代码可以在这里查看:http://css-tricks.com/using-weather-data-to-change-your-websites-apperance-through-php-and-css/
请彻底,因为我是新的PHP谢谢!

aij0ehis

aij0ehis1#

您需要一个API来Map访问者的IP地址到位置(ipapi.co),另一个API来获取位置的天气预报(openweathermap.org)。

# 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);
0yg35tkg

0yg35tkg2#

这将使用Data Science Toolkit中的开源IP2Coordinates服务从用户的IP地址获取用户的邮政编码。
还有更精确的地理定位API,但这一个是绝对免费的,使用起来非常简单。如果我在生产站点上开发这个API,我会使用HTML5 Geolocation作为我的主要方法,然后使用更好的IP地理定位器,如Max Mind
请注意,这将只适用于美国用户的网站。您可能应该传递更详细的数据到其他雅虎地点API之一,以获得他们的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");
23c0lvtd

23c0lvtd3#

使用ipinfo.ioOpenWeatherMap
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>

超文本:

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

它会显示大约6.3 º C

pu82cl6c

pu82cl6c4#

***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);
        })
    })

超文本:

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

它显示您当前的天气温度。

相关问题