Stackexchange API: получение ответов на конкретный пост в стеке

Я использую оболочку Python stackAPI для взаимодействия с API stackexchange. Я пытаюсь получить самые популярные вопросы выше порога подсчета голосов; и для каждого из этих вопросов лучшие ответы выше определенного количества голосов.

  SITE = StackAPI("stackoverflow")
  SITE.max_pages=2
  SITE.page_size=100
  questions = SITE.fetch('questions', min=10, sort='votes')
  for quest in questions['items']:
    if 'title' not in quest: continue
    quest_id = quest['question_id']
    title = quest['title']
    tags = []
    if 'tags' in quest:
      tags = quest['tags']
    #body = quest['body']
    body = ""
    if 'body' in quest:
      body = quest['body']

    answers = SITE.fetch('answers', id=[quest_id],min=10, sort='votes')
    for answer in answers['items']:
         _stuck here_

Вот где я застрял, как получить ответы на вышеуказанный question_id, этот запрос возвращает некоторые случайные answer_id. Как получить question-< answers


person Santino    schedule 03.01.2018    source источник


Ответы (2)


Я изменил ваш код, чтобы получить такой ответ с наибольшим количеством голосов.

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(top_answer)

Если вы хотите получить принятый ответ на вопрос, вы можете получить его следующим образом: -

accepted_answer_id = quest['accepted_answer_id']
print('Accepted Answer ID :- {0}'.format(accepted_answer_id))

Stackoverflow использует этот идентификатор в качестве примера ниже, чтобы сгенерировать URL-адрес этого ответа следующим образом: -

answer = "https://stackoverflow.com/a/" + str(accepted_answer_id)
print(answer)

Надеюсь, это поможет вам!

person Shashishekhar Hasabnis    schedule 12.12.2018

Вы используете идентификатор вопроса в качестве идентификатора ответа, но эти идентификаторы совершенно не связаны.

Используйте конечную точку questions/{ids}/answers.

answers = SITE.fetch('answers/' + str(quest_id) + '/answers', min=10, sort='votes')
person Barmar    schedule 04.01.2018
comment
Привет, я попробовал ваше предложение выше, к сожалению, не повезло. Это мой код: - person Santino; 11.01.2018
comment
`answers = SITE.fetch('answers/' + str(11227809) + '/answers', min=2, sort='votes') #pprint.pprint(answers) answer_id_list = [] для ответа в ответах: #answ_title = answer['title'] answer_id_list.append(answer['answer_id']) напечатать ответ ` - person Santino; 11.01.2018
comment
Получите исключение no method. Не знаю, что это значит. - person Santino; 11.01.2018
comment
Ошибка кажется довольно очевидной, вы (или что-то внутреннее в одной из функций, которые вы вызвали) пытались вызвать несуществующий метод. В какой строке эта ошибка? - person Barmar; 11.01.2018
comment
api.stackexchange.com/docs/ показывает, что URL должен работать - person Barmar; 11.01.2018
comment
Должно быть for answer in answers['items']: - person Barmar; 11.01.2018