Sign in

Зарегистрируйтесь, чтобы стать полноправным участником сообщества Masterpro.ws.

Погода по ip на Яндекс-картах: step-by-step

В последние дни получил несколько жалоб на неработоспособность погодных информеров, объединенных в данном блоге тегом погода по ip...

...один из жалобщиков, к слову сказать, имеет собственную историю на форуме Masterpro.ws, по ссылке. Горемыке была предложена бесплатная помощь, уж слишком давно все это длится и чересчур нудно он ноет... от помощи этой самой он гордо отказался; ну, что же. Если предпочитает товарищ, отличившийся у нас на техническом форуме рассказами о боевых действиях и горячих точках, а также о собственном во всем этом участии в то время, как мы, лоботрясы и очкарики, "в университетах своих обучались" - пусть себе болтает, не жалко. Программный код, правда, от героических рассказов этих у него не заработает, да и "университеты" ведь понятие сугубо собирательное и у всех они разными бывают; кто в школе на уроках литературы хоть изредка бывал, а не только на НВП, тот помнит... ну и вот, в качестве бесплатного бонуса/подарка от очкариков-программистов супербойцу российского ВДВ - нижеследующее учебное пособие. Все, что следует далее, было по косточкам разложено и до тошноты разжевано на форуме и в блоге, но, может быть... может быть, надо попытаться разжевать и свести все воедино еще раз, чем черт не шутит и вдруг наконец что-то у кого-то начнет получаться. Итак, всего четыре коротких шага, "и ключик наш", поехали! ей-богу, тут работы даже для новичка всего на десять минут: становись-равняйсь-смирно:

 

 

1. Открываем страничку SypexGeo, откуда загружаем два файла: в секции Sypex Geo API нам понадобится Sypex Geo для PHP 5.2+ , и далее, из Базы данных для Sypex Geo 2.2 качаем свежий (обновляется раза два в месяц) Sypex Geo City в кодировке UTF8. И первый и второй файл являются архивами; распаковываем оба в одну и ту же директорию (любую) в публичном каталоге вашего веб-сервера. Таким образом, получаем два файла: SxGeoCity.dat и SxGeo.php. Несложно? - полдела сделаны, как говорил когда-то наш сержант не буду уточнять в какой ситуации.

2. В той же директории создаем третий файл, пустой, который обзываем index.php; и в который копируем нижеприведенные строчки:

 

<?php
$ip = $_SERVER['REMOTE_ADDR'];
include("SxGeo.php");
$SxGeo = new SxGeo('SxGeoCity.dat');
$city = $SxGeo->get($ip);
$loc_array = array($city['city']['lat'],$city['city']['lon']);
$api_key="**********************************";
$num_of_days=1;
$loc_safe = array();
foreach($loc_array as $loc){
$loc_safe[] = urlencode($loc);
}
$loc_string=implode(',', $loc_safe);
$basicurl = sprintf('http://api.worldweatheronline.com/premium/v1/weather.ashx?key=%s&q=%s&num_of_days=%s', $api_key, $loc_string, intval($num_of_days));
$xml = simplexml_load_file($basicurl);
?>
<script src="https://api-maps.yandex.ru/2.1/?lang=ru_RU" type="text/javascript"></script>
<div class="yandex_map" id="yandex_map">
<script type="text/javascript">
var myMap;
ymaps.ready(init);
function init () {
var myMap = new ymaps.Map("map", {
center: [<?= $city['city']['lat']?>,<?= $city['city']['lon'] ?>],
zoom: 8,
controls: ['zoomControl','fullscreenControl']
});
myPlacemark = new ymaps.Placemark([<?= $city['city']['lat']?>,<?= $city['city']['lon'] ?>], {
balloonContent: '<? echo 'Температура '. ($xml->current_condition->temp_C). ' °C';echo "<br>"; echo 'Скорость ветра '. ($xml->current_condition->windspeedKmph). ' км/час'; echo "<br>"; echo 'Направление ветра '. ($xml->current_condition->winddir16Point); echo "<br>";echo ($xml->current_condition->weatherDesc); ?>'});
myMap.geoObjects
.add(myPlacemark);
myPlacemark.balloon.open();
}
</script>
<div id="map" style="width:auto; height:350px"></div>
</div>
<div id="map"></div>

 

Примечание; правильнее было бы все-таки скопипастить код с форума, где он включает еще и структуру HTML-документа... но данная статья у нас предназначена для любителей быстрого копипаста, не забывайте. Ладно; есть некоторая надежда, что заработает и так.

3. Теперь открываем страничку WorldWeatherOnline , где регистрируемся и получаем Premium API сроком на 60 дней: Our Premium Local, Marine, Ski, Time zone, Location Search and Past Weather API for 60 days. Once ready to upgrade simply contact us for a price quote. Да, WorldWeatherOnline уже прекратил выдавать бесплатные ключи; но полученные ранее Free API KEY продолжают работать. За подробностями и прайсом позвольте отослать вас на WorldWeatherOnline; мимоходом упомяну, что американский Weather Underground продолжает выдавать "вечные", хотя и лимитированные, ключи доступа к своему API... возможно, руководствуясь данной статьей и иными материалами блога, объединенными тэгом sypex geo, вы все-таки сумеете и без моей помощи создать полностью бесплатный погодный информер для своего сайта? - поверьте, все по такому же, собственно, принципу, и нет там и в помине нихрена сложного... да, это была опять-таки фраза нашего сержанта, ну что ты будешь делать.

 

Продолжение материала: The Marine Weather API. World Weather Online.

 

4. Ок, возвращаемся к WorldWeatherOnline: полученный триальный Premium API помещаем в наш файл index.php, определяя таким образом значение переменной $api_key (т.е., попросту говоря, пишем полученный ключ между кавычками и вместо звездочек). Что дальше? - а это все... нам с вами осталось только открыть файл index.php, находящийся на вашем веб-сервере - в браузере, и увидеть на Яндекс-карте актуальное для вашего геотаргетинга состояние погоды. И вот именно теперь, когда все наконец работает, вы можете разместить код информера на страничке своего сайта, упразднив таким образом файл index.php; следите только за тем, чтобы в вашем скрипте правильно были прописаны пути к SxGeoCity.dat и SxGeo.php.

Несложно ведь, правда? - ну вот, а говорили. Вы военнослужащие или где? 

Оставить комментарий

Добавьте ваш комментарий