我正在使用cURL来获取我已经存储在数据库中的20,000多个域名的一些排名数据.
我正在使用的代码是http://semlabs.co.uk/journal/object-oriented-curl-class-with-multi-threading.
数组$ competRequests是20,000个网站排名的competition.com api请求.
这是一个示例请求:http: //apps.compete.com/sites/stackoverflow.com/trended/rank/?apikey = xxxx&start_date = 201207&end_date = 201208&jsonp = ";
由于有20,000个这样的请求,我想将它们分解成块,所以我使用以下代码来实现这一点:
foreach(array_chunk($competeRequests, 1000) as $requests) {
foreach($requests as $request) {
$curl->addSession( $request, $opts );
}
}
Run Code Online (Sandbox Code Playgroud)
这适用于以1,000个批量发送请求,但脚本执行时间太长.我已将max_execution_time增加到10分钟以上.
有没有办法从我的阵列发送1,000个请求然后解析结果然后输出状态更新然后继续下一个1,000直到数组为空?到目前为止,屏幕只是在脚本执行的整个时间内保持白色,这可能超过10分钟.
我正在尝试使用相当大的域列表查询每个域的等级,使用matches.com API,如下所示 - > https://www.compete.com/developer/documentation
我编写的脚本采用了我填充的域的数据库,并发起了一个cURL请求,以争夺网站的排名.我很快意识到这很慢,因为每次请求都是一次发送的.我做了一些搜索并发现了这篇文章 - > http://www.phpied.com/simultaneuos-http-requests-in-php-with-curl/,它解释了如何使用cURL在PHP中同时执行HTTP请求.
不幸的是,该脚本将采用25,000个域的数组并尝试一次处理它们.我发现1,000个批次的工作非常好.
任何想法如何发送1,000个查询到compete.com然后等待完成并发送下一个1,000直到数组为空?这是我到目前为止所做的工作:
<?php
//includes
include('includes/mysql.php');
include('includes/config.php');
//get domains
$result = mysql_query("SELECT * FROM $tableName");
while($row = mysql_fetch_array($result)) {
$competeRequests[] = "http://apps.compete.com/sites/" . $row['Domain'] . "/trended/rank/?apikey=xxx&start_date=201207&end_date=201208&jsonp=";
}
//first batch
$curlRequest = multiRequest($competeRequests);
$j = 0;
foreach ($curlRequest as $json){
$j++;
$json_output = json_decode($json, TRUE);
$rank = $json_output[data][trends][rank][0][value];
if($rank) {
//Create mysql query
$query = "Update $tableName SET Rank = '$rank' WHERE ID = '$j'";
//Execute the query
mysql_query($query);
echo $query …Run Code Online (Sandbox Code Playgroud)