2

嗨,我想从 NYtimes API 获取“标题”之后的所有信息,这是我的代码

from urllib2 import urlopen
from json import loads
import codecs
import time

def call_the_articles():
    url = "http://api.nytimes.com/svc/search/v1/article?query=US&facets=POLITICS&api-key=##"
    return loads(urlopen(url).read())

articles = call_the_articles()

if __name__ == '__main__':


    for story in articles("results"):
        print story['title'].encode('ascii', 'replace')

但是当我在终端中运行时,出现的错误如下:

File "NYtimes.py", line 10, in <module>
    articles = call_the_articles()
  File "NYtimes.py", line 8, in call_the_articles
    return loads(urlopen(url).read())
  File "/Library/Frameworks/Python.framework/Versions/2.7/lib/python2.7/urllib2.py", line 126, in urlopen
    return _opener.open(url, data, timeout)
  File "/Library/Frameworks/Python.framework/Versions/2.7/lib/python2.7/urllib2.py", line 406, in open
    response = meth(req, response)
  File "/Library/Frameworks/Python.framework/Versions/2.7/lib/python2.7/urllib2.py", line 519, in http_response
    'http', request, response, code, msg, hdrs)
  File "/Library/Frameworks/Python.framework/Versions/2.7/lib/python2.7/urllib2.py", line 444, in error
    return self._call_chain(*args)
  File "/Library/Frameworks/Python.framework/Versions/2.7/lib/python2.7/urllib2.py", line 378, in _call_chain
    result = func(*args)
  File "/Library/Frameworks/Python.framework/Versions/2.7/lib/python2.7/urllib2.py", line 527, in http_error_default
    raise HTTPError(req.get_full_url(), code, msg, hdrs, fp)
urllib2.HTTPError: HTTP Error 400: Bad Request

如何解决问题?

4

1 回答 1

1

我怀疑你想要的是:

url = "http://api.nytimes.com/svc/search/v1/article?format=json&query=US+des_facet%3A%5BPOLITICS+AND+GOVERNMENT%5D&api-key=##

有几件事会导致错误的请求:

1.)您使用的facets关键字不正确。来自有关方面的Times API 开发人员文档

方面可以被认为是搜索“观点”。通过构面,您可以从不同的角度查看搜索结果,并且可以从不同的角度处理您的搜索查询。每个方面都可以被视为代表 Times 文章数据的一个属性或特征。

刻面可以揭示并非立即显而易见的共同点和区别点。例如,标题中包含“自行车”一词的两篇文章可能有两个非常不同的 nytd_section_facet(NYTimes.com 部分)值:“电影”和“健康”。同样,两篇讨论看似完全不同的主题(例如云计算和车展)的文章可能共享一个 des_facet(描述性主题词)值:“新模型、设计和产品”。

2.) 当您通过 urlopen() 发送查询时,您需要对查询进行 URLEncode。

此外,articles将是一个 dict,因此您需要使用以下方式获取文章[]

for story in articles["results"]: 

如果这里的查询不是您想要的,NYT 有一个工具可以让您构建查询:NYT API Request Tool

于 2013-05-08T04:26:12.597 回答