Yahoo Api key almak ve Hava Durumu Apisi

Yaho nun bize sunmuş olduğu havadurumu Yahoo Weather API’sini kullanmak için eskiden api key olmadan file_get_contents ile kullanabiliyorduk fakat son güncellemeden sonra api key kullanım zorunluluğu getirdi. Api keyi almak için ve hava durumu bilgilerini çekmek için adım adım ilerleyelim.

Yahoo uygulama oluşturma
Yahoo uygulama oluşturma

 

  • Callback Domain kısımını resimde girdim fakat kabul etmeyince sildim zaten Home url’e ve Callback  opsyonel olduğu için bu kısımları boş geçebilirsiniz OAuth kullanmayacağız için bu kısımları doldurmanıza gerek yok. Yeni bir uygulama oluşturduğumuzda bizi şu ekran karşılayacak.
yahoo api - uygulama oluşturma api key alma
Yahoo api – uygulama oluşturma – Client ID ve Client Screet Alma

 

  • Yahoo bizim yeni oluşturduğumuz uygulamayı beyaz listeye almak için https://goo.gl/forms/ixXUBJ00xMQc5ne23 bu linkteki formu doldurmamızı ve göndermemizi istiyor. Bu formu doldurup gönderiyoruz fakat onaylanmadan da hava durumu apisini kullanabiliyoruz.
  • Sunucumuzda index.php sayfamızı oluşturalım ve kodlarımızı yazmaya başlayalım
Havadurumu api
Yahoo weather api – Yahoo Havadurumu apisi kullanımı

 

Notlar 

  • Fark ettiğiniz üzere gün, durum bilgileri ingilizce olarak gelmektedir. Githubda açılan bir kaç konuda yahoo nun apiye Türkçe dil desteği vermediği yazıyor artık günleri ve durumları Türkçeye çevirmekte size düşüyor.
  • 48 Farklı durum var durumların tamamına  buradan  erişip çevirme işlemini yapabilirsiniz.
  • Şuan ki hava durumu kısımını bilerek doldurmadım bir çok parametreyi alabiliyoruz. Rüzgar hızını dahi alabiliyoruz. Ne yazdırmak istiyorsanız artık sizin tercihiniz.
  • Yahoo nun diğer apilerini de anlatmaya çalışıcam fakat daha fazlası için buradan sizde inceleyebilirsiniz.

Kodlarımız 

<style type="text/css">
 body{
 background: black;
 }
 #havadurumu,#konum{
 width: 100%;
 height: auto;
 background: black;
 border: 1px solid #ddd;

 }
 #havadurumu tr td,#konum{
 text-align: center;
 font-family: Arial;
 font-size:15px;
 padding: 10px 0px;
 color: white;
 border-top:1px solid #ddd;
 border-right:1px solid #ddd;

 }
 #havadurumu tr:first-child td,#konum{
 font-weight: bold;
 font-size: 20px; 
 }
 #konum{
 width: auto;
 text-align: left;
 padding-left: 20px;
 }
</style>



<?php


function buildBaseString($baseURI, $method, $params) {
 $r = array();
 ksort($params);
 foreach($params as $key => $value) {
 $r[] = "$key=" . rawurlencode($value);
 }
 return $method . "&" . rawurlencode($baseURI) . '&' . rawurlencode(implode('&', $r));
}

function buildAuthorizationHeader($oauth) {
 $r = 'Authorization: OAuth ';
 $values = array();
 foreach($oauth as $key=>$value) {
 $values[] = "$key=\"" . rawurlencode($value) . "\"";
 }
 $r .= implode(', ', $values);
 return $r;
}
$url = 'https://weather-ydn-yql.media.yahoo.com/forecastrss';
$app_id = 'senin id';
$consumer_key = 'senin key';
$consumer_secret = 'senin secret';
$query = array(
 'lat' =>'38.0120',
 'lon' =>'32.529',
 'format' => 'json',
 'u' => 'c',
);

$oauth = array(
 'oauth_consumer_key' => $consumer_key,
 'oauth_nonce' => uniqid(mt_rand(1, 1000)),
 'oauth_signature_method' => 'HMAC-SHA1',
 'oauth_timestamp' => time(),
 'oauth_version' => '1.0'
);

$base_info = buildBaseString($url, 'GET', array_merge($query, $oauth));
$composite_key = rawurlencode($consumer_secret) . '&';
$oauth_signature = base64_encode(hash_hmac('sha1', $base_info, $composite_key, true));
$oauth['oauth_signature'] = $oauth_signature;
$header = array(
 buildAuthorizationHeader($oauth),
 'Yahoo-App-Id: ' . $app_id
);
$options = array(
 CURLOPT_HTTPHEADER => $header,
 CURLOPT_HEADER => false,
 CURLOPT_URL => $url . '?' . http_build_query($query),
 CURLOPT_RETURNTRANSFER => true,
 CURLOPT_SSL_VERIFYPEER => false
);
$ch = curl_init();
curl_setopt_array($ch, $options);
$response = curl_exec($ch);
curl_close($ch);
//print_r($response);
$return_data = json_decode($response);
 
 
$il = $return_data->location->city;
$ulke = $return_data->location->country;
$suan = $return_data->current_observation;
$tahmin = $return_data->forecasts;
?>

<div id="konum">Konum : <?php echo $ulke." ".$il?></div>
<div id="konum">Şuanki hava durumu : rüzgar,nem,basınç,durum gibi değerleri alabiliyoruz.</div>
<table id="havadurumu">
 <tr>
 <td>Gün</td>
 <td>En Yüksek</td>
 <td>En Düşük</td>
 <td>Durum</td>
 </tr>
 <?php 
 foreach ($tahmin as $key => $value) {
 echo "<tr>";
 echo "<td>".$value->day."</td>";
 echo "<td>".$value->high."</td>";
 echo "<td>".$value->low."</td>";
 echo "<td>".$value->text."</td>";
 echo "</tr>";
 }
 ?>
</table>
</body>
</html>