openweather API

  • PHP_weatherScraper 이 포스트와 이어지는 포스트.
  • 위 포스트에서는, cURL 을 이용해 사이트를 직접 불러와 domdocument로 만들어 class의 이름을 통해 정보를 빼왔다.
  • 이번 포스트에서는, 위 같이 직접 사이트를 로드하기 보다는 openWeather에서 제공된 API를 이용해 정보를 받아서 화면에 표시하려고 한다.

1. OpenWeather API 가입

https://openweathermap.org/api

  • 그러면 아래와 같이 My API Keys에서 내 key정보가 나온다.

image

2. API doc 선택

image

  • 여기 API key자리에 내 API key를 넣어 준다.
api.openweathermap.org/data/2.5/weather?q={city name}&appid={API key}
  • PHP_weatherScraper 여기서 사용된 링크와 비교.
    • 페이지에 직접 접근:
      • https://www.weather-forecast.com/locations/도시이름/forecasts/latest;
    • API 사용해서 접근:
      • http://api.openweathermap.org/data/2.5/weather?q=도시이름&appid=내api키;

3. 코드에 삽입, 적절히 이용하기

  • 코드를 알맞게 변형해준다.
<?php
    function file_get_contents_curl($url) {
    $ch = curl_init();

    curl_setopt($ch, CURLOPT_AUTOREFERER, TRUE);
    curl_setopt($ch, CURLOPT_HEADER, 0);
    curl_setopt($ch, CURLOPT_RETURNTRANSFER, 1);
    curl_setopt($ch, CURLOPT_URL, $url);
    curl_setopt($ch, CURLOPT_FOLLOWLOCATION, TRUE);

    $data = curl_exec($ch);
    curl_close($ch);

    return $data;
}

if($_GET["city"]){
    $city = $_GET["city"];
    $cityurl ="http://api.openweathermap.org/data/2.5/weather?q=".$city."&appid=YourAPIkey";
    $urlContents = file_get_contents_curl($cityurl);
    $weatherArray= json_decode($urlContents,true);
    $weather = "The weather in ".$_GET["city"]." : ".$weatherArray['weather'][0]['description'].". ";

}
?>
  • 화면에 가져온 정보를 출력해 봄.
    • 정보가 JSON으로 가져와진다. JSON.DECODE함수를 사용해 ARRAY로 받을 수 있다.
    • 어레이 안에 어레이가 있다.

image

  • 우리가 원하는 정보는 weather키에 있는 첫번째 어레이에 있는 description이다. 그 정보에 다음과 같이 접근할 수 있다.

    $weatherArray= json_decode($urlContents,true);
    $weatherArray['weather'][0]['description'];
    

image

  • 전체 코드
<?php
function file_get_contents_curl($url) {
    $ch = curl_init();

    curl_setopt($ch, CURLOPT_AUTOREFERER, TRUE);
    curl_setopt($ch, CURLOPT_HEADER, 0);
    curl_setopt($ch, CURLOPT_RETURNTRANSFER, 1);
    curl_setopt($ch, CURLOPT_URL, $url);
    curl_setopt($ch, CURLOPT_FOLLOWLOCATION, TRUE);

    $data = curl_exec($ch);
    curl_close($ch);

    return $data;
}

if($_GET["city"]){
    $city = $_GET["city"];
    $cityurl ="http://api.openweathermap.org/data/2.5/weather?q=".$city."&appid=YOURAPIKEY";
    $urlContents = file_get_contents_curl($cityurl);
    $weatherArray= json_decode($urlContents,true);
    $weather = "The weather in ".$_GET["city"]." : ".$weatherArray['weather'][0]['description'].". ";

}
?>

<!DOCTYPE html>
<html lang="en" dir="ltr">
    <head>
        <meta charset="utf-8">
        <title></title>
        <meta name="viewport" content="width=device-width, initial-scale=1, shrink-to-fit=no">

        <!-- Bootstrap CSS -->
        <link rel="stylesheet" href="https://maxcdn.bootstrapcdn.com/bootstrap/4.0.0-alpha.6/css/bootstrap.min.css" integrity="sha384-rwoIResjU2yc3z8GV/NPeZWAv56rSmLldC3R/AZzGRnGxQQKnKkoFVhFQhNUwEyJ" crossorigin="anonymous">
        <script src="https://code.jquery.com/jquery-3.1.1.slim.min.js" integrity="sha384-A7FZj7v+d/sdmMqp/nOQwliLvUsJfDHW+k9Omg/a/EheAdgtzNs3hpfag6Ed950n" crossorigin="anonymous"></script>
        <script src="https://cdnjs.cloudflare.com/ajax/libs/tether/1.4.0/js/tether.min.js" integrity="sha384-DztdAPBWPRXSA/3eYEEUWrWCy7G5KFbe8fFjk5JAIxUYHKkDx6Qin1DkWx51bBrb" crossorigin="anonymous"></script>
        <script src="https://maxcdn.bootstrapcdn.com/bootstrap/4.0.0-alpha.6/js/bootstrap.min.js" integrity="sha384-vBWWzlZJ8ea9aCX4pEW3rVHjgjt7zpkNpZk+02D9phzyeVkE+jo0ieGizqPLForn" crossorigin="anonymous"></script>
    </head>

    <body  background="https://images.unsplash.com/photo-1468276311594-df7cb65d8df6?ixid=MnwxMjA3fDB8MHxwaG90by1wYWdlfHx8fGVufDB8fHx8&ixlib=rb-1.2.1&auto=format&fit=crop&w=1050&q=80">
        <div class="container ">
            <div class="jumbotron justify-content-center" style ="text-align:center;background-color: rgba(255, 255, 255, .4);">
                <form id="cityForm">
                    <h1 class="display-3">What's the Weather?</h1>
                    <p class="lead">Enter the name of a city</p>
                    <p><input type="text" class="form-control"  name="city" style="width:50%; margin :0 auto"></p>
                    <p class="lead">
                        <input type="submit" class="btn btn-primary btn-lg">
                    </p>
                </form>
                <h1 id="title"><?php echo $city; ?></h1>
                <div class="alert alert-success" id="info" role="alert"><?php echo $weather; ?></div>
            </div></div>
        <script type="text/javascript">
            if($("#info").text()==""){
                $("#info").css("display","none");
                $("#title").css("display","none");
            }else{
                $("#info").css("display","block");
                $("#title").css("display","block");
            }
        </script>
    </body>
</html>

© 2018. All rights reserved.

Powered by Hydejack v8.5.2