Warning: Cannot use a scalar value as an array in /home/admin/public_html/forum/include/fm.class.php on line 757

Warning: Invalid argument supplied for foreach() in /home/admin/public_html/forum/include/fm.class.php on line 770

Warning: Invalid argument supplied for foreach() in /home/admin/public_html/forum/topic.php on line 737
Форумы портала PHP.SU :: Посоветуйте логику исполнения команд

 PHP.SU

Программирование на PHP, MySQL и другие веб-технологии
PHP.SU Портал     На главную страницу форума Главная     Помощь Помощь     Поиск Поиск     Поиск Яндекс Поиск Яндекс     Вакансии  Пользователи Пользователи


 Страниц (1): [1]   

> Описание: Нужно переодически сравнивать переменную с постоянной но из-за некоторых особенностей, не знаю как реализовать..
Virus1850
Отправлено: 18 Июля, 2016 - 16:54:52
Post Id


Новичок


Покинул форум
Сообщений всего: 38
Дата рег-ции: Февр. 2012  


Помог: 0 раз(а)

[+]


Ребят, подскажите как написать алгоритм для решения следующей задачи.
У меня есть простой парсер который должен присылать инфу с сайта. Инфа на сайте меняется, причем время смены инфы рандомное, т.е. можно ждать час а можно и 20 сек. Поэтому парсер отправляет запросы каждую секунду, соответственно весь html вносит в переменную и должен отправлять мне.. но
Что бы мне не приходило сообщение каждую сек. с повторяющейся инфой нужно решать такую задачу: а именно, сравнить как-то переменную с первого запроса к серверу с той же переменной со второго запроса.

Смену инфы на странице можно отследить по одному блоку в котором меняются только цифры начиная от 1 и до... 20-80. Вот коротко алгоритм работы сайта: 1 ст. № в блоке 1 (инфа-1) через 10 мин. -> 2 ст. № в блоке 2 (инфа-2) через 5 мин. -> 3 ст. № в блоке 3 (инфа-3) и т. д. эту цифру я уже загнал в переменную...

Так вот, как написать код, что бы при парсинге первой станицы когда $a=1; сравнивалась с той же переменной $a но из предыдущего запроса. Соответственно, через функцию if пока значения будут равны, сообщение отправляться не будет, как только на сайте изменится инфа, $ блока прилетевшего в последнем запросе станет > предыдущей и мне прилетит письмо уже с новой инфой. Надеюсь изложил понятно. Что можете посоветовать.

Были мысли записывать запрос в файл и потом сравнивать, но, при каждом новом запросе файл будет перезаписывать результат предыдущего, в итоге схема не работает..
 
 Top
andrewkard
Отправлено: 18 Июля, 2016 - 18:32:57
Post Id


Участник


Покинул форум
Сообщений всего: 1372
Дата рег-ции: Нояб. 2014  


Помог: 30 раз(а)




Как у Вас парсер запускается, бесконечный цикл или по крону?
Virus1850 пишет:
при каждом новом запросе файл будет перезаписывать результат предыдущего

почему, сначала читаете, потом перезаписываете.
 
 Top
Virus1850
Отправлено: 18 Июля, 2016 - 21:13:07
Post Id


Новичок


Покинул форум
Сообщений всего: 38
Дата рег-ции: Февр. 2012  


Помог: 0 раз(а)

[+]


andrewkard пишет:
Как у Вас парсер запускается, бесконечный цикл или по крону?
Virus1850 пишет:
при каждом новом запросе файл будет перезаписывать результат предыдущего

почему, сначала читаете, потом перезаписываете.

Пожалуй лучше скину код)
В общем, запросы я посылаю таким образом:
CODE (javascript):
скопировать код в буфер обмена
  1. <script type="text/javascript">
  2. function timer(){
  3. var obj=document.getElementById('timer_inp');
  4. obj.innerHTML--;
  5.     if (obj.innerHTML==0){
  6.   location.reload();
  7.     } else {
  8.         setTimeout(timer,1000);
  9.     }
  10. }
  11. setTimeout(timer,1000);
  12. </script>
  13. <div>Осталось: <span id="timer_inp">10</span> сек.</div>

10 сек. для теста, в идеале каждую секунду должен запускаться.

Потом следует самый простой парсер:
PHP:
скопировать код в буфер обмена
  1. <?PHP
  2. include_once('simple_html_dom.php');
  3. $html = file_get_html ('Страница сайта');
  4. $level = $html->find ('.content span ', 0)->innertext;
  5. $task = $html->find ('.content h3 ', 0)->innertext;
  6. $text = $html->find ('.content p ', 0)->innertext;
  7. echo $level, $task, $text;
  8.  
  9. $cont =  array(Start, $level['text'] );
  10. echo "</br>";
  11. echo $cont[0, 1];
  12. ?>

Кстати, в нем ошибка, не могу вывести массив через $cont, вывод данных по 8 сроке работает да всю инфу одной строкой, а мне бы разделить их).
Дальше, по моей логике, нужно if для проверки переменной, что-то вроде следующей..

PHP:
скопировать код в буфер обмена
  1. if ($level > $x ) {
  2. Отправка почты...
  3. }

Но вот как в эту $x занести значение $level но от предыдущего запроса, что бы их сравнить:

Вообще это делается пока что для понятия принципов и общей отладки, тестирую на заранее сохраненной странице, в идеале сюда нужно прикрутить авторизацию, т.к. страница и данные которые мне нужно парсить, доступны только с моего логина( Буду премного благодарен если подскажете где найти инфу или как это реализовать (поскольку я врач а не программер, чем проще тем лучше, php для меня скорее увлечение, помогающее в решений некоторых задач))
 
 Top
Virus1850
Отправлено: 19 Июля, 2016 - 06:04:09
Post Id


Новичок


Покинул форум
Сообщений всего: 38
Дата рег-ции: Февр. 2012  


Помог: 0 раз(а)

[+]


Все таки разобрался сам. Реализовал через запись переменной в файл, но записывал одну переменную а выводил другую, и сравнивал их через if - пока переменные были равны, ничего не происходило, как только 1я переменная становится больше другой - запускается скрипт отправки данных на почту и перезапись файла. И все по кругу)

Теперь более сложный вопрос, как прикрутить авторизацию к парсеру??

(Отредактировано автором: 19 Июля, 2016 - 06:05:21)

 
 Top
Страниц (1): [1]
Сейчас эту тему просматривают: 0 (гостей: 0, зарегистрированных: 0)
« Вопросы новичков »


Все гости форума могут просматривать этот раздел.
Только зарегистрированные пользователи могут создавать новые темы в этом разделе.
Только зарегистрированные пользователи могут отвечать на сообщения в этом разделе.
 



Powered by PHP  Powered By MySQL  Powered by Nginx  Valid CSS  RSS

 
Powered by ExBB FM 1.0 RC1. InvisionExBB