- Автор темы
- #1
Нужна помощь в работе парсера с multi curl и ajax. Раньше с multi curl не работал.
На 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>
Может кто помочь?