CURL + Ajax = помогите спарсить просмотры Avito

Весь день писал скрипт, почти дошел до конца и тут проблема, которую никак не могу решить.
Весь код приводить не буду, там много чего делается, вот основные шаги:

1. Моя функция для CURL:

PHP:
  1. function URIRequest($url, $method=‘GET’, $params=FALSE, $user=FALSE, $pass=FALSE, $refferer=FALSE) {
  2.  
  3.         $ch = curl_init();
  4.    
  5.         if ($method == ‘POST’) {
  6.             curl_setopt($ch, CURLOPT_POST, 1); // set POST method
  7.             curl_setopt($ch, CURLOPT_POSTFIELDS, $params); // add POST fields
  8.         }
  9.        
  10.         if(strpos($url,‘https://’) !== FALSE){
  11.             curl_setopt($ch, CURLOPT_SSL_VERIFYPEER, false);
  12.             curl_setopt($ch, CURLOPT_SSL_VERIFYHOST, false);
  13.         }
  14.         if ($user) {
  15.             curl_setopt($ch, CURLOPT_USERPWD, $user.‘:’.$pass);
  16.         }
  17.         curl_setopt ($ch, CURLOPT_URL, $url); // установить запрашиваемый URL
  18.  
  19.         // установить куда сохранять куку, очень нужная вещь если есть авторизация и редиректы!
  20.         // надо чтобы был доступ на запись.
  21.         // в многопользовательской среде могут быть траблы с паралельным доступом к файлу.
  22.         // Тогда надо хранить в временном файле
  23.  
  24.         curl_setopt($ch, CURLOPT_COOKIEFILE, $_SERVER[‘DOCUMENT_ROOT’].‘/cookiefile3.txt’);
  25.         curl_setopt($ch, CURLOPT_COOKIEJAR, $_SERVER[‘DOCUMENT_ROOT’].‘/cookiefile3.txt’);
  26.  
  27.         curl_setopt ($ch, CURLOPT_REFERER, $refferer); // если требуется передача HTTP_REFERER
  28.         //curl_setopt($ch, CURLOPT_REFERER, $refferer);
  29.         curl_setopt( $ch, CURLOPT_USERAGENT, «Mozilla/5.0 (Windows NT 6.1; WOW64; Trident/7.0; rv:11.0) like Gecko» );
  30.  
  31.         curl_setopt ($ch, CURLOPT_HEADER, 1); // HTTP заголовки ответа включать в возвращаемый результат
  32.         curl_setopt ($ch, CURLOPT_RETURNTRANSFER, 1); // возвратить результат обработки в переменную а не на STDOUT
  33.         curl_setopt ($ch, CURLOPT_FOLLOWLOCATION, 1); // если будут редиректы — следовать за ними
  34.         curl_setopt ($ch, CURLOPT_TIMEOUT, 120); // таймаут соединения — 2 минуты
  35.         curl_setopt ($ch, CURLOPT_NOBODY, 0);  
  36.         curl_setopt($ch, CURLINFO_HEADER_OUT, true);
  37.    
  38.         $result = curl_exec ($ch); // выполнить запрос
  39.     //    curl_close($ch);
  40.         $info = curl_getinfo($ch);
  41.        
  42.         return $result;
  43.     }

2. Авторизуемся и переходим в профиль:

PHP:
  1. $params[‘next’] = ‘/profile’;
  2. $params[‘login’] = $SETTINGS[‘avito_login’];
  3. $params[‘password’] = $SETTINGS[‘avito_pass’];
  4.  
  5. $ret = $cm->URIRequest($SETTINGS[‘avito_login_url’], ‘POST’, $params, FALSE, FALSE, ‘http://www.avito.ru’);

Все ок, в $ret оказывается HTML админки авито с моими объявлениями

3. Для проверки пробуем отредактировать какое-ниубдь свое объявлени:

PHP:
  1. $edit_url = ‘https://www.avito.ru/items/edit/78071524’;
  2. $ret = $cm->URIRequest($edit_url, ‘GET’, FALSE, FALSE, FALSE, ‘https://www.avito.ru/profile/items/active/rossiya’);

Тоже все ок, в $ret оказывается форма редактирования с моим объявленим. Т.е. авторизация не слетает, куки работают.

4. А теперь пытаемся дернуть статистику просмотров этого объявления. Получается она по следующему УРЛу: https://www.avito.ru/items/stat/78071524?step=0
пробуем и…

PHP:
  1. $stat_url = ‘https://www.avito.ru/items/stat/78071524?step=0’;
  2. $ret = $cm->URIRequest($stat_url, ‘GET’, FALSE, FALSE, FALSE, ‘https://www.avito.ru/profile/items/active/rossiya’);

…облом. В $ret выдает 404, что такой страницы не найдено.
Если проверять в браузере, то все ок, если залогинен выдает статистику.
Если не залогинен (пытаешься чужое объявление просмотреть, например), то выдает так же выдает 404.

Загвоздка скорее всего в том, что запрос этой страницы в админке осуществляется через Ajax и где-то наверное слетает авторизация. Но вот почему и как это пофиксить, я не знаю.

Подскажите плиз в какую сторону копать?

 

Тут запрещено парсинг обсуждать

 

Ммм.. Сорри не знал. Если так, то тогда прошу модераторов закрыть тему.
А даже интересно почему? Что плохого в парсинге? Это же просто элемент автоматизации.

 

Если сервис хочет делиться поисковым трафиком или предоставлять средства автоматизации, сервис предоставляет публичное API, позволяющее работать с сервисом через свои программные решения.

У авито есть вот такой вариант — ТЫЦ.

Если же сервис не хочет этого, то парсинг — это, по сути, кража контента. Хочешь что-то посмотреть — есть страница сайта.
А когда вырастает очередной магазин, новостной портал, спортивный гид, или даже поисковик, который, по сути, лишь пересылает запросы сайту-донору и парсит контент, выдавая за свой — это паразитизм. Кто-то трудится, делая контент и сервис, а кто-то пользуется этим, отнимая долю у того, кто трудится. Не делая ничего, кроме «разовой автоматизации».

Сайты, являющиеся прокси-парсерами других сайтов не нужны. Они не имеют никакой ценности и лишь засоряют Интернет.

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

Яркий пример — яндекс.маркет.

 

Зачем сразу так категорично?

Объясню зачем это нужно мне.
Я продаю на авито и для меня важно анализировать статистику: количество просмотров объявлений, количество звонков, количество писем. В разрезе каждого объявления и каждого дня.
Вот для этого мне и нужно спарсить количество показов объявлений.

 

Тогда читайте документацию по ссылке, что я дал. Там инструментарий как раз для вашего случая описан.

 

Всем привет. Хотел узнать.
Как в боте Авито заменить ссылку текстом (гиперссылкой)
Т.е. например во фразу «форма регистрации» сделать кликабельной, ведущей на другой сайт.

 

Добавить комментарий

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