Делаем сайт GalleryUA/pogoda

[5.08.2015 2.59 – Что-то не спиться, после 2-часового полусна занялся этой работой]

  1. Добавляем необходимую запись в файл .htaccess:
  2. ####pogoda-3
    RewriteRule ^pogoda-3/([0-9]+)-(.*)/?$ /pogoda-3/index_pogoda.php?id=$1&url=$2 [L,QSA]
    RewriteRule ^pogoda-3/(.*)/([0-9]+)-(.*)/?$ /pogoda-3/index_pogoda.php?id=$2&url=$3 [L,QSA]
    #category
    RewriteRule ^pogoda-3/(.*)/$ /pogoda-3/index_cat_pogoda.php?url=$1 [L,QSA]
    RewriteRule ^pogoda-3/([a-zA-Z0-9_-]+)$ /pogoda-3/index_cat_pogoda.php?url=$1 [L,QSA]
    #/pogoda/
    RewriteRule ^pogoda-3/$ /pogoda-3/index_cat.php?url= [L,QSA]	
    RewriteRule ^pogoda-3$ /pogoda-3/index_cat.php?url= [L,QSA]	
    ####////pogoda-3
    
  3. Переносим файлы index.php и index_cat.php, переименовываем их соответственно в index_pogoda.php и index_cat_pogoda.php. Так же переносим файл config_sec728312167.php.
  4. Подправляем config_sec728312167.php таким образом:

    <?php
    require_once "../photo/config_sec728312167.php";
    $path = '/pogoda-3/'
    ?>
    

    Т.е. берем все настройки из раздела /photo/, меняем только путь $path.

  5. Можем открыть любую тестовую страницу, например, http://galleryua.com/pogoda-3/reshetilovskij-rajon/19175-yatsenky/ и вывести для отладки var_dump($srch);
  6. array(56) { [0]=> string(5) "19175" ["id"]=> string(3) "270" [1]=> string(16) "с. Яценки" ["title"]=> string(16) "с. Яценки" [2]=> string(8) "yatsenky" ["alias"]=> string(8) "yatsenky" [3]=> string(8) "49.41056" ["E"]=> string(8) "49.41056" [4]=> string(8) "34.04944" ["N"]=> string(8) "34.04944" [5]=> string(20) "49.41056E, 34.04944N" ["koord_txt"]=> string(20) "49.41056E, 34.04944N" [6]=> string(0) "" ["radius"]=> string(0) "" [7]=> string(0) "" ["photo"]=> string(0) "" [8]=> string(0) "" ["photos"]=> string(0) "" [9]=> string(1) "0" ["num_photos"]=> string(1) "0" [10]=> string(0) "" ["videos"]=> string(0) "" [11]=> string(1) "0" ["num_videos"]=> string(1) "0" [12]=> string(1) "1" ["published"]=> string(1) "1" [13]=> string(3) "270" ["catid"]=> string(3) "270" [14]=> string(76) "Полтавская область‎/Решетиловский район" ["cat_cache"]=> string(76) "Полтавская область‎/Решетиловский район" [15]=> string(119) "Почтовый индекс с. Яценки: 38451.
    Высота села: 129 м над уровнем моря." ["info"]=> string(119) "Почтовый индекс с. Яценки: 38451.
    Высота села: 129 м над уровнем моря." [16]=> string(0) "" ["raspolog"]=> string(0) "" [17]=> string(0) "" ["seo_title"]=> string(0) "" [18]=> string(0) "" ["seo_description"]=> string(0) "" [19]=> string(0) "" ["seo_keywords"]=> string(0) "" [20]=> string(3) "270" [21]=> string(37) "Решетиловский район" ["name"]=> string(37) "Решетиловский район" [22]=> string(20) "reshetilovskij-rajon" [23]=> string(0) "" ["description"]=> string(0) "" [24]=> string(2) "15" ["parent"]=> string(2) "15" [25]=> string(1) "1" [26]=> string(7) "270.jpg" ["image"]=> string(7) "270.jpg" [27]=> string(20) "reshetilovskij-rajon" ["path_old"]=> string(20) "reshetilovskij-rajon" [28]=> string(8) "yatsenky" [29]=> string(20) "reshetilovskij-rajon" ["cat_alias"]=> string(20) "reshetilovskij-rajon" }
    
  7. 5. Приведем в соответствие каждому населенному пункту ближайший населенный пункт отмеченный в rp5ru http://galleryua.com/photo-3/service/rp5/rp5-nearest.php?E=46.48694&N=33...
  8. Пример записей:

    1;г. Винница;idrp5=187;rspolog5=Украина/Винницкая область;info=Погода в Виннице;d=209.15091878226215;
    2;г. Жмеринка;idrp5=192;rspolog5=Украина/Винницкая область;info=Погода в Жмеринке;d=2419.7846256065804;
    3;г. Могилев-Подольский;idrp5=199;rspolog5=Украина/Винницкая область;info=Погода в Могилеве-Подольском;d=2199.3059516248104;
    4;г. Хмельник;idrp5=141869;rspolog5=Украина/Винницкая область/Хмельницкий район;info=Погода в Будкове;d=1590.8772771081663;
    5;г. Александрия;idrp5=460;rspolog5=Украина/Кировоградская область;info=Погода в Александрии;d=698.9780031482637;
    6;г. Знаменка;idrp5=468;rspolog5=Украина/Кировоградская область;info=Погода в Знаменке;d=492.35131303222005;
    7;г. Кировоград;idrp5=470113;rspolog5=Украина/Кировоградская область/Кировоградский район;info=Погода в Солнечном;d=4310.619613779408;
    8;г. Светловодск;idrp5=23970;rspolog5=Украина/Кировоградская область/Светловодский район;info=Погода в Свердловке;d=3935.1891042430693;
    9;с. Авксенивка;idrp5=142580;rspolog5=Украина/Днепропетровская область/Верхнеднепровский район;info=Погода в Авксеновке;d=817.2108655285906;
    

    Запишем эти значения в соответствующую таблицу, для этого вначале добавим еще один столбец:

    добавляем новый столбец
    процесс добавления нового столбца

    Проверив результаты убеждаемся, что есть населенные пункты, для которых погода обозначена лишь в 50км, особенно много таких по Херсонской области, вот самые печальные ситуации:

    3466;с. Ларино;idrp5=31024;rspolog5=Украина/Херсонская область/Генический район;info=Погода в Стрелковом;d=51240.71051301449;
    16586;с. Левитановка;idrp5=141336;rspolog5=Украина/Херсонская область/Каланчакский район;info=Погода в Приморском;d=50808.61376872296;
    16597;с. Правда;idrp5=151117;rspolog5=Украина/Херсонская область/Каланчакский район;info=Погода в Александровке;d=51134.44551250439;
    

    Формируем записи в таком виде:

    UPDATE `galleryua_gallerist`.`gorod3` SET `idrp5` = '187' WHERE `gorod3`.`id` = 1
    UPDATE `galleryua_gallerist`.`gorod3` SET `idrp5` = '192' WHERE `gorod3`.`id` = 2
    UPDATE `galleryua_gallerist`.`gorod3` SET `idrp5` = '199' WHERE `gorod3`.`id` = 3
    UPDATE `galleryua_gallerist`.`gorod3` SET `idrp5` = '141869' WHERE `gorod3`.`id` = 4
    …
    UPDATE `galleryua_gallerist`.`gorod3` SET `idrp5` = '28497' WHERE `gorod3`.`id` = 29353
    UPDATE `galleryua_gallerist`.`gorod3` SET `idrp5` = '78382' WHERE `gorod3`.`id` = 29354
    UPDATE `galleryua_gallerist`.`gorod3` SET `idrp5` = '78380' WHERE `gorod3`.`id` = 29355
    

    После того как записи сформировались импортируем дамп /var/www/gallery/data/www/galleryua.com/photo-3/service/rp5/gorod_idrp5ru.sql в базу:

    [root@176 ~]# mysql -uroot -p -f galleryua_gallerist < /var/www/gallery/data/www/galleryua.com/photo-3/service/rp5/gorod_idrp5ru.sql
    

    Получаем дополнительный столбец с данными и теперь нам не нужно каждый раз проделывать эту процедуру при загрузке страницы:

    новый столбец в таблице

    Кроме того мы можем скриптом выгружать эти данные за один запрос на странице с Погодой и подтягивать погоду с сервера rp5.ru.

  9. С подтягивание погоды пришлось повозиться достаточно долго, здесь на омощь пришел фрилансер «weblancer Скрипты Павлов Сергей (fearless1445) InYourDarkness». Его рабочая папка /var/www/gallery/data/www/galleryua.com/pogoda-3/parser-pogody-rp5/mm
  10. Скрипт подтягивания погоды положил пямо в текст файла /var/www/gallery/data/www/galleryua.com/pogoda-3/citynear.php и /var/www/gallery/data/www/galleryua.com/pogoda-3/townnear.php
  11. Вот сам скрипт:
  12. <script>
    function getRandomArbitary(min, max)
    {
      return Math.random() * (max - min) + min;
    }
    function JsonpCallbackToArray(data, id) {
        if (data.responseStatus == "200") {
    			var title = data.responseData.feed.entries[0].title;
    			var decRandom = getRandomArbitary(-0.2, 0.2).toFixed(1);
    			var temp = title.substr(-10).match(/[\w-\.\+]+/)[0];
    			var finalyTemp = (temp - decRandom).toFixed(1);
    			$(".spisokmtitle-" + id).html(''+ finalyTemp + '°');
    		}else {
    			alert(data.responseDetails);
    		}
    }
    function request(url, id){
    	$.ajax({
            type: "GET",
            url: document.location.protocol + '//ajax.googleapis.com/ajax/services/feed/load?v=1.0&output=jsonp&callback=?&q='+url,
    		dataType: "jsonp",
    		crossDomain: true,
    		success     : function(data) {
    			JsonpCallbackToArray(data, id);
    		}
        });
    }
    var idArray = [<?php echo $str_array_idrp5; ?>];//Массив ID
    for (var idCount = 0; idCount < idArray.length; idCount++) {
        if (idCount in idArray) {
    		var urlWithID = 'http://rp5.ru/rss/'+ idArray[idCount] +'/ru';
    		$(document).ready(request(urlWithID, idArray[idCount]));
        }
    }
    </script>
    

    Кроме всего прочего он добавляет случайное число в диапазоне [-0.3, 0.3], чтобы данные о погоде соседних сел, получаемых информацию с одной и той же метеостанции не выглядели абсолютно одинаково. Еще нужно прописать дивы в тех местах, где нужно подгружать значения температуры: <div style="float:left;" class="spisokmtitle-'.$idrp5.'"></div></p>

  13. Вот что получилось в итоге:
  14. результат манипуляций

    На мой взгляд смотрится неплохо!

Print Friendly Version of this pagePrint Get a PDF version of this webpagePDF