Я работаю над сценарием Ruby для автоматического сбора твитов из списка пользователей или терминов, и он работает, за исключением случаев, когда в Твиттере перегружены. Затем Twitter возвращает HTML-страницу без кода ошибки, которую я могу записать. HTML сбрасывает парсер и скрипт завершается неудачно. Как я могу проверить этот ответ HTML и обработать его изящно? Я пытался использовать подход «до успеха» (закомментировано в моем коде ниже), но каждый раз это оказывалось в спасении.
Я использую гемы logger, twitter и twitter4r и аутентифицируюсь через OAuth. Код ниже работает, если Twitter не перегружен. Я попадаю в этот раздел только в том случае, если RestErrors не возвращается.
Вот мой код:
# until success
# begin
if search_type == "users"
# begin
tweets_array = client.timeline_for(:user, :id => row.chomp, :since_id => since_status_id, :count => 200)
success = true
# rescue
# log.info("error getting tweets. waiting to try again.")
# sleep 180
# end
elsif search_type == "terms"
# begin
tweets_array = client.search(:q => row.chomp, :since_id => since_status_id, :count => 200)
success = true
# rescue
# log.info("error getting tweets. waiting to try again.")
# sleep 180
# end
elsif
log.fatal("unsupported search type. exiting.")
break
end # search type
# end
Код, который я пытаюсь на основе ответов:
begin
tweets_array = client.timeline_for(:user, :id => row.chomp, :since_id => since_status_id, :count => 200)
success = true
rescue Twitter::RESTError => re
log.info(row.chomp + ": " + re.code.to_s + " " + re.message.to_s + " " + re.uri.to_s)
if re.code = 503
sleep 180
end
end