Определить, когда песня меняется на сервере Shoutcast

У меня есть скрипт, который читает последнюю строку файла журнала для моей радиостанции, используя следующую команду.

watch -n 1 php script.php

Эта команда выполняет мой скрипт с интервалом в 1 секунду. У журнала, который читает этот скрипт, есть выходные данные, перечисленные ниже.

2016-04-28 23:30:34 INFO    [ADMINCGI sid=1] Title updated [Bankroll Fresh Feat. Street Money Boochie - Get It]
2016-04-28 23:30:34 INFO    [ADMINCGI sid=1] DJ name updated [1]
2016-04-28 23:30:36 INFO    [YP] Updating listing details for stream #1 succeeded.

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

1) Обнаружить только последнее появление записи в журналах, соответствующей шаблону строки № 1
2) Выполните код, когда это произойдет, и ничего не делайте, пока это не произойдет снова.
3) регулярное выражение для извлечения данных между «вторым набором» квадратных скобок в строке, разделенной знаком «-», например, [Рианна подвиг. Кейшиа Коул — Название (Ремикс)]

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

Как только это происходит, данные отправляются в базу данных MySQL и отправляются в Twitter.

Я попытался использовать «strpos» в операторе if, чтобы сначала обнаружить строку, содержащую «Обновленный заголовок», а затем выполнить функцию, чтобы получить информацию о песне из строки впоследствии, что работает, но только если я использую статический сценарий, помещая пример кроме строки # 1 в переменную, а затем запустить его из моего сценария. Он определяет линию и сервер, для которых он предназначен, но мне нужно, чтобы мой сценарий оставался динамическим, чтобы он что-то делал, только когда происходит это событие, и в это время всегда бездействовал.

Прямо сейчас я должен был пойти бутлег и сделать следующее.

Создал функцию, чтобы получить последние 3 строки из журнала и затем поместить каждую строку в массив. Сойдя с примера вывода выше.
массив [0] = целевая линия
массив [1] = следующая строка
массив [3] = следующая строка

Журналы останутся таким же образом, так как никакие другие выходные данные не будут опубликованы до следующей смены песни, а затем они повторяются с единственным изменением — это информация об исполнителе и названии. В настоящее время, так как я запускаю свой скрипт для принудительного просмотра массива [0], который всегда является строкой, которая мне нужна, когда он публикует скрипт в Twitter при изменении песни, он немедленно отправляет дубликаты. К счастью, я внедрил коды ошибок в раздел Twitter, чтобы я мог использовать sleep (), чтобы заставить мой скрипт бездействовать в течение 180 секунд (3 минут) на средней длине песни. Теперь это прилично, и это действительно отправляет, но мои Твиты больше не в реальном времени, потому что у каждой песни есть различные длины.

Вот фрагмент из моего сценария ниже …

$lines = read_file(TEXT_FILE, LINES_COUNT);
foreach ($lines as $line) {
$pattern="/\[([^\]]*)\]/";
if (preg_match_all($pattern, $lines[0], $matches)){
foreach ($matches[1] as $a ){

$fulltitle = explode("-", $matches[1][1]);

$artist = $fulltitle[0];
$title = $fulltitle[1];

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

$line ="2016-04-27 22:56:48     INFO    [ADMINCGI sid=1] Title updated [Tessa Feat. Gucci Mane - Get You Right]";
echo $line;

$pattern="/\[([^\]]*)\]/";

$needle = " Title updated ";
if (strpos($line,$needle) !== false) {
preg_match_all($pattern, $line, $matches);
foreach ($matches[1] as $a ){

$fulltitle = explode("-", $matches[1][1]);

$artist = $fulltitle[0];
$title = $fulltitle[1];

1

Решение

Задача ещё не решена.

Другие решения

Других решений пока нет …

По вопросам рекламы [email protected]