实际上,API XML提要总是只返回25个结果

时间:2014-02-28 15:11:39

标签: php xml feed

我正在尝试在PHP网站中使用Indeed.com XML Feed API。我使用这个脚本https://github.com/indeedlabs/indeed-php,看看它在Github页面上是如何工作的(非常好的脚本,感谢作者)。

虽然有效,但确实总是只返回25个作业结果,即使我设置了'限制','开始'和'结束'参数。

以下是我发送的参数:

$aParams = array(
         "q" => "php",
         "l" => "paris",
         "co" => "FR",
         "limit" => 10000,
         "sort" => "date",
         "start" => 0,
         "end" => 100,
         "userip" => $_SERVER["REMOTE_ADDR"],
         "useragent" => $_SERVER["HTTP_USER_AGENT"],
             "v" => 2,
             "format" => "json",
             "publisher" => "123456789"
   );

返回一个数组并包含:

[version] = 2 
[query] = 'php'
[location] = 'paris'            
[dupefilter] = 'true'
[highlight] = 'true' 
[start] = 1 
[end] = 25  
[totalResults] = 2068  
[pageNumber] = 0 
[results] = an array which contains the jobs informations 

正如我们所看到的,totalResults等于2058,但是实际的作业结果数组总是只包含25个条目。

这似乎是一个分页问题(在这里阅读:http://forums.appthemes.com/report-jobroller-bugs/indeed-integration-api-37420)但我不明白目标:为什么这样做而不是更简单?所以我必须做很多请求:首先要知道'totalResults'并保存它(例如在会话中)和其他请求将结果25分25分到最后?

是否有使用此API的开发人员以及如何继续?

由于

2 个答案:

答案 0 :(得分:1)

确实将进料限制为25次。我写了一些脚本来解决这个问题。在Indeed $ params中,你可以指定一个' start'默认为0。

我创建了一个脚本,使用作业计数创建一个foreach循环并循环API改变' start'继续得到不同的结果,直到不再离开。然后它将它全部放入一个PHP数组中。

单个API请求,这样我们就可以获得 totalResults (总工作数)

$client = new Indeed("YOUR_ID");
$args_count = array(
    "q" => "YOUR SEARCH QUERY",
    "l" => "",
    "co" => "GB",
    "userip" => "1.2.3.4",
    "limit" => 10000,
    "useragent" => "Mozilla/5.0 (Macintosh; Intel Mac OS X 10_8_2)"
);

一旦我们得到总工作数,我们将其除以25并将结果四舍五入。这是我们知道我们需要多少次运行我们的foreach

$totalResults = $client->search($args_count);
$totalCount = $totalResults['totalResults'] / 25;
$loop_to_count = ceil($totalCount); 

我们创建一个从0开始的数组,并在25秒内上升到您需要的数量。我的下面将返回150个结果。

$counter = 0;
$loop_options = array('0', '25', '50', '75', '100', '125', '150');

然后我们开始主要的foreach:

$results = '';

foreach ($loop_options as $options) {

    $params = array(
    "q" => "YOUR SEARCH QUERY",
    "l" => "",
    "co" => "GB",
    "userip" => "1.2.3.4",
    "limit" => 10000,
    "start"  => $options,
    "useragent" => "Mozilla/5.0 (Macintosh; Intel Mac OS X 10_8_2)"
    );
    $getResults = $client->search($params);

   foreach ($getResults['results'] as $rawResults) {

       $Subresults[] = array(
        'jobtitle' => $rawResults['jobtitle'],
        'company' => $rawResults['company'],
        'city' => $rawResults['city'],
        'state' => $rawResults['state'],
        'country' => $rawResults['country'],
        'language' => $rawResults['language'],
        'formattedLocation' => $rawResults['formattedLocation'],
        'source' => $rawResults['source'],
        'date' => $rawResults['date'],
        'snippet' => $rawResults['snippet'],
        'url' => $rawResults['url'],
        'onmousedown' => $rawResults['onmousedown'],
        'jobkey' => $rawResults['jobkey'],
        'sponsored' => $rawResults['sponsored'],
        'expired' => $rawResults['expired'],
        'indeedApply' => $rawResults['indeedApply'],
        'formattedLocationFull' => $rawResults['formattedLocationFull'],
        'formattedRelativeTime' => $rawResults['formattedRelativeTime'],
        'stations' => $rawResults['stations']
        );
   }
    $counter++;
    if ($counter == $loop_to_count) { break; }
}

最后我们所有的结果都在这个数组中:

$results = array ('results' => $Subresults);

$ results将包含您在确实

上发布的所有工作

答案 1 :(得分:-2)

请给出限制属性我给了50例如: http://api.indeed.com/ads/apisearch?publisher=1772xxxxxxxxx&q=java&l=austin%2C%20tx&sort=&radius=&st=&jt=&start=&limit=50&fromage=&filter=&latlong=1&co=us&chnl=&userip=1.2.3.4&useragent=Mozilla/%2F4.0%28Firefox%29&v=2

这里你正在使用一个库,所以你必须修改库函数process_request(),在该函数中添加一行$ args [" limit"] = 50; 。在这里我给了50你可以初始化你想要的任何数字。

相关问题