2017-12-29 29 views

답변

1

추종자의 screen_names를 수집하려는 것 같습니다. 그러나 collect 블록에서 Twitter API를 다시 호출하고 있습니다. Twitter에서 많은 API 호출이 발생합니다. 그리고 당신의 비율 한도를 치십시오.

그렇게하지 않아도됩니다. @client.followers 전화를 걸면 이미 팔로어의 screen_names가 있습니다. 이 시도 :

@client.followers.map { |follower| follower.screen_name } 

당신은 거기에 다른 것을 볼 수 GET followers/list의 API 문서를 볼 수 있습니다. 또한 15 분짜리 창에서 15 개의 요청으로 제한된다는 것을 알려줍니다. 코드를 몇 번 테스트 해 본다면 그 한계에 도달하는 것은 꽤 쉽습니다.

트위터는 통화 당 최대 200 명의 팔로어를 반환합니다. 팔로어가 200 명 이상인 경우 팔로어를 모두 가져 오기 위해 여러 API 호출을해야합니다. 3,000 명 이상의 팔로어가있는 경우 15 분 제한 시간 내에 모든 팔로어를 검색 할 수 없습니다.

twitter 보석은 여러 API 호출을 처리합니다. 예를 들어 팔로워가 1,000 명인 경우 보석은 여러 가지 API 호출을 현장에서 수행합니다. 보석은 recommended way to handle rate limits입니다. 여기가 추천 내용은 다음과 같습니다

follower_ids = client.follower_ids('justinbieber') begin 
    follower_ids.to_a 
rescue Twitter::Error::TooManyRequests => error 
    # NOTE: Your process could go to sleep for up to 15 minutes but if you 
    # retry any sooner, it will almost certainly fail with the same exception. 
    sleep error.rate_limit.reset_in + 1 
    retry 
end 

그 오류는 주어진 시간 내에 너무 많은 요청을했습니다 말하고있다. 속도 제한이 지워질 때까지 기다려야합니다.

이 트위터의 말씀입니다 :

Rate limiting of the API is primarily on a per-user basis — or more accurately described, per user access token. If a method allows for 15 requests per rate limit window, then it allows 15 requests per window per access token.

참조 : https://developer.twitter.com/en/docs/basics/rate-limiting

+0

내가 추종자와 친구의 차이를 얻을 필요가있다. 가장 좋은 방법은? 답변 해주셔서 감사합니다. – Jelle

+0

@result = @ client.followers [ "users"]. 수집 {| f | f [ "screen_name"]} # => NoMethodError (# 에 대한 정의되지 않은 메소드 [[] ') : – Jelle

+0

죄송합니다. 코드 예제를 업데이트했습니다. 나는 이것을 시험해 보았으므로 이번에는 당신에게 도움이 될 것이라고 확신합니다. –