为什么我的Bing Search API News会返回空字符串?

时间:2014-06-19 16:14:40

标签: api rest search yql bing

我订阅了Windows Azure网站上的免费Bing Search API。我想要做的是在我的网站上添加一个面板,它使用纯粹的客户端代码(javascript)来查询Bing Search Api for News结果,我希望按相关性对其进行排序。

为了实现这一点,我发现这篇有趣的文章讨论了如何以YQL(Yahoo Query Language)存储您的身份验证信息,并将其用作查询Bing Search API的代理:http://derek.io/blog/2010/how-to-secure-oauth-in-javascript/

所以,这就是我所做的:

1)开发一个YQL开放数据表,其中包含我的Bing Key和查询参数。这是XML代码:

<?xml version="1.0" encoding="UTF-8" ?>
<table xmlns="http://query.yahooapis.com/v1/schema/table.xsd">
    <meta>
        <sampleQuery>
            select * from {table} where query="washington"
        </sampleQuery>
    </meta>
    <bindings>
       <!-- SearchResponse.News.RelatedSearches.NewsRelatedSearch -->
        <select produces="json">    

            <urls><url>https://a889dc2f-d0d4-4d16-9f4e-401c750deb04:IFU5P1aw5HAFJsMgOoxSyAAQyAh+m5asVkEq3GG9xIU@api.datamarket.azure.com/Bing/Search/v1/Composite?Sources=%27news%27</url></urls>

            <inputs>
                <key id="Query" default="'new york bonds'+NewsCategory='rt_Business'" paramType="query" />
            </inputs>

        </select>                        
    </bindings>
</table>

查看我放置ConsumerIDAccountKey的位置?它位于URL的最开头(用冒号分隔)。

2)将此数据表保存在YQL的托管存储中。我回来执行,选择和更新存储地址。这允许我隐藏我的Auth信息,同时不需要服务器端代理。

3)使用以下给出的执行存储密钥:store:// 6sVu1WUPgFrgFcOv1bH81U从YQL控制台进行YQL查询。我们使用以下查询:

use "store://6sVu1WUPgFrgFcOv1bH81U" as T;
select * from T where Query="'Texas bonds'&NewsCategory='rt_Business'";

哦,哦......我们遇到了第一个错误。 YQL控制台吃它并吐出“无效的JSON文档”。好的,所以我认为控制台不知道如何解析这个查询。

好的,那就让我们使用REST URL来执行查询。网址是:

https://query.yahooapis.com/v1/public/yql?q=use%20%22store%3A%2F%2F6sVu1WUPgFrgFcOv1bH81U%22%20as%20T%3B%20select%20*%20from%20T%20where%20Query%3D%22%27Texas%20bonds%27%26NewsCategory%3D%27rt_Business%27%22%3B&format=json&diagnostics=true

大!但这里发生了一些有趣的事情。生成的JSON字符串中的诊断信息为:

  

“无法从存储中读取...不是有效的存储地址。”

我可以更少关心,只要我得到一个好的JSON字符串我不在乎。但这是问题发生的地方。尝试使用生成的REST URL来查询:

use "store://6sVu1WUPgFrgFcOv1bH81U" as T;
select * from T where Query="'Texas bonds'&NewsCategory='rt_Business'&NewsSortBy='Relevance'";

结果为空字符串(存储网址错误相同)。

WHY?这是完全相同的查询,但它只是按相关性而不是日期对新闻结果进行排序。

有谁知道这里发生了什么事?

提前感谢您的时间,非常感谢。

P.S。我已经尝试使用其他密钥ID来使XML代码更好看,但它总是搞砸了查询。请让我知道,如果你能使这项工作我永远爱你。

您认为可能需要使用OAuth吗?

0 个答案:

没有答案