You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何在Indeed搜索API中按查询限制循环获取全部结果

自动生成Indeed简历搜索API的Limit数组及优化实现方案

一、自动生成Limit数组的函数

你可以通过一个简单的函数,根据总结果数和单次请求上限自动生成对应的limit数组:

function generateLimits(totalResults, perPage = 50) {
  const limits = [];
  const fullPageCount = Math.floor(totalResults / perPage);
  const remainder = totalResults % perPage;

  // 添加所有满额的请求限制
  for (let i = 0; i < fullPageCount; i++) {
    limits.push(perPage);
  }

  // 如果有剩余结果,添加最后一项的限制值
  if (remainder > 0) {
    limits.push(remainder);
  }

  return limits;
}

// 示例:总结果230时,输出 [50, 50, 50, 30]
console.log(generateLimits(230));

二、更规范的实现方案(无需预先生成数组)

直接预先生成limit和start数组会增加冗余代码,更简洁的方式是在循环中动态计算每次请求的start和limit参数,同时用异步串行请求避免触发API频率限制:

核心实现代码

const BASE_API_URL = "https://resumes.indeed.com/rpc/search";
// 提取公共参数,便于维护
const COMMON_QUERY_PARAMS = new URLSearchParams({
  q: "sales",
  l: "Orlando,FL",
  jk: "",
  lmd: "3day",
  radius: 25,
  indeedcsrftoken: "test_tokent"
});

async function fetchAllResumes(totalResults, perPage = 50) {
  const totalPages = Math.ceil(totalResults / perPage);
  const allResumeData = [];

  for (let pageIndex = 0; pageIndex < totalPages; pageIndex++) {
    // 计算当前请求的起始位置
    const start = pageIndex * perPage;
    // 计算当前请求的结果数量:最后一页用剩余结果数,否则用单次上限
    const limit = pageIndex === totalPages - 1 ? totalResults - start : perPage;

    // 构建完整的请求URL
    const queryParams = new URLSearchParams(COMMON_QUERY_PARAMS);
    queryParams.set("start", start);
    queryParams.set("limit", limit);
    const requestUrl = `${BASE_API_URL}?${queryParams.toString()}`;

    try {
      // 发起异步请求(替换为实际的API调用逻辑)
      const response = await fetch(requestUrl);
      if (!response.ok) throw new Error(`HTTP错误: ${response.status}`);
      const pageData = await response.json();
      
      // 收集当前页的结果
      allResumeData.push(...pageData.results); // 假设API返回的结果在results字段中

      // 可选:添加延迟,避免触发API频率限制
      await new Promise(resolve => setTimeout(resolve, 1000));
    } catch (error) {
      console.error(`第${pageIndex + 1}页请求失败:`, error);
      // 根据需求选择继续后续请求或终止
      throw error;
    }
  }

  return allResumeData;
}

// 使用示例
fetchAllResumes(230)
  .then(allResumes => console.log("所有简历数据:", allResumes))
  .catch(err => console.error("获取数据失败:", err));

针对你的JS Fiddle的适配修改

如果你需要在页面上生成所有请求链接,可以修改getResultValue函数,动态计算每个请求的参数:

function getResultValue() {
  if (!availableResult.value) return;

  const totalResults = Number(availableResult.value);
  const perPage = 50;
  let text = "";

  const totalPages = Math.ceil(totalResults / perPage);
  for (let pageIndex = 0; pageIndex < totalPages; pageIndex++) {
    const start = pageIndex * perPage;
    const limit = pageIndex === totalPages - 1 ? totalResults - start : perPage;
    
    const params = new URLSearchParams({
      q: "sales",
      l: "Orlando,FL",
      jk: "",
      start: start,
      limit: limit,
      lmd: "3day",
      radius: 25,
      indeedcsrftoken: "test_tokent"
    });
    const url = `${BASE_API_URL}?${params.toString()}`;
    text += url + "<br>";
  }

  document.getElementById("executedQueryString").innerHTML = text;

  // 原有统计逻辑
  const pageCount = Math.ceil(totalResults / perPage);
  const expectedResultValue = Number(max.value) - Number(min.value);
  const expectedPageCount = Math.ceil(expectedResultValue / perPage);

  resultAvailableValue.innerHTML = totalResults;
  pageAvailableFromGrossResult.textContent = pageCount;
  expectedResult.textContent = expectedResultValue;
  expectedPagenumberFromExpectedResult.textContent = expectedPageCount;
}

三、你原有代码的注意点

  1. start参数错误:应该是0, 50, 100, 150而非51,101,151,1,API的start是结果集的起始索引,不是页码。
  2. URL拼接错误:&limit"+item+"缺少等号,正确写法是&limit="+item+"。

内容的提问来源于stack exchange,提问作者hotmarycorleone

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.07.18 12:32:07