Парсер XML -> JSON -> MySQL на PHP. Как я переносил комментарии из HyperComments в базу данных MaxSite CMS.

Декабрь, 08th 2017Рубрика: Web 9494
Подписаться на комментарии по RSS

программирование на macbook

Программирование - занятие довольно интересное, особенно когда начинает получаться и видишь желаемый результат. Я не считаю себя программистом на php, однако время от времени приходится изобретать костыли и велосипеды чтобы решить какую-то задачу. Конечно, хочется нормально освоить данный язык, чтобы не убивать целый вечер (а то и не один) на написание своих маленьких скриптов, но времени на всё катастрофически не хватает.

Два года назад, для пробы, в качестве дополнительной системы комментариев, я установил HyperComments. В выборах участвовали также DISQUS, VK и Cackle, и с тех пор, особых изменений на данном рынке не случилось, разве что Cackle стал чуточку привлекательнее.

По большому счёту, никаких дополнительных "плюшек" в развитие блога сторонняя система комментариев не добавила, возможно потому что пользовался бесплатной версией, а может на данном этапе это просто ни к чему. В результате получилось расслоение - часть комментариев была в "родной" системе, другая - хранилась в системе HyperComments.

Надо отдать должное, что даже при бесплатном использовании HyperComments позволяет выгрузить свои данные в формате xml. Ну а дальше, делайте с ними что хотите... собственно, комментариев в этой системе, у меня было не так уж и много - чуть более 600 штук. Одно время сыпалось довольно много спама и система HyperComments, как-то не сильно этому противодействовала. Приходилось вручную удалять и помечать как спам, по 30-40 сообщений в день, с предложением быстрых заработков и прочей ерунды.

Встал вопрос - забить на эти комменты или попытаться перекинуть их в родную базу движка MaxSite CMS (да, я всё ещё никуда не переехал). Обезьяний путь с переносом данных вручную отметив сразу, решив попробовать свои силы в написании парсера на PHP из XML в MySQL базу. Потратил я на это занятие весь вчерашний вечер, заодно открыв много для себя нового. Результатом трудов стал небольшой скрипт (пусть и достаточно кривой, с точки зрения продвинутых PHP-программистов, но сделавший нужную мне работу). Что-то я не знал как сделать иначе, потому оно написано именно так, возможно кому пригодится. Оставляйте комментарии, будет интересно узнать мнение профессионалов.

<?php
//подключение к базе данных
$OnConnectServer = mysql_connect('localhost', 'database_user', 'database_password')
       or die ('Not connected : ' . mysql_error());
mysql_select_db('database_name',$OnConnectServer);
//формируем именованный массив url_page=>id_page
$pages=array();
$query="SELECT page_id,page_slug from mso_page";
$res = mysql_query($query);
while ($row=mysql_fetch_array($res)){
   $pages[$row['page_slug']]=$row['page_id'];
}
//подгружаем наш файл комментариев из xml
$xml = simplexml_load_file('/путь/к/файлу/comments.xml');
//переводим его из xml в json
$json = json_encode($xml);
//формируем массив из json
$data = json_decode($json,TRUE);
//можно проверить как сформировался массив
//var_dump($data);
//счётчик количества обработанных комментариев
$i=0;
foreach($data['post'] as $post) {
    foreach ($post['comments'] as $arrcomment) {
      //проверяю наличие у поста массива комментариев (велосипед, но работает) 
      if (isset($arrcomment[0]['nick'])) {
        foreach ($arrcomment as $comment) {
          //hipercomments выгрузил даты в формате
          //'Sun, 22 Feb 2015 19:40:46 GMT',
          //а требуется '2015-02-22 19:40:46'
          $d1 = strtotime($comment['time']);
          $date = date("Y-m-d h:i:s", $d1);
          $url=$post['url'];
          //формируем запрос
          $query = "INSERT INTO mso_comments (comments_page_id, comments_parent_id, comments_users_id, comments_comusers_id, comments_author_name, comments_author_ip, comments_date, comments_content, comments_rating, comments_approved) VALUES ('$pages[$url]',0,0,0,'$comment[nick]','$comment[ip]','$date','$comment[text]',0,1)";
          //вываливаем на экран для проверки и если всё норм, пишем в базу
          echo $query."\n";
          //mysql_query($query); 
          $i++;
        }
      }
      else {
        $d1 = strtotime($arrcomment['time']);
        $date = date("Y-m-d h:i:s", $d1);
        $url=$post['url'];
        $query = "INSERT INTO mso_comments (comments_page_id, comments_parent_id, comments_users_id, comments_comusers_id, comments_author_name, comments_author_ip, comments_date, comments_content, comments_rating, comments_approved) VALUES ('$pages[$url]',0,0,0,'$arrcomment[nick]','$arrcomment[ip]','$date','$arrcomment[text]',0,1)";
        echo $query."\n";
        //mysql_query($query);
        $i++;
      }
      
    }
}
echo "всего:".$i;
?>
Подписывайтесь на канал Яндекс.Дзен и узнавайте первыми о новых материалах, опубликованных на сайте.

Если считаете статью полезной,
не ленитесь ставить лайки и делиться с друзьями.

Комментариев: 1

  1. 2017-12-08 в 16:02:17 | Просто прохожий

    Блин, что я сейчас прочитал? Такое ощущение что я с другой планеты. Как вообще можно что-то понимать в этих ероглифах? Для меня все эти программы чертова магия :)

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