如何在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; }
三、你原有代码的注意点
start参数错误:应该是0, 50, 100, 150而非51,101,151,1,API的start是结果集的起始索引,不是页码。- URL拼接错误:
&limit"+item+"缺少等号,正确写法是&limit="+item+"。
内容的提问来源于stack exchange,提问作者hotmarycorleone
相关产品推荐
相关产品推荐

