2014-10-12 17 views
0

Hacker News가 API를 발표했습니다. 어떻게 파이썬에서 사용합니까?Hacker News API를 Python으로 사용하는 방법은 무엇입니까?

모든 최고 게시물을 원합니다. urllib을 사용해 보았지만 제대로하고 있다고 생각하지 않습니다.

import urllib2 
response = urllib2.urlopen('https://hacker-news.firebaseio.com/v0/topstories.json?print=pretty') 
html = response.read() 
print response.read() 

그냥 내가 선을 놓친 내 코드를 업데이트했다

'' 

빈 인쇄 :

여기 내 코드입니다.

+1

복제 할 수 없습니다. [8444739, 8445087, 8444603, 8443981, 8444976, 8443902, ..., 8420274] \ n "' – jonrsharpe

+0

줄을 놓친 상태에서 질문을 업데이트했습니다. – shankaran

+0

그리고이 번호 목록을 게시물로 변환하려면 어떻게해야합니까? – shankaran

답변

2

@jonrsharpe와 마찬가지로 read()은 한 번만 작동합니다. 따라서 html을 인쇄하면 모든 ID의 목록을 얻을 수 있습니다. 그리고 그 목록을 살펴 본다면 각 이드에 대한 이야기를 얻기 위해 각 요청을 다시해야합니다.

먼저받은 데이터를 파이썬 목록으로 변환하고 모두 처리해야합니다.

base_url = 'https://hacker-news.firebaseio.com/v0/item/{}.json?print=pretty' 
top_story_ids = json.loads(html) 
for story in top_story_ids: 
    response = urllib2.urlopen(base_url.format(story)) 
    print response.read() 

대신이 모든, 당신은 haxor을 사용할 수 있습니다, 그것은 해커 뉴스 API에 대한 파이썬 래퍼. 코드를 다음 당신에게 주요 기사의 모든 ID를 가져옵니다 :

from hackernews import HackerNews 
hn = HackerNews() 
top_story_ids = hn.top_stories() 
# >>> top_story_ids 
# [8432709, 8432616, 8433237, ...] 

은 그럼 당신은 예를 들어 그 루프 및 인쇄 그들 모두를 통해 갈 수 있습니다

for story in top_story_ids: 
    print hn.get_item(story) 

면책 조항을 : 나는 haxor을 썼다.

+0

내가 게시 된 코드의 첫 번째 부분은 내가 원했던 것처럼 작동합니다 ... 감사합니다! – shankaran

1

당신이해야하는 대신

print response.read() 

print html 

? read은 일회성 작업이므로 당신이 그것을 완료 한 후에, 당신이 그것을 반복 할 수 없습니다 :

>>>import ullrib2 
>>> response = urllib2.urlopen('https://hacker-news.firebaseio.com/v0/topstories.json?print=pretty') 
>>> response.read() 
'[ 8445087, 8444739, 8444603, 8443981, 8444976, 8443902, 8444252, 8444634, 8444931, 8444272, 8444025, 8441939, 8444510, 8444640, 8443830, 8445076, 8443470, 8444785, 8443028, 8444077, 8444832, 8443841, 8443467, 8443309, 8443187, 8443896, 8444971, 8443360, 8444601, 8443287, 8441095, 8441681, 8441055, 8442712, 8444909, 8443621, 8442596, 8443836, 8442266, 8443298, 8445122, 8443096, 8441699, 8442119, 8442965, 8440486, 8442093, 8443393, 8442067, 8444989, 8440985, 8444622, 8438728, 8442555, 8444880, 8442004, 8443185, 8444370, 8436210, 8437671, 8439641, 8443727, 8441702, 8436309, 8441041, 8437367, 8422087, 8441711, 8438063, 8444212, 8439408, 8442049, 8440989, 8439367, 8438515, 8437403, 8435278, 8442486, 8442730, 8428522, 8438904, 8443450, 8432703, 8430412, 8422928, 8443635, 8439267, 8440191, 8439560, 8437230, 8442556, 8439977, 8444140, 8441682, 8443776, 8441209, 8428632, 8441388, 8422599, 8439547 ]\n' 
>>> response.read() 
'' 

를 귀하의 경우에는, 그러나, 당신은 이름 htmlread에서 문자열을 할당, 그래서 당신은 여전히 ​​액세스 할 수 있습니다. 당신은 계속하기 전에 the API documentation을 통해 읽어야

>>> response = urllib2.urlopen('https://hacker-news.firebaseio.com/v0/item/8445087.json?print=pretty') 
>>> print response.read() 
{ 
    "by" : "lalmachado", 
    "id" : 8445087, 
    "kids" : [ 8445205, 8445195, 8445173, 8445103 ], 
    "score" : 21, 
    "text" : "", 
    "time" : 1413116430, 
    "title" : "Show HN: Powerful ASCII art editor designed for the Mac", 
    "type" : "story", 
    "url" : "http://monodraw.helftone.com/" 
} 

: 당신이 이야기 ID를 일단 각각 '.../v0/item/{item number}.json?print=pretty'를 통해


, 당신은에 액세스 할 수 있습니다. 또한 the json module으로 그립을 잡을 가치가 있습니다.

+0

응답 목록을 확인할 수 없었습니다. 이유가 무엇입니까? – shankaran

+0

@shankaran 귀하의 구현을 추측 할 수 없으므로 말하기 어렵습니다.펀 트배를 강요 당하면 강제로 예를 들어 문자열을 사용하지 않고 문자열의 문자를 반복하려고합니다. 문자열을 정수리스트로 변환하는'json.loads'. – jonrsharpe

+0

아니 다른 답변 json.loads (html) – shankaran