设置size参数后NewsData.io API仍返回有限结果的技术问询
解决NewsData.io API返回结果少于设置size的问题
核心原因
你的响应里totalResults为12,这说明当前查询条件(country=in)下,API实际可用的新闻总数就是12条。NewsData.io的size参数是单次请求最多返回的条数,但不能超过实际存在的结果总数,所以哪怕设置size=50,也只能返回现有全部的12条内容。
分页的正确用法(当totalResults大于单次size时)
如果后续你的查询条件下totalResults大于设置的size,就需要通过分页获取剩余结果,NewsData.io支持两种分页方式:
使用
page参数:
比如设置size=20,totalResults=100,可依次请求不同页码:- 第1页:
https://newsdata.io/api/1/latest?country=in&size=20&page=1&apikey=YOUR_API_KEY - 第2页:
https://newsdata.io/api/1/latest?country=in&size=20&page=2&apikey=YOUR_API_KEY - 以此类推,直到返回结果数不足
size,或者页码超过totalResults/size的整数上限。
- 第1页:
使用
nextPage参数:
每次请求成功后,响应里会包含nextPage字段(存在下一页时),直接将该值作为参数加入下一次请求即可。比如第一次响应返回"nextPage": "2",下一次请求URL为:https://newsdata.io/api/1/latest?country=in&size=20&nextPage=2&apikey=YOUR_API_KEY
其他可能的限制因素
- API套餐限制:不同付费套餐会限制单次请求的最大
size值,以及每日可获取的总结果数。如果你的套餐允许的最大单次size小于50,设置size=50会被API自动降至套餐允许的最大值。 - 内容时效性与查询范围:
/latest端点返回近期新闻,若指定国家(in)的近期新闻数量本身较少,结果自然不多。可尝试用timeframe参数扩大时间范围(比如timeframe=7d获取7天内新闻),或增加多个国家、调整关键词等查询条件来获取更多内容。
优化后的分页请求示例代码
class DownloadNews extends AsyncTask<Integer, Void, String> { @Override protected String doInBackground(Integer... pageNumbers) { String response = ""; int page = pageNumbers.length > 0 ? pageNumbers[0] : 1; String url = "https://newsdata.io/api/1/latest?country=in&size=20&page=" + page + "&apikey=YOUR_API_KEY"; response = Function.excuteGet(url, ""); return response; } @Override protected void onPostExecute(final String response) { if (response != null && response.length() > 10) { Log.d("response", response); // 解析响应判断是否需要继续请求下一页 try { JSONObject jsonResponse = new JSONObject(response); String nextPage = jsonResponse.optString("nextPage", null); if (nextPage != null) { new DownloadNews().execute(Integer.parseInt(nextPage)); } } catch (JSONException e) { e.printStackTrace(); } } } }
使用说明
- 首次调用执行
new DownloadNews().execute(1);获取第一页内容 - 在
onPostExecute中解析nextPage字段,若存在则继续请求下一页,直到nextPage为null
内容的提问来源于stack exchange,提问作者Vikash K
相关产品推荐
相关产品推荐

