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

如何让Bing News API返回50/100条结果?代码参数失效求助

解决Bing News API未返回预期数量结果的问题

我来帮你排查这个问题,从你的代码和API使用方式来看,有几个可能的原因导致你拿不到预期的50条结果,咱们逐一分析并修复:

1. 查询字符串拼接逻辑错误

你当前的代码是把urlencode($query)和$site用+直接拼接后放入q参数,但这种做法会导致site筛选部分的语法编码出现冲突——因为+在URL中会被解析为空格,而你手动添加的+和urlencode生成的编码混合后,可能让Bing无法正确识别查询规则。

正确的做法是先把搜索词和site筛选合并成一个完整的查询语句,再整体进行URL编码,这样能保证整个查询字符串的语法和编码都符合API要求。

2. 站点筛选语法冗余

你的$site变量里用了多层嵌套括号,其实Bing的查询语法不需要这么复杂,直接写成site:aaa.com OR site:bbb.com OR site:ccc.net OR site:ddd.com就可以正常生效,简化后更清晰也不容易出错。

3. 实际结果数量的客观限制

即使你设置了count=50,也可能因为以下情况返回更少的结果:

  • 目标区域(cc=CR)和语言(setLang=es)下,符合你站点筛选和搜索词的新闻数量本身不足50条;
  • 可以查看API返回的JSON中的totalEstimatedMatches字段,它会告诉你符合条件的总结果数,如果这个数值小于50,那自然拿不到预期数量的结果;
  • 确认你的API订阅权限,虽然Bing News V7的count最大值是100,但部分订阅层级可能有额外限制。

修正后的完整代码

下面是调整后的代码,修复了查询拼接问题,同时简化了语法并增加了结果排查的输出:

<?php
$endpoint = 'https://api.cognitive.microsoft.com/bing/v7.0/news';
$term = $_GET['q'];
// 简化site筛选语法
$siteFilter = 'site:aaa.com OR site:bbb.com OR site:ccc.net OR site:ddd.com';

function BingNewsSearch($url, $key, $fullQuery) {
    $headers = "Ocp-Apim-Subscription-Key: $key\r\n";
    $options = array(
        'http' => array(
            'header' => $headers,
            'method' => 'GET'
        )
    );
    $context = stream_context_create($options);
    // 将完整查询整体编码,避免拼接错误
    $requestUrl = $url . "?q=" . urlencode($fullQuery) . '&cc=CR&setLang=es&count=50&offset=0';
    $result = file_get_contents($requestUrl, false, $context);
    
    // 提取Bing响应头
    $headers = array();
    foreach ($http_response_header as $k => $v) {
        $h = explode(":", $v, 2);
        if (isset($h[1])) {
            if (preg_match("/^BingAPIs-/", $h[0]) || preg_match("/^X-MSEdge-/", $h[0])) {
                $headers[trim($h[0])] = trim($h[1]);
            }
        }
    }
    return array($headers, $result);
}

print "Searching news for: " . $term . "\n";
// 合并搜索词与site筛选为完整查询
$fullQuery = $term . " " . $siteFilter;
list($headers, $json) = BingNewsSearch($endpoint, $accessKey, $fullQuery);

// 解码JSON查看关键信息,方便排查
$decodedResult = json_decode($json, true);
echo "Total estimated matching results: " . $decodedResult['totalEstimatedMatches'] . "\n";
echo "Actual returned results count: " . count($decodedResult['value']) . "\n";
?>

额外排查建议

  1. 手动构造请求URL(替换$accessKey和搜索词)直接在浏览器访问,查看返回的JSON结果,确认value数组的长度;
  2. 检查$accessKey是否正确,以及该密钥是否有权限访问Bing News API;
  3. 如果返回错误信息,查看响应头中的BingAPIs-TraceId,可以用它在Bing开发者门户排查具体问题。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.28 09:59:59