如何使用 Stack Exchange API 获取答案的正文?
How to get the body of an answer using the Stack Exchange API?
我正在使用 StackAPI 来获取投票最多的问题和这些问题的投票最多的答案:-
from stackapi import StackAPI
SITE = StackAPI('Whosebug')
SITE.max_pages=1
SITE.page_size=10
questions = SITE.fetch('questions', min=20, tagged='python', sort='votes')
for quest in questions['items']:
if 'title' not in quest or quest['is_answered'] == False:
continue
title = quest['title']
print('Question :- {0}'.format(title))
question_id = quest['question_id']
print('Question ID :- {0}'.format(question_id))
top_answer = SITE.fetch('questions/' + str(question_id) + '/answers', order = 'desc', sort='votes')
print('Most Voted Answer ID :- {0}'.format(top_answer['items'][0]['answer_id']))
现在使用这个 answer_id
我想得到那个答案的正文。
我可以使用 this API link.
获取其余详细信息
请参阅 Stack Apps 上的这些帖子:
- Get questions with body and answers
- How to get Question/Answer body in the API response using filters?
- My filter is not returning any results. How to create a minimal filter?
您需要使用 custom filter 来获取 question/answer/post 个实体。
好消息是,您还可以在获取问题的同时使用自定义过滤器获取答案数据——无需稍后 API 调用。
例如,如果您使用过滤器调用 /questions
路由:
!*SU8CGYZitCB.D*(BDVIficKj7nFMLLDij64nVID)N9aK3GmR9kT4IzT*5iO_1y3iZ)6W.G*
"items": [ {
"tags": ["python", "iterator", "generator", "yield", "coroutine"],
"answers": [ {
"owner": {"user_id": 8458, "display_name": "Douglas Mayle"},
"is_accepted": false,
"score": 248,
"creation_date": 1224800643,
"answer_id": 231778,
"body": "<p><code>yield</code> is just like <code>return</code> - it returns what..."
}, {
"owner": {"user_id": 22656, "display_name": "Jon Skeet"},
"is_accepted": false,
"score": 139,
"creation_date": 1224800766,
"answer_id": 231788,
"body": "<p>It's returning a generator. I'm not particularly familiar with Python, ..."
}, {
...
} ],
"owner": {"user_id": 18300, "display_name": "Alex. S."},
"is_answered": true,
"accepted_answer_id": 231855,
"answer_count": 40,
"score": 8742,
"creation_date": 1224800471,
"question_id": 231767,
"title": "What does the "yield" keyword do?"
},
...
所以,改变这个:
questions = SITE.fetch('questions', min=20, tagged='python', sort='votes')
像这样:
questions = SITE.fetch('questions', min=20, tagged='python', sort='votes', filter='!*SU8CGYZitCB.D*(BDVIficKj7nFMLLDij64nVID)N9aK3GmR9kT4IzT*5iO_1y3iZ)6W.G*')
然后相应地调整您的 for
循环。
我正在使用 StackAPI 来获取投票最多的问题和这些问题的投票最多的答案:-
from stackapi import StackAPI
SITE = StackAPI('Whosebug')
SITE.max_pages=1
SITE.page_size=10
questions = SITE.fetch('questions', min=20, tagged='python', sort='votes')
for quest in questions['items']:
if 'title' not in quest or quest['is_answered'] == False:
continue
title = quest['title']
print('Question :- {0}'.format(title))
question_id = quest['question_id']
print('Question ID :- {0}'.format(question_id))
top_answer = SITE.fetch('questions/' + str(question_id) + '/answers', order = 'desc', sort='votes')
print('Most Voted Answer ID :- {0}'.format(top_answer['items'][0]['answer_id']))
现在使用这个 answer_id
我想得到那个答案的正文。
我可以使用 this API link.
请参阅 Stack Apps 上的这些帖子:
- Get questions with body and answers
- How to get Question/Answer body in the API response using filters?
- My filter is not returning any results. How to create a minimal filter?
您需要使用 custom filter 来获取 question/answer/post 个实体。
好消息是,您还可以在获取问题的同时使用自定义过滤器获取答案数据——无需稍后 API 调用。
例如,如果您使用过滤器调用 /questions
路由:
!*SU8CGYZitCB.D*(BDVIficKj7nFMLLDij64nVID)N9aK3GmR9kT4IzT*5iO_1y3iZ)6W.G*
"items": [ {
"tags": ["python", "iterator", "generator", "yield", "coroutine"],
"answers": [ {
"owner": {"user_id": 8458, "display_name": "Douglas Mayle"},
"is_accepted": false,
"score": 248,
"creation_date": 1224800643,
"answer_id": 231778,
"body": "<p><code>yield</code> is just like <code>return</code> - it returns what..."
}, {
"owner": {"user_id": 22656, "display_name": "Jon Skeet"},
"is_accepted": false,
"score": 139,
"creation_date": 1224800766,
"answer_id": 231788,
"body": "<p>It's returning a generator. I'm not particularly familiar with Python, ..."
}, {
...
} ],
"owner": {"user_id": 18300, "display_name": "Alex. S."},
"is_answered": true,
"accepted_answer_id": 231855,
"answer_count": 40,
"score": 8742,
"creation_date": 1224800471,
"question_id": 231767,
"title": "What does the "yield" keyword do?"
},
...
所以,改变这个:
questions = SITE.fetch('questions', min=20, tagged='python', sort='votes')
像这样:
questions = SITE.fetch('questions', min=20, tagged='python', sort='votes', filter='!*SU8CGYZitCB.D*(BDVIficKj7nFMLLDij64nVID)N9aK3GmR9kT4IzT*5iO_1y3iZ)6W.G*')
然后相应地调整您的 for
循环。