我有一组查询,我正在尝试使用NYT文章搜索API获取web_urls。但我发现它适用于q2以下但不适用于q1。
q1:Seattle + Jacob Vigdor +华盛顿大学
q2:西雅图+雅各布维格多+华盛顿大学
如果您在网络浏览器中使用API密钥粘贴下面的网址,则会得到一个空的结果。
搜索q1的请求
api.nytimes.com/svc/search/v2/articlesearch.json?q=Seattle+Jacob%20Vigdor+the%20University%20of%20Washington&begin_date=20170626&api-key=XXXX
q1的空结果
{"响应" {"元" {"命中":0,"时间":27,"偏移":0},"文档":[]},"状态":" OK""版权":&# 34;版权所有(c)2013纽约时报公司。保留所有权利。"}
相反,如果您将以下内容粘贴到网络浏览器中(没有文章'查询中的'),您将获得非空结果
搜索q2的请求
api.nytimes.com/svc/search/v2/articlesearch.json?q=Seattle+Jacob%20Vigdor+University%20of%20Washington&begin_date=20170626&api-key=XXXX
q2的非空结果
{"响应" {"元" {"命中":1,"时间":22,"偏移":0},"文档&#34 ;: [{"的web_url":" HTTPS://www.nytimes.com/aponline/2017/06/26/我们/ ap-us-seattle-minimum-wage.html","摘要":"西雅图每小时15美元的最低工资法已经花费了城市的工作,星期一发布的一项研究与上周公布的另一项新研究相矛盾......"" lead_paragraph":"西雅图每小时15美元的最低工资法已经付出了成本周一公布的一项研究表明,这项城市工作与上周公布的另一项新研究相矛盾。"" abstract":null," print_page":null,"博客":[],"源":" AP""多媒体":[],"标题" {&# 34;主要":"对西雅图15美元最低工资的新研究表明它花费了工作"," print_headline":"西雅图的新研究' s $ 15最低工资表示工作成本"},"关键字":[]," pub_date":" 2017-06-26T15:16:2 8 + 0000"" DOCUMENT_TYPE":"物品"" news_desk":"无"" SECTION_NAME&#34 ;:" US"" subsection_name":空,"署名" {"人":[],"原& #34;:"由联合新闻","组织":"关联的新闻"}," type_of_material":"消息"" _id":" 5951255195d0e02550996fb3"" WORD_COUNT":643," slideshow_credits":空}]},&# 34;状态":" OK","版权":"版权所有(c)2013纽约时报公司。保留所有权利。"}
有趣的是,两个查询在api测试页面上都能正常工作 http://developer.nytimes.com/article_search_v2.json#/Console/
另外,如果您查看q2返回的以下文章,您会看到q1中的查询字词,华盛顿大学'它确实发生在它本应该返回这篇文章。 https://www.nytimes.com//aponline//2017//06//26//us//ap-us-seattle-minimum-wage.html
我对API的这种行为感到困惑。有什么想法会发生什么?我错过了什么吗?
答案 0 :(得分:1)
感谢您的所有答案。下面我粘贴了我从NYT开发者那里得到的答案。
NYT的文章搜索API使用Elasticsearch。在线有很多关于Elasticsearch的查询语法的文档(它基于Lucene)。
如果您想要包含“西雅图”,“Jacob Vigdor”和“华盛顿大学”的文章,请
“西雅图”和“Jacob Vigdor”和“华盛顿大学”
或
+“Seattle”+“Jacob Vigdor”+“华盛顿大学”
答案 1 :(得分:0)
我认为您需要将空格(%20
)的编码更改为+(%2B
):
在您的示例中,
q=Seattle+Jacob%20Vigdor+the%20University%20of%20Washington
当我从网站上的页面提交时,它使用%2B:
q=Seattle%2BJacob+Vigdor%2Bthe+University+of+Washington
你是如何编码的?解决此问题的一种方法是在URL编码之前用+
替换空格。
此外,您可能需要将%20
替换为+
。 URL编码有各种方案,所以最好的方法取决于你是如何做的。