我正在尝试在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的开发人员以及如何继续?
由于
答案 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)
这里你正在使用一个库,所以你必须修改库函数process_request(),在该函数中添加一行$ args [" limit"] = 50; 。在这里我给了50你可以初始化你想要的任何数字。