Сайт провинциального самурая

Сайт провинциального самурая

Импортирование контента Портатором. Как оно происходит?

Как происходит импорт контента :

Занимается импортированием контента скрипт synchro.php

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

Если список новых артиклей просматривался более, чем 12 часов назад, то скрипт ходит на сайт донора, и смотрит в этот список, помечая для себя УРЛы новеньких, пока ещё неизвестных ему артиклей.

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

При импорте артиклей скрипт следит, чтобы они были уникальными по названию. С отсеиванием дублей.

Откуда происходит импорт контента :

В принципе, носитель информации безразличен- это может быть и RSS лента, и сам сайт. Однако практическая работа натолкнула вот на какую мысль:

RSS лента, как правило, имеет ограниченный объём (допустим, 20 ссылок на заметки), и чаще всего заполнена анонсами по разным темам. Владельцу же Портатора все подряд темы не интересны, ему нужна определённая тематика.

Вполне может оказаться, что не все новые статьи по этой тематике попадают в RSS ленту. Более того, сама лента обновляется не в реальном режиме времени (новая статья появилась, в ленте её пока нет). И то, и другое плохо.

Представляется целесообразным брать список новостей прямо с сайта. Данный Портатор склонен так и делать, игнорируя RSS ленты. Причины названы.

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

Варианты импорта контента :

Вы можете создать задание Крону, дабы тот периодически запускал синхронизатор контента, либо не заморачиваться с Кроном вообще, импортируя контент с помощью посетителей, перемещающихся в пределах сайта.

Вариант с Кроном надёжней. Если мы приблизительно знаем, что за сутки в наш Портатор заносится 50 новых артиклей, то запуска Крона пару раз в час нам за глаза хватит. Запускать чаще файл синхронизатора не имеет смысла.

Однако есть и неприятный момент- запуск Крона довольно ресурсоёмок, кушает ресурсы процессора, и даже если Вы будете этим самым Кроном слать письмо с одной строчкой (то есть своим РНР приложением создавать нулевую нагрузку на вычислительные мощности хостера), тот может сделать Вам предъяву: перегрузка вычислительных мощностей сверх разрешённого лимита. Хотя ничего, кроме самого Крона, Вами не юзается. Никаких ресурсоёмких приложений.

Если же Вы вознамеритесь сотворить множество Портаторов на своём хостинге, путём создания кучки сайтов на присоединённых доменах, то запусков Крона будет уже не 50 в сутки, а сотни. Между тем многие хостеры в Раше имеют лимит на 4 запуска Крона в час. Видимо, не случайно.

Другими словами говоря, Крон, конечно, штука хорошая, но только на хорошем же, мощном хостере. Который не боится ежеминутного Крона. 90% русских хостеров за ежеминутный Крон убивают аккаунт. Чтоб Вы знали.

Вот такая присказка.

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

Использование Крона :

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

Вам надлежит посетить этот пункт меню, и сотворить задание, подобное указанному в примере:

Команда для выполнения:

Минута(ы):
Час(ы):
День(Дни):
Месяц(ы):
День недели(Дни недели):

Обратите внимание на строчку задания Крону- там указан метод wget, URL самого файла, а также директива убиения всего, что скажет скрипт в браузер (вывод на нулевое устройство).

В случае юниксового интерфейса озадачивание Крона проистекает иначе:


У меня хостинг c хрестоматийным синтаксисом. Однако вовсе не факт, что у Вас этот синтаксис также будет применим- про правильный синтаксис Крона ведает только суппорт хостера, очень любящий измываться над пользователями, посылая их читать форумы и факи, на которых обычно и не содержится никакой толковой информации в ясном и понятном изложении.

Чтобы Вам не было сильно грустно, опубликую подсказки:

  1. GET http://portator.name/synchro.php
  2. curl -s http://portator.name/synchro.php
  3. wget -q http://portator.name/synchro.php -O /dev/null
  4. wget -O /dev/null http://portator.name/synchro.php
  5. /usr/local/bin/wget -q -O /dev/null http://portator.name/synchro.php
  6. /usr/bin/lynx -dump http://portator.name/synchro.php > /dev/null
  7. /usr/local/bin/lynx -dump http://portator.name/synchro.php > /dev/null
  8. ... - вариантов тьма.

Пожалуйста, спрашивайте своего хостера про правильный синтаксис- выдумывать его можно очень долго.

Если все попытки запуска модуля синхронизации как УРЛа натыкаются на возражения хостера про то, что так делать нельзя, и надо непременно юзать относительный путь, то не покупайтесь на это. Потому что тут Вы споткнётесь о права доступа. Модуль синхронизации обязан создавать файлы с правами Апача, а Крон с его относительным путём имеет права юзера, которые меньше, чем права Апача, а потому такой "локальный" Крон и вовсе зачастую бесполезен, особенно под сейфмодой.

Последним шансом на неправильном хостере с неправильным Кроном будет создание вот такого файлика (УРЛ, естественно, должен быть каким надо):

<?php die(file_get_contents("http://portator.name/synchro.php")); ?>

и запуск его из-под неправильного Крона.

Однако страдать таким онанизмом надо в последнюю очередь- возможность запуска УРЛа по Крону должна быть.

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

# Способ импорта - Крон или ифрейм.
# Возможные значения: cron либо iframe
# Если импорт вообще не нужен, укажите значение none
   $_s['importer']="cron";

Обойдёмся без Крона :

При импорте контента Портатором самостоятельно, без Крона, переменной надо дать другое значение:

# Способ импорта - Крон или ифрейм.
# Возможные значения: cron либо iframe
# Если импорт вообще не нужен, укажите значение none
   $_s['importer']="iframe";

Примечание :

Обращение браузером к файлу synchro.php в директории Портатора должно выдавать в окно браузера рапорт скрипта, без всяких ошибок (если вывод в браузер разрешён с помощью переменной $tt в сеттингах). И если скрипту есть что тянуть с донорских ресурсов, утянутые артикли должны тотчас появляться в соответствующих папках Портатора.

Если же обращение к указанному файлу браузером при утаскивании контента с удалённого сайта дает на экран варнинг про Permissions, но Вы точно знаете, что права доступа выставили корректно, в соответствии с мануалом, то это происки сейфмоды- для неё есть специальный раздел в навигации.