multi curl + ajax

Статус
В этой теме нельзя размещать новые ответы.

aldonin

Постоялец
Регистрация
4 Янв 2009
Сообщения
46
Реакции
18
Нужна помощь в работе парсера с multi curl и ajax. Раньше с multi curl не работал.
На curl все просто.
Код:
function pars($page,$id,$cat){

$ch = curl_init('/'.$page.'&'.$id.'&'.$cat);

curl_setopt($ch, CURLOPT_USERAGENT, 'IE20');
curl_setopt($ch, CURLOPT_HEADER, 0);
curl_setopt($ch, CURLOPT_RETURNTRANSFER, '1');

$text = curl_exec($ch);

curl_close($ch);

$jsons = json_decode($text);
$data = array();
$i=0;
foreach ($jsons as $k => $v) {
if($k == "result"){
     .............
  return true;     
}elseif($v->code == "404"){
  echo "error";
return false;
}
}
}

$ids = array("1", "2", "3");
$cats = array("10", "11");

foreach ($ids as $id) {
foreach ($cats as $cat) {
$i = 1;
while(pars($i,$id,$cat) != false) {
  $page = $i++;
}
}
}
но из-за увеличивающегося объема данных в источнике, он перестал работать.
Нужно при парсинге отправлять запросы пачками.
Попробовал много вариантов но не работает. В интернете не нашел примеров.

Мой вариант
Код:
function getCurlAsync($urls = array()) {
  if (empty($urls)) return;
  $mh = curl_multi_init();
  $curl_array = array();
  foreach($urls as $i => $url) {
    $curl_array[$i] = curl_init();
    curl_setopt($curl_array[$i], CURLOPT_URL, $url);
    curl_setopt($curl_array[$i], CURLOPT_USERAGENT, "Opera/10.00 (Windows NT 5.1; U; ru) Presto/2.2.0");
    curl_setopt($curl_array[$i], CURLOPT_RETURNTRANSFER, 1);
    curl_setopt($curl_array[$i], CURLOPT_CONNECTTIMEOUT, 10);
    curl_multi_add_handle($mh, $curl_array[$i]);
  }
  $running = NULL;
  do {
    curl_multi_exec($mh, $running);
  } while($running > 0);
  $arResults = array();
  foreach($urls as $i => $url) {
    $arResults[$i] = curl_multi_getcontent($curl_array[$i]);
  }
  foreach($urls as $i => $url) {
    curl_multi_remove_handle($mh, $curl_array[$i]);
  }
  curl_multi_close($mh);
  return $arResults;
}

$i = 1;
foreach ($ids as $id) {
  foreach ($cats as $cat) {
    if ($i > 100) break; 
    $urls[] = str_replace(array('{page}', '{cat}', '{id}'), array($i, $cat, $id), $path);
    $i++;
  }
}
 <script type="text/javascript">
var count = 50;
var url = '/pas.php';

for (var i = 1; i <= count; i++) {
  var queryUrl = url + '?num='+i;
  $.ajax({
    url: queryUrl,
    timeout: 1000*i,
  });
}
 </script>

Может кто помочь?
 
На сколько я понимаю ни RollingCurl ни AngryCurl не смогут обработать большое кол-во url. Так как ограничены временем ответа сервера.
 
Статус
В этой теме нельзя размещать новые ответы.
Назад
Сверху