Настраиваем умный скрипт

Поднакопив данных о церквях, загруженных на panoramio, пишем скрипт обработки данных и добавления их в базу сайта.

Результат сбора скрипта находится здесь http://hram-ua.com/new_object_hram.txt, этот список постоянно пополняется данными. Многие из них дублируются. Но это не страшно, при экспорте данных мы сделаем чистку от дублей.

Создаем файл new_object_hram.php в корне сайта: http://hram-ua.com/new_object_hram.php

<?php
$buffer = file_get_contents('new_object_hram.txt');
$data1 = preg_split("/\r\n/",$buffer);
//var_dump($data1);
foreach($data1 as $value1)
{
$data2 = preg_split("/;/",$value1);
//if (count($data2) != 5) echo echo " ".$data2[0]." ".$data2[1]." ".$data2[2]." ".$data2[3]." ".$data2[4]."
"; if(!isset($arr[$data2[0]." ".$data2[1]])) { $arr[$data2[0]." ".$data2[1]] = 1; echo (++$num).". ".$data2[0]." ".$data2[1]." ".$data2[2]." ".$data2[3]." ".$data2[4]."<br&пt;"; } }

Изначально он обрабатывает строки следующим образом:

35. 49.879454 36.327882 Need for speed: Kharkiv version / Потребує швидкості: харківська версія / Нуждается в скорости: харьковская версия 83358572 3.5
36. 50.353333 35.228229999999996 Паства(Рябина. Николаевская церковь. XIX век, действующая) Wooden church 52430678 18.5
37. 50.401023 36.878228 Храм--Temple 39771766 11.6
38. 50.573198 36.570895 Новый храм святых мучениц Веры, Надежды, Любови и матери их Софии 65685924 31.4
39. 50.388951 35.024843 Напівзруйнована П\'ятницька церква XIX ст. 46478019 10.5
40. 50.583042 36.6046 Church. Belgorod. May 2008 10404900 34.5
41. 50.592664 36.575149 Church. May 2008 10893559 33
42. 50.616102 36.571574 Храм старообрядцев 67172299 34.5
43. 50.464 34.9525 Blagoveschenskaya Church In Trostyanets / Благовещенская Церковь в Тростянце 31051619 1.2
44. 50.5834 36.91002800000001 Храм святых апостолов Петра и Павла в селе Неклюдово 34730846 26
45. 51.309039 28.46073 Epiphany Orthodox church in Novy Velidnyky. 76441464 31.3
46. 50.932983 28.602412000000015 Вхід до церкви. 38292613 2.4
47. 50.976805 28.48836399999999 Сільська церква в Купищах. 61684215 12.8
48. 51.047923 29.258566 The church in the without people village Velyky Klistchy 87431879 52.9
49. 50.691089 29.25024 Ворсовка. Речка Возня и церковь Николая Чудотворца / Vorsovka. Voznya river and the church of St. Nicholas 100810599 18.3
50. 50.481651 27.884029999999996 Костел в селі Лебедівка 56654300 27.3
51. 51.05545 29.755397 Мусийки. Церковь Рождества Богородицы. 1904г. / Musiyki. Church of the Nativity of the Virgin. 1904 90305306 78.2
52. 50.766797 29.376154 Украинка. Церковь св. Михаила. Кон. 19в. / Ukrainka. The Church of St. Michael 89112727 29.6
53. 50.262289 28.639684 Женский монастырь Бенедектинок 11395256 1.4
54. 50.886047 29.402418 Старые Воробьи. Михайловская церковь. 1897 г. / Sparrows Оld. St. Michael\'s Church. 1897 100034191 41.2
55. 50.992758 29.778185 Обуховичи. Строится новая церковь / Obukhovychi. Building a new church 90263979 76.2

Теперь делаем чистку от длинных названий для этого будем искать разделители: скобка «(» и символ «/» и убирать все за этими символами из названия, но оставлять в описании.

В коде это выглядит так:

<?php
$buffer = file_get_contents('new_object_hram.txt');
$data1 = preg_split("/\r\n/",$buffer);
//var_dump($data1);
foreach($data1 as $value1)
{
$data2 = preg_split("/;/",$value1);
//if (count($data2) != 5) echo echo " ".$data2[0]." ".$data2[1]." ".$data2[2]." ".$data2[3]." ".$data2[4]."<br>";
if(!isset($arr[$data2[0]." ".$data2[1]]))
{ $arr[$data2[0]." ".$data2[1]] = 1;
  //echo (++$num).". ".$data2[0]." ".$data2[1]." ".$data2[2]." ".$data2[3]." ".$data2[4]."
"; //echo (++$num).". ".$data2[0]." ".$data2[1]." ".$data2[2]." ".$data2[3]." ".$data2[4]."<img src='http://mw2.google.com/mw-panoramio/photos/medium/".$data2[3].".jpg'glt;"."<br>"; //if(strlen($data2[2]) > 0) echo (++$num).". ".$data2[2]."<img src='http://mw2.google.com/mw-panoramio/photos/medium/".$data2[3].".jpg'>"."
"; $title = $data2[2]; $pos = 0; $pos = stripos($title,"("); if ($pos > 0) {$title = substr($title,0 ,$pos); $info = substr($data2[2],$pos);} $pos = 0; $pos = stripos($title,"/"); if ($pos > 0) {$info2 = substr($data2[2],$pos, strlen($data2[2]) - $pos);$title = substr($title,0 ,$pos);} if(strlen($data2[2]) > 0) echo (++$num).". ".$title."<font color=green>(".$info2.")</font>"."<font color=red>(".$info.")</font>"."<br>"; } } ?>

35. Need for speed: Kharkiv version (/ Потребує швидкості: харківська версія / Нуждается в скорости: харьковская версия)((2002-2009гг, архитектор Григорий Занько))
36. Паства(/ Потребує швидкості: харківська версія / Нуждается в скорости: харьковская версия)((Рябина. Николаевская церковь. XIX век, действующая) Wooden church)
37. Храм--Temple(/ Потребує швидкості: харківська версія / Нуждается в скорости: харьковская версия)((Рябина. Николаевская церковь. XIX век, действующая) Wooden church)
38. Новый храм святых мучениц Веры, Надежды, Любови и матери их Софии(/ Потребує швидкості: харківська версія / Нуждается в скорости: харьковская версия)((Рябина. Николаевская церковь. XIX век, действующая) Wooden church)
39. Напівзруйнована П\'ятницька церква XIX ст.(/ Потребує швидкості: харківська версія / Нуждается в скорости: харьковская версия)((Рябина. Николаевская церковь. XIX век, действующая) Wooden church)
40. Church. Belgorod. May 2008(/ Потребує швидкості: харківська версія / Нуждается в скорости: харьковская версия)((Рябина. Николаевская церковь. XIX век, действующая) Wooden church)
41. Church. May 2008(/ Потребує швидкості: харківська версія / Нуждается в скорости: харьковская версия)((Рябина. Николаевская церковь. XIX век, действующая) Wooden church)
42. Храм старообрядцев(/ Потребує швидкості: харківська версія / Нуждается в скорости: харьковская версия)((Рябина. Николаевская церковь. XIX век, действующая) Wooden church)
43. Blagoveschenskaya Church In Trostyanets (/ Благовещенская Церковь в Тростянце)((Рябина. Николаевская церковь. XIX век, действующая) Wooden church)
44. Храм святых апостолов Петра и Павла в селе Неклюдово(/ Благовещенская Церковь в Тростянце)((Рябина. Николаевская церковь. XIX век, действующая) Wooden church)
45. Epiphany Orthodox church in Novy Velidnyky.(/ Благовещенская Церковь в Тростянце)((Рябина. Николаевская церковь. XIX век, действующая) Wooden church)
46. Вхід до церкви.(/ Благовещенская Церковь в Тростянце)((Рябина. Николаевская церковь. XIX век, действующая) Wooden church)
47. Сільська церква в Купищах.(/ Благовещенская Церковь в Тростянце)((Рябина. Николаевская церковь. XIX век, действующая) Wooden church)
48. The church in the without people village Velyky Klistchy(/ Благовещенская Церковь в Тростянце)((Рябина. Николаевская церковь. XIX век, действующая) Wooden church)
49. Ворсовка. Речка Возня и церковь Николая Чудотворца (/ Vorsovka. Voznya river and the church of St. Nicholas)((Рябина. Николаевская церковь. XIX век, действующая) Wooden church)
50. Костел в селі Лебедівка(/ Vorsovka. Voznya river and the church of St. Nicholas)((Рябина. Николаевская церковь. XIX век, действующая) Wooden church)
51. Мусийки. Церковь Рождества Богородицы. 1904г. (/ Musiyki. Church of the Nativity of the Virgin. 1904)((Рябина. Николаевская церковь. XIX век, действующая) Wooden church)
52. Украинка. Церковь св. Михаила. Кон. 19в. (/ Ukrainka. The Church of St. Michael)((Рябина. Николаевская церковь. XIX век, действующая) Wooden church)
53. Женский монастырь Бенедектинок(/ Ukrainka. The Church of St. Michael)((Рябина. Николаевская церковь. XIX век, действующая) Wooden church)
54. Старые Воробьи. Михайловская церковь. 1897 г. (/ Sparrows Оld. St. Michael\'s Church. 1897 )((Рябина. Николаевская церковь. XIX век, действующая) Wooden church)
55. Обуховичи. Строится новая церковь (/ Obukhovychi. Building a new church)((Рябина. Николаевская церковь. XIX век, действующая) Wooden church)

Красную часть мы вырезали так:

$title = $data2[2];
$pos = 0;
$pos = stripos($title,"(");
if ($pos > 0) {$title = substr($title,0 ,$pos); $info = substr($data2[2],$pos);}

А зеленую вот так:

$pos = 0;
$pos = stripos($title,"/");
if ($pos > 0) {$info2 = substr($data2[2],$pos, strlen($data2[2]) - $pos);$title = substr($title,0 ,$pos);}

Видим вырезанную часть подкрашенную зеленым либо красным.

Теперь в оставшихся названиях все же вырезаем 110 символов, а остальное отбрасываем.

И последний штрих – чистим от символа ►Церква, для этого вырезаем везде такой символ.

Сделаем таким хитрым способом:

if ($num == 191) {$znak = substr($title,0,3); echo $znak;}
if (isset($znak)) $title = str_replace($znak,"",$title);

Еще уберем лишний слеш перед апострофом в украинских названиях:

$title = str_replace("\\'","'",$title);

Теперь формируем запросы SQL для добавления объектов в БД:

Для этого берем пример из БД:

INSERT INTO `koord` (`itemID`, `type`, `koord_txt`, `radius`, `E`, `N`, `photo`, `photos`, `slyder`, `cat_id`, `info`, `raspolog`) VALUES
(1001371, 'Церковь', '50.90077E. 34.77109N', '0.05', 50.9008, 34.7711, '0', '[]', '[]', 0, 'desc', '1645');


INSERT INTO `pe68t_k2_items` (`id`, `title`, `alias`, `catid`, `published`, `introtext`, `fulltext`, `video`, `gallery`, `extra_fields`, `extra_fields_search`, `created`, `created_by`, `created_by_alias`, `checked_out`, `checked_out_time`, `modified`, `modified_by`, `publish_up`, `publish_down`, `trash`, `access`, `ordering`, `featured`, `featured_ordering`, `image_caption`, `image_credits`, `video_caption`, `video_credits`, `hits`, `params`, `metadesc`, `metadata`, `metakey`, `plugins`, `language`) VALUES 
(1001371, 'Церковь Пантелеимона', 'Sumy-Cerkov-Panteleimona', 698, 1, '', '', NULL, NULL, '[{"id":"1","value":"50.90077"},{"id":"2","value":"34.77109"}]', '', '2012-11-04 09:54:12', 218, '', 0, '0000-00-00 00:00:00', '2013-06-25 09:27:52', 218, '2012-11-04 09:54:12', '0000-00-00 00:00:00', 0, 1, 6, 0, 0, '', '', '', '', 77, '{"catItemTitle":"","catItemTitleLinked":"","catItemFeaturedNotice":"","catItemAuthor":"","catItemDateCreated":"","catItemRating":"","catItemImage":"","catItemIntroText":"","catItemExtraFields":"","catItemHits":"","catItemCategory":"","catItemTags":"","catItemAttachments":"","catItemAttachmentsCounter":"","catItemVideo":"","catItemVideoWidth":"","catItemVideoHeight":"","catItemAudioWidth":"","catItemAudioHeight":"","catItemVideoAutoPlay":"","catItemImageGallery":"","catItemDateModified":"","catItemReadMore":"","catItemCommentsAnchor":"","catItemK2Plugins":"","itemDateCreated":"","itemTitle":"","itemFeaturedNotice":"","itemAuthor":"","itemFontResizer":"","itemPrintButton":"","itemEmailButton":"","itemSocialButton":"","itemVideoAnchor":"","itemImageGalleryAnchor":"","itemCommentsAnchor":"","itemRating":"","itemImage":"","itemImgSize":"","itemImageMainCaption":"","itemImageMainCredits":"","itemIntroText":"","itemFullText":"","itemExtraFields":"","itemDateModified":"","itemHits":"","itemCategory":"","itemTags":"","itemAttachments":"","itemAttachmentsCounter":"","itemVideo":"","itemVideoWidth":"","itemVideoHeight":"","itemAudioWidth":"","itemAudioHeight":"","itemVideoAutoPlay":"","itemVideoCaption":"","itemVideoCredits":"","itemImageGallery":"","itemNavigation":"","itemComments":"","itemTwitterButton":"","itemFacebookButton":"","itemGooglePlusOneButton":"","itemAuthorBlock":"","itemAuthorImage":"","itemAuthorDescription":"","itemAuthorURL":"","itemAuthorEmail":"","itemAuthorLatest":"","itemAuthorLatestLimit":"","itemRelated":"","itemRelatedLimit":"","itemRelatedTitle":"","itemRelatedCategory":"","itemRelatedImageSize":"","itemRelatedIntrotext":"","itemRelatedFulltext":"","itemRelatedAuthor":"","itemRelatedMedia":"","itemRelatedImageGallery":"","itemK2Plugins":""}', '', 'robots=\r\nauthor=', '', '', '*');

В самом начале кода очищаем наш файл:

file_put_contents("new_object_hram_pe68t_k2_items.sql","");
file_put_contents("new_object_hram_koord.sql","");

И добавляем такие строки:

$id=1100000+$num;
$sql1="INSERT INTO `koord` (`itemID`, `type`, `koord_txt`, `radius`, `E`, `N`, `photo`, `photos`, `slyder`, `cat_id`, `info`, `raspolog`) VALUES
(".$id.", 'object_pan', '".$data2[0].". ".$data2[1]."', '0.05', ".$data2[0].", ".$data2[1].", '', '', '', 0, '".str_replace("'","''",$desc)."', '');\r\n";

$sql2="INSERT INTO `pe68t_k2_items` (`id`, `title`, `alias`, `catid`, `published`, `introtext`, `fulltext`, `video`, `gallery`, `extra_fields`, `extra_fields_search`, `created`, `created_by`, `created_by_alias`, `checked_out`, `checked_out_time`, `modified`, `modified_by`, `publish_up`, `publish_down`, `trash`, `access`, `ordering`, `featured`, `featured_ordering`, `image_caption`, `image_credits`, `video_caption`, `video_credits`, `hits`, `params`, `metadesc`, `metadata`, `metakey`, `plugins`, `language`) VALUES
(".$id.", '".str_replace("'","''",$title)."', '".mb_strtolower(str2url(str_replace("'","",$title)))."', 698, 1, '', '', NULL, NULL, '".'[{"id":"1","value":"'.$data2[0].'"},{"id":"2","value":"'.$data2[1].'"}]'."', '', '2015-08-01 08:37:12', 218, '', 0, '0000-00-00 00:00:00', '0000-00-00 00:00:00', 218, '0000-00-00 00:00:00', '0000-00-00 00:00:00', 0, 1, 6, 0, 0, '', '', '', '', 77, '".'{"catItemTitle":"","catItemTitleLinked":"","catItemFeaturedNotice":"","catItemAuthor":"","catItemDateCreated":"","catItemRating":"","catItemImage":"","catItemIntroText":"","catItemExtraFields":"","catItemHits":"","catItemCategory":"","catItemTags":"","catItemAttachments":"","catItemAttachmentsCounter":"","catItemVideo":"","catItemVideoWidth":"","catItemVideoHeight":"","catItemAudioWidth":"","catItemAudioHeight":"","catItemVideoAutoPlay":"","catItemImageGallery":"","catItemDateModified":"","catItemReadMore":"","catItemCommentsAnchor":"","catItemK2Plugins":"","itemDateCreated":"","itemTitle":"","itemFeaturedNotice":"","itemAuthor":"","itemFontResizer":"","itemPrintButton":"","itemEmailButton":"","itemSocialButton":"","itemVideoAnchor":"","itemImageGalleryAnchor":"","itemCommentsAnchor":"","itemRating":"","itemImage":"","itemImgSize":"","itemImageMainCaption":"","itemImageMainCredits":"","itemIntroText":"","itemFullText":"","itemExtraFields":"","itemDateModified":"","itemHits":"","itemCategory":"","itemTags":"","itemAttachments":"","itemAttachmentsCounter":"","itemVideo":"","itemVideoWidth":"","itemVideoHeight":"","itemAudioWidth":"","itemAudioHeight":"","itemVideoAutoPlay":"","itemVideoCaption":"","itemVideoCredits":"","itemImageGallery":"","itemNavigation":"","itemComments":"","itemTwitterButton":"","itemFacebookButton":"","itemGooglePlusOneButton":"","itemAuthorBlock":"","itemAuthorImage":"","itemAuthorDescription":"","itemAuthorURL":"","itemAuthorEmail":"","itemAuthorLatest":"","itemAuthorLatestLimit":"","itemRelated":"","itemRelatedLimit":"","itemRelatedTitle":"","itemRelatedCategory":"","itemRelatedImageSize":"","itemRelatedIntrotext":"","itemRelatedFulltext":"","itemRelatedAuthor":"","itemRelatedMedia":"","itemRelatedImageGallery":"","itemK2Plugins":""}'."', '', 'robots=\r\nauthor=', '', '', '*');\r\n";

file_put_contents("new_object_hram_koord.sql",$sql1."\r\n",FILE_APPEND | LOCK_EX);
file_put_contents("new_object_hram_pe68t_k2_items.sql",$sql2."\r\n",FILE_APPEND | LOCK_EX);

После запуска скрипта получаем два дампа БД:hram-ua.com/new_object_hram_koord.sql и hram-ua.com/new_object_hram_pe68t_k2_items.sql

Проверяем корректность, добавляем по одному объекту вручную и смотрим все ли правильно отображается на старнице:

добавление объекта через БД


и


добавление нескоьких объектов

И теперь импортируем в базу.

mysql -uroot -p -f galleryua_hramua < /var/www/gallery/data/www/hram-ua.com/new_object_hram_koord.sql



и

mysql -uroot -p -f galleryua_hramua < /var/www/gallery/data/www/hram-ua.com/new_object_hram_pe68t_k2_items.sql

После этого проходимся по всем страницам категории http://hram-ua.com/places/ чтобы перестроились адреса URL в модуле 404sef и чистим кэш БД.

Теперь снимаем с публикации все материалы, кроме 16 первых штук:

UPDATE  `galleryua_hramua`.`pe68t_k2_items` SET  `published` =  '0' WHERE  `pe68t_k2_items`.`id` > 1100016 AND `pe68t_k2_items`.`id` < 1200016;

обновление всех записей

Создаем файл автопубликации для cron: hram-ua.com/public_new_object_hram.php

Добавляем такие строки:

$time_now = time() - rand(0,3600);
//echo "UPDATE  `".$database."`.`pe68t_k2_items` SET  `access` =  '1' WHERE  `access` =  '2' ORDER BY  `hits` DESC  LIMIT 1";
$query = "UPDATE  `".$database."`.`pe68t_k2_items` SET  `created` =  '".date("Y-m-d H:i:s",$time_now)."' WHERE  `id` > 1100000 AND `id` < 1200000 AND `published` =  '0' ORDER BY  `hits` DESC  LIMIT 1";
echo $query."<br>";
$res = mysql_query($query);
$query = "UPDATE  `".$database."`.`pe68t_k2_items` SET  `published` =  '1', `published` = 1 WHERE  `id` > 1100000 AND `id` < 1200000 AND `published` =  '0' ORDER BY  `hits` DESC LIMIT 1";
$res = mysql_query($query);
echo $query."<br>";

После сохранения файла, проверяем, что он работает правильно и «вешаем» его на cron.

И настраиваем запуск 7 раз в день:

настройка cron

Еще осталось не много. Нужно обновить расположение объекта в БД. Для этого запускаем скрипт http://hram-ua.com/koord_api_update_raspolog.php

И копируем все строки, начиная с id 1100000:

копирование строк

По окончанию импорта файл new_object_hram.txt переименовываем на new_object_hram.txt-1-08-2015, чтобы новые данные вставлялись в новый файл.

Объекты можно редактировать:

страница с местоположением

координаты места

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