Модуль полуавтоматического наполнения

MSE-Script

Developer
Команда форума
Сообщения
867
Реакции
309
Классическим способом наполнения сайтов в CMS MSE-Script является древовидная сеть ссылок, при переходе по которым генерируются новые страницы. Поисковый робот или пользователь переходит на главную страницу сайта, видит ссылки на внутренние страницы, переходит и индексирует их. В момент перехода производится поиск контента и сохранение его на сайт. Такой подход позволяет за короткий срок наполнить сайт актуальным контентом в больших количествах. Однако, имеет ряд недостатков:

1. Невозможность контролировать процесс наполнения - контент создается постоянно. Для остановки процесса потребуется убрать всю перелинковку между страницами.

2. Большой объем БД - При высокой активности пользователей и ботов контент будет генерироваться большими объемами, затрачивая ресурсы сервера. Работа с БД, в которой хранится несколько млн. сохраненных треков будет ощутимо нагружать процессор сервера.

3. Однотипность URL - для корректной работы парсера, URL должны содержать в себе необходимые для парсинга данные, например ID трека на источнике.

Наполнение сайта в полуавтоматическом режиме позволит полностью контролировать процесс наполнения, сохранить ресурсы сервера и создавать URL практически любого формата. Логика такого режима проста - отключить парсинг треков по URL и настроить загрузку новинок с источника.

Как перенастроить сайт в режим полуавтоматического наполнения?

Для начала загрузите модуль в корневую директорию своего сайта и добавьте в CRON задачу:
php -f /путь_к_сайту/modules/zv_tracks_parser.php, например, раз в сутки. В указанное время модуль будет подключаться в источнику и проверять, появились ли на нем новые треки. При наличии новых треков, они будут сохранены на сайт. Еще одним достоинством такого способа наполнения, является возможность сохранения треков с разных источников одновременно. Если ваша БД полностью пуста, потребуется добавить хотя бы 1 трек классическим или ручным способом, так как “отсчет” новых треков начинается с последнего сохраненного.

Следующим этапом потребуется отключить парсинг треков по URL, если трек не был сохранен в БД. Для этого в файле core/track.php найдите:
PHP:
$this->track = $this->MSE->getTrackData($this->url);
и замените на:
PHP:
 $this->createError('no_track');
Теперь скрипт не будет искать трек по ссылке и ответит ошибкой 404.

Заключительным этапом потребуется изменить текущую структуру ссылок, чтобы избежать ошибок 404. Список треков на главной странице можно выводить из последних сохраненных, включив соответствующую опцию в админке (для версии 3.3). Также, потребуется включить “режим поиска по локальной БД”. Если результатов поиска по БД мало, можно удалить все ссылке в шаблонах track-list.tpl, track-ajax.tpl и продолжать парсить источник.

Настройка модуля:
Модуль настраивается в файле modules/zv_tracks_parser.php в массиве $config
PHP:
$config = [
   'max_iterations'  => 20 // Максимальное кол-во проверяемых треков
];
'add_id' => 1, - Добавлять ID ресурса в URL (1 - да, 0 - нет)
'save_artist' => 1, - Сохранять новых исполнителей (1 - да, 0 - нет)
'save_album' => 1, - Сохранять новые альбомы (1 - да, 0 - нет)
'max_iterations' => 20, - Максимальное кол-во новых треков на 1 запуск (целое число)
'min_year' => null, - Минимально допустимый год выхода трека (целое число, например 2019)

Совместимость:
zv_poster.zip совместим с версиями 3.3 и ниже
zv_poster_2.1 совместим с версиями 3.4 и выше

Обновление 4.05.2020
- Адаптация модуля под версию 3.4

Обновление 11.05.2020
- Добавлена возможность сохранения новых альбомов
- Добавлена возможность сохранения треков с минимально допустимым годом выхода
 

Вложения

Последнее редактирование:

MSE-Script

Developer
Команда форума
Сообщения
867
Реакции
309
Обновление 4.05.2020
- Адаптация модуля под версию 3.4
 

MSE-Script

Developer
Команда форума
Сообщения
867
Реакции
309
Обновление 11.05.2020
- Добавлена возможность сохранения новых альбомов
- Добавлена возможность сохранения треков с минимально допустимым годом выхода
 

ushkom

Ветеран
Клиент
Сообщения
122
Реакции
10
Работает по крону уже неделю дважды в день, в отчете постоянно написано: Новых треков пока нет. Скорее всего что то не так. Единственное не делал
$this->track = $this->MSE->getTrackData($this->url);
заменить на
$this->createError('no_track');
 

ushkom

Ветеран
Клиент
Сообщения
122
Реакции
10
Добрый день. Помогите пожалуйста с модулем
 

MSE-Script

Developer
Команда форума
Сообщения
867
Реакции
309
@ushkom, Добрый. Для начала, стоит описать ситуацию более детально и прикрепить логи.
 

ushkom

Ветеран
Клиент
Сообщения
122
Реакции
10
При запуске постоянно: Новых треков пока нет

В логах:

Код:
[Fri Aug 07 14:40:14.117629 2020] [fcgid:warn] [pid 31200] [client 157.55.39.168:57192] mod_fcgid: stderr: PHP Notice:  Undefined index: keywords in /home/admin/web/musicat.net/public_html/cache/ec9a962ba78153cb62b3dadf8e6795e4ccbab24a_0.file.header.tpl.php on line 29
[Fri Aug 07 14:40:14.117740 2020] [fcgid:warn] [pid 31200] [client 157.55.39.168:57192] mod_fcgid: stderr: PHP Notice:  Undefined index: results in /home/admin/web/musicat.net/public_html/cache/ec9a962ba78153cb62b3dadf8e6795e4ccbab24a_0.file.header.tpl.php on line 47
[Fri Aug 07 14:40:14.117748 2020] [fcgid:warn] [pid 31200] [client 157.55.39.168:57192] mod_fcgid: stderr: PHP Notice:  Trying to get property of non-object in /home/admin/web/musicat.net/public_html/cache/ec9a962ba78153cb62b3dadf8e6795e4ccbab24a_0.file.header.tpl.php on line 47
[Fri Aug 07 14:40:38.564826 2020] [fcgid:warn] [pid 2479] [client 40.77.167.56:57340] mod_fcgid: stderr: PHP Notice:  Undefined index: keywords in /home/admin/web/musicat.net/public_html/cache/ec9a962ba78153cb62b3dadf8e6795e4ccbab24a_0.file.header.tpl.php on line 29
[Fri Aug 07 14:40:38.564892 2020] [fcgid:warn] [pid 2479] [client 40.77.167.56:57340] mod_fcgid: stderr: PHP Notice:  Undefined index: results in /home/admin/web/musicat.net/public_html/cache/ec9a962ba78153cb62b3dadf8e6795e4ccbab24a_0.file.header.tpl.php on line 47
[Fri Aug 07 14:40:38.564897 2020] [fcgid:warn] [pid 2479] [client 40.77.167.56:57340] mod_fcgid: stderr: PHP Notice:  Trying to get property of non-object in /home/admin/web/musicat.net/public_html/cache/ec9a962ba78153cb62b3dadf8e6795e4ccbab24a_0.file.header.tpl.php on line 47
[Fri Aug 07 14:40:48.908515 2020] [fcgid:warn] [pid 28873] [client 2a00:bdc0:4:10d:2:0:613:115:57424] mod_fcgid: stderr: PHP Warning:  DOMDocument::createElement(): unterminated entity reference          Selau) in /home/admin/web/musicat.net/public_html/app/Controllers/Rss.php on line 98
[Fri Aug 07 14:40:48.908594 2020] [fcgid:warn] [pid 28873] [client 2a00:bdc0:4:10d:2:0:613:115:57424] mod_fcgid: stderr: PHP Warning:  DOMDocument::createElement(): unterminated entity reference  Selau)\xc2\xbb - \xd1\x81\xd0\xbb\xd1\x83\xd1\x88\xd0\xb0\xd1\x82\xd1\x8c \xd0\xbe\xd0\xbd\xd0\xbb\xd0\xb0\xd0\xb9\xd0\xbd, \xd1\x81\xd0\xba\xd0\xb0\xd1\x87\xd0\xb0\xd1\x82\xd1\x8c mp3 \xd0\xbd\xd0\xb0 \xd1\x82\xd0\xb5\xd0\xbb\xd0\xb5\xd1\x84\xd0\xbe\xd0\xbd \xd0\xb1\xd0\xb5\xd1\x81\xd0\xbf\xd0\xbb\xd0\xb0\xd1\x82\xd0\xbd\xd0\xbe</strong></p><p>\xd0\xa3 \xd1\x8d\xd1\x82\xd0\xbe\xd0\xb3\xd0\xbe \xd0\xb0\xd0\xb2\xd1\x82\xd0\xbe\xd1\x80\xd0\xb0 \xd0\xb5\xd1\x81\xd1\x82\xd1\x8c \xd0\xb5\xd1\x89\xd1\x91 \xd0\xbd\xd0\xb5\xd1\x81\xd0\xba\xd0\xbe\xd0\xbb\xd1\x8c\xd0\xba\xd0\xbe \xd0\xb8\xd0\xbd\xd1\x82\xd0\xb5\xd1\x80\xd0\xb5\xd1\x81\xd0\xbd\xd1\x8b\xd1\x85 \xd0\xbd\xd0\xbe\xd0\xb2\xd0\xb8\xd0\xbd\xd0\xbe\xd0\xba, \xd0\xba\xd0\xbe\xd1\x82\xd0\xbe\xd1\x80\xd1\x8b\xd0\xb5, \xd0\xb2\xd0\xbe\xd0\xb7\xd0\xbc\xd0\xbe\xd0\xb6\xd0\xbd\xd0\xbe, \xd0\xb2\xd0\xb0\xd0\xbc \xd0\xbf\xd0\xbe\xd0\xbd\xd1\x80\xd0\xb0\xd0\xb2\xd1\x8f\xd1\x82\xd1\x81\xd1\x8f. \xd0\x94\xd0\xbb\xd1\x8f \xd1\x82\xd0\xbe\xd0\xb3\xd0\xbe \xd1\x87\xd1\x82\xd0\xbe\xd0\xb1\xd1\x8b \xd0\xb2\xd1\x8b\xd0\xb1\xd1\x80\xd0\xb0\xd1\x82\xd1\x8c \xd0\xbd\xd0\xb0\xd0\xb8\xd0\xb1\xd0\xbe\xd0\xbb\xd0\xb5\xd0\xb5 \xd0\xb8\xd0\xbd\xd1\x82\xd0\xb5\xd1\x80\xd0\xb5\xd1\x81\xd0\xbd\xd1\x8b\xd0\xb5, \xd0\xbf\xd0\xb5\xd1\x80\xd0\xb5\xd0\xb9\xd0\xb4\xd0\xb8\xd1\x82\xd0\xb5 \xd0\xb2 \xd1\x80\xd0\xb0\xd0\xb7\xd0\xb4\xd0\xb5\xd0\xbb \xd0\xb8\xd1\x81\xd0\xbf\xd0\xbe\xd0\xbb\xd0\xbd\xd0\xb8\xd1\x82\xd0\xb5\xd0\xbb\xd1\x8f, \xd0\xb2\xd0\xbe\xd1\x81\xd0\xbf\xd0\xbe\xd0\xbb\xd1\x8c\xd0\xb7\xd0\xbe\xd0\xb2\xd0\xb0\xd0\xb2\xd1\x88\xd0\xb8\xd1\x81\xd1\x8c \xd1\x81\xd1\x82\xd1\x80\xd0\xbe\xd0\xba\xd0\xbe\xd0\xb9 \xd0\xbf\xd0\xbe\xd0\xb8\xd1\x81\xd0\xba\xd0\xb0 \xd0\xb8\xd0\xbb\xd0\xb8 \xd0\xbf\xd1\x80\xd0\xbe\xd1\x81\xd1\x82\xd0\xbe \xd0\xba\xd0\xbb\xd0\xb8\xd0\xba\xd0\xbd\xd0\xb8\xd1\x82\xd0\xb5 \xd0\xbd\xd0\xb0 \xd0\xb8\xd0\xbc\xd1\x8f \xd0\xb0\xd0\xb2\xd1\x82\xd0\xbe\xd1\x80\xd0\xb0. \xd0\x9d\xd0\xb0 \xd0\xb5\xd0\xb3\xd0\xbe \xd1\x81\xd1\x82\xd1\x80\xd0\xb0\xd0\xbd\xd0\xb8\xd1\x87\xd0\xba\xd0\xb5 \xd0\xb2\xd1\x8b \xd1\x81\xd0\xbc\xd0\xbe\xd0\xb6\xd0\xb5\xd1\x82\xd0\xb5 \xd0\xbd\xd0\xb0\xd0\xb9\xd1\x82\xd0\xb8 \xd1\x81\xd0\xb2\xd0\xb5\xd0\xb6\xd0\xb8\xd0\xb5 \xd1\x85\xd0\xb8\xd1\x82\xd1\x8b, \xd0\xb4\xd0\xbe\xd1\x81\xd1\x82\xd1\x83\xd0\xbf\xd0\xbd\xd1\x8b\xd0\xb5 \xd0\xb4\xd0\xbb\xd1\x8f \xd1\x81\xd0\xba\xd0\xb0\xd1\x87\xd0\xb8\xd0\xb2\xd0\xb0\xd0\xbd\xd0\xb8\xd1\x8f.</p><p>\xc2\xa9 \xd0\x9c\xd1\x83\xd0\xb7\xd1\x8b\xd0\xba\xd0\xb0\xd0\xbb\xd1\x8c\xd0\xbd\xd1\x8b\xd0\xb9 \xd0\x9a\xd0\xbe\xd1\x82</p><p><strong>\xd0\xa1\xd0\xba\xd0\xb0\xd1\x87\xd0\xb0\xd1\x82\xd1\x8c \xd0\xb1\xd0\xb5\xd1\x81\xd0\xbf\xd0\xbb\xd0\xb0\xd1\x82\xd0\xbd\xd0\xbe \xd0\xbf\xd0\xb5\xd1\x81\xd0\xbd\xd1\x8e \xc2\xabSelau - Say My Name (feat. Jesse James, La & Selau)\xc2\xbb \xd0\xbd\xd0\xb0 \xd0\xbc\xd0\xbe\xd0\xb1\xd0\xb8\xd0\xbb\xd1\x8c\xd0\xbd\xd1\x8b\xd0\xb9 \xd1\x82\xd0\xb5\xd0\xbb\xd0\xb5\xd1\x84\xd0\xbe\xd0\xbd \xd0\xb2 \xd1\x84\xd0\xbe\xd1\x80\xd0\xbc\xd0\xb0\xd1\x82\xd0\xb5 mp3, \xd0\xb4\xd0\xbb\xd1\x8f Android \xd0\xb8 iOS \xd1 in /home/admin/web/musicat.net/public_html/app/Controllers/Rss.php on line 98
 

MSE-Script

Developer
Команда форума
Сообщения
867
Реакции
309
В файле app/Core/ZvookUtils.php после:
PHP:
$new_tid = $last_tid + $i;
вставить:
PHP:
print('Новый ID: ' . $new_tid);

перед:
PHP:
if (!$result)
вставить:
PHP:
print('Результат: ' . $result ? "Получен \n" : "Не получен \n");

после:
PHP:
$insert_id = $this->track_controller->saveTrack();
вставить:
PHP:
print("Результат вставки: {$insert_id} \n");
 
Последнее редактирование:

ushkom

Ветеран
Клиент
Сообщения
122
Реакции
10
Спасибо. Теперь выводит так:
Код:
Новый ID: 7646719Получен Новый ID: 7646720Получен Новый ID: 7646721Получен Новый ID: 7646722Получен Новый ID: 7646723Получен Новый ID: 7646724Получен Новый ID: 7646725Получен Новый ID: 7646726Получен Новый ID: 7646727Получен Новый ID: 7646728Получен Новый ID: 7646729Получен Новый ID: 7646730Получен Новый ID: 7646731Получен Новый ID: 7646732Получен Новый ID: 7646733Получен Новый ID: 7646734Получен Новый ID: 7646735Получен Новый ID: 7646736Получен Новый ID: 7646737Получен Новых треков пока нет
Получается работает?
 

ushkom

Ветеран
Клиент
Сообщения
122
Реакции
10
Хотя при повторном запуске выводит тоже самое, те же id
 

MSE-Script

Developer
Команда форума
Сообщения
867
Реакции
309
@ushkom, Модуль работает корректно. Какие установлены настройки модуля?
 

ushkom

Ветеран
Клиент
Сообщения
122
Реакции
10
По умолчанию
Код:
$config = [
   'add_id' => 1, // Добавлять ID ресурса в URL (1 - да, 0 - нет)
   'save_artist' => 1, // Сохранять новых исполнителей (1 - да, 0 - нет)
   'save_album' => 1, // Сохранять новые альбомы (1 - да, 0 - нет)
   'max_iterations' => 20, // Максимальное кол-во новых треков на 1 запуск (целое число)
   'min_year' => null // Минимально допустимый год выхода трека (целое число, например 2019)
];
 

ushkom

Ветеран
Клиент
Сообщения
122
Реакции
10
Код:
    * Сохранение полученного трека в БД
    *
    * @param array $result    - Массив с данными трека из парсера
    * @return int             - ID созданного трека
    */
   protected function saveTrack (array $result)
   {
      // Подготовка
      $track = $this->track_controller->createNewTrack($result);
      $url = preg_replace(["#{artist}#", "#{name}#"], [$track['artist']['name'], $track['name']], $this->MSE->config['track_url']);
      $track['url'] = Utils::prepareUrl($url);
      $this->track_controller->track = $track;
      $insert_id = $this->track_controller->saveTrack();
      print("Результат вставки: {$insert_id} \n");
Сейчас кеш почищу

Все тоже самое
 

MSE-Script

Developer
Команда форума
Сообщения
867
Реакции
309
@ushkom, В файле app/Core/ZvookUtils.php

найти:
SQL:
SELECT MAX(tid) FROM `tracks`
заменить на:
SQL:
SELECT MAX(0 + tid) FROM `tracks`
Настройки модуля можно вернуть к стандартным.
 

ushkom

Ветеран
Клиент
Сообщения
122
Реакции
10
Спасибо за отклик
Теперь выводит так:
Код:
Новый ID: 1Результат вставки: 0 Новый ID: 2Результат вставки: 0 Новый ID: 3Результат вставки: 0 Новый ID: 4Результат вставки: 0 Новый ID: 5Результат вставки: 0 Новый ID: 6Результат вставки: 0 Новый ID: 7Результат вставки: 0 Новый ID: 8Результат вставки: 0 Новый ID: 9Результат вставки: 0 Новый ID: 10Результат вставки: 0 Новый ID: 11Результат вставки: 0 Новый ID: 12Результат вставки: 0 Новый ID: 13Результат вставки: 0 Новый ID: 14Результат вставки: 0 Новый ID: 15Результат вставки: 0 Новый ID: 16Результат вставки: 0 Новый ID: 17Результат вставки: 0 Новый ID: 18Результат вставки: 0 Новый ID: 19Результат вставки: 0 Новых треков пока нет
При повторе тоже самое
 

MSE-Script

Developer
Команда форума
Сообщения
867
Реакции
309
Последовательно выполните запросы:

SELECT MAX(tid) FROM `tracks`
ALTER TABLE `tracks` CHANGE `tid` `tid` BIGINT(255) NULL DEFAULT NULL;
SELECT MAX(tid) FROM `tracks`

Результаты выполнения 1 и 3 запроса прикрепите сюда.
 
Последнее редактирование:

ushkom

Ветеран
Клиент
Сообщения
122
Реакции
10
Второй запрос долго выполняется и выдает в конце #2006 - MySQL server has gone away
 
K

Kemat

Guest
помогите пожалуйста с модулем не могу разобраться
 
Сверху