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
Отправлено: 19 Июля, 2016 - 23:23:51
Post Id


Новичок


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


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

[+]


Ребят, долго мучился на следующим, кодом, что делать дальше ума не приложу.. помогите допилить.

В общем, есть авторизация, которая вроде работает правильно, при запуске выводит в браузер главную страницу уже авторизованного пользователя - УРА!
Далее есть парсер (на заранее сохраненной странице, работает безупречно), он должен считывать несколько блоков со страницы, которая доступна лишь после авторизации, но поскольку эта страница имеет адрес отличный от главной страницы сайта, данные парсить не получается(( Подпилите код, что бы после авторизации можно было попасть на нужную страницу и далее уже получить данные...

PHP:
скопировать код в буфер обмена
  1.  /* Блок авторизации */
  2. ПЕРЕПИСАН, есть в низу!
  3.  
  4. /* Блок авторизации */
  5.  
  6. /* Парсер */
  7. include_once('simple_html_dom.php');
  8. $html = file_get_html ('http://****/****/****/play/25438/');
  9. $level = $html->find ('.content span ', 0)->innertext;
  10. $task = $html->find ('.content h3 ', 0)->innertext; // Отключен
  11. $text = $html->find ('.content p ', 0)->innertext; // Отключен
  12. echo "Информация: $level";
  13. /* Парсер */

(Отредактировано автором: 20 Июля, 2016 - 20:02:00)

 
 Top
andrewkard
Отправлено: 20 Июля, 2016 - 13:18:05
Post Id


Участник


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


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




Virus1850 пишет:
$html = file_get_html ('http://****/****/****/play/25438/');

этот запрос не передает куки, делайте с помощью curl
 
 Top
Virus1850
Отправлено: 20 Июля, 2016 - 13:53:37
Post Id


Новичок


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


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

[+]


andrewkard пишет:
Virus1850 пишет:
$html = file_get_html ('http://****/****/****/play/25438/');

этот запрос не передает куки, делайте с помощью curl


К чему-то подобному я уже пришел, пол-ночи читая форум, т.е. я правильно понимаю, мне в парсер нужно внести код "считывания" куков из файла cookie.txt и их оправки?

P.S. Возможно вы подскажете, мне нужно получать информацию с сайта практически в режиме онлайн, т.е. по сути таймер запроса к серверу должен быть установлен на 1-3 сек. Но, у меня написал js код, который просто обновляет страницу по таймеру... если страница обновляется полностью то по новой запускается код авторизации, далее парсер... это, как по мне, большая нагрузка на сервер. Можно как то установить таймер именно на выполнение кода парсера? ведь если он будет передавать куки то смысл постоянно авторизовываться на целевом сайте...!?

Для обновления использую такой код:
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>

(Отредактировано автором: 20 Июля, 2016 - 14:02:05)

 
 Top
andrewkard
Отправлено: 20 Июля, 2016 - 14:57:02
Post Id


Участник


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


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




Virus1850 пишет:
по сути таймер запроса к серверу должен быть установлен на 1-3 сек.

Вас не забанят? Обычно периодические задачи запускают с помощью планировщика.
 
 Top
Virus1850
Отправлено: 20 Июля, 2016 - 16:01:40
Post Id


Новичок


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


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

[+]


andrewkard пишет:
Virus1850 пишет:
по сути таймер запроса к серверу должен быть установлен на 1-3 сек.

Вас не забанят? Обычно периодические задачи запускают с помощью планировщика.

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


Новичок


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


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

[+]


С помощью этого, получил в браузер необходимую страницу! Скажите, как извлечь из нее инфу ли вернуть в переменную в формате html и запихнуть ее в парсер который ниже. $result почему то выводи просто 1 - если убрать, страница остается, единица естественно исчезает.
PHP:
скопировать код в буфер обмена
  1. $log="****";
  2. $pass="****";
  3. $curl = curl_init(); // инициализируем cURL
  4. curl_setopt($curl, CURLOPT_URL, 'http://****/****/****/play/25438/');
  5. curl_setopt($curl, CURLOPT_COOKIEJAR, 'cook.txt');
  6. curl_setopt($curl, CURLOPT_COOKIEFILE, 'cook.txt');
  7. curl_setopt($curl, CURLOPT_USERAGENT, "Opera/10.00 (Windows NT 5.1; U; ru) Presto/2.2.0");
  8. curl_setopt($curl, CURLOPT_FAILONERROR, 1);
  9. curl_setopt($curl, CURLOPT_REFERER, 'http://*****/Default.aspx');
  10. curl_setopt($curl, CURLOPT_TIMEOUT, 3);
  11. curl_setopt($curl, CURLOPT_POST, 1);
  12. curl_setopt($curl, CURLOPT_POSTFIELDS, "socialAssign=0&Login=$log&Password=$pass&EnButton1=%D0%92%D1%85%D0%BE%D0%B4&ddlNetwork=1");
  13. curl_setopt($curl, CURLOPT_HEADER, 0);
  14. curl_setopt ($curl, CURLOPT_SSL_VERIFYPEER, 0);// не проверять SSL сертификат
  15. curl_setopt ($curl, CURLOPT_SSL_VERIFYHOST, 0);// не проверять Host SSL сертификата
  16. curl_setopt($curl, CURLOPT_FOLLOWLOCATION, 1);// разрешаем редиректы
  17. $result = curl_exec($curl); // выполняем запрос и записываем в переменную
  18. curl_close($curl);
  19.  
  20. echo $result;
  21.  
  22. /* Парсер */
  23. include_once('simple_html_dom.php');
  24. $html = file_get_html ('http://****/****/****/play/25438/');
  25. $level = $html->find ('.content span ', 0)->innertext;
  26. $task = $html->find ('.content h3 ', 0)->innertext; // Отключен
  27. $text = $html->find ('.content p ', 0)->innertext; // Отключен
  28. echo "Информация: $level";
  29. /* Парсер */

(Отредактировано автором: 20 Июля, 2016 - 20:07:48)

 
 Top
Ermite
Отправлено: 24 Июля, 2016 - 12:56:06
Post Id


Новичок


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


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




Попробуй вставить
 
 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