자주 묻는 질문(FAQ)

일반

API 클래스에서 HTTP 401 권한 없음(Unauthorized) 오류가 발생하거나, Client 클래스에서 HTTP 403 금지됨(Forbidden) 오류가 발생하는 이유는 뭔가요?

만약 본인이 현재 인증된 사용자로 해당 작업(메서드)을 실행하고 있다면(ex. API.update_status()), 본인의 앱에 쓰기 권한이 있는지 확인하세요.

(쓰기 권한이 없었다면) 쓰기 권한을 부여하고, 새 자격 증명을 사용하여 해당 작업을 재생성하세요.

더 자세한 정보는 트위터 API 문서 - 엡 권한 페이지를 참고하세요.

API 클래스에서 HTTP 403 금지됨(Forbidden) 오류가 발생하는 이유는 뭔가요?

트위터 API 액세스 권한이 Essential인 경우, 트위터 API v1.1에 액세스 할 수 없을거예요.이는 APIStream 클래스의 모든 메서드를 포함하고 있습니다.

Client 클래스를 이용해 트위터 API v2를 이용하거나, Elevated로의 액세스 권한 상승을 요청해야 해요.

더 자세한 정보는 트위터 API 문서 - 액세스 권한 및 버전 페이지를 참고하세요.

GIF나 동영상을 업로드하려고 하는데 문제가 발생해요. 이유가 뭔가요?

고용량의 GIF를 업로드할 때 HTTP 400 잘못된 요청(Bad Request) 오류가 발생하거나, 영상 파일을 업로드할 때 다른 오류 및 문제가 발생하는 경우, media_category 매개변수를 제대로 설정했는지 확인하세요. (예: tweet_gif 또는 tweet_video)

또한 업로드하려는 영상 파일이 권장 규격에 맞는지도 확인하세요.

더 자세한 정보는 트위터 API 문서 - 미디어 업로드 페이지를 참고하세요.

특정 사용자에 대한 3200개의 트윗이 수신되거나 그렇지 못한 이유는 무엇인가요?

《많은 트래픽이나 고용량의 트래픽을 발생시키는 계정의 경우, 트위터 API가 고도로 분산되어 있으며 일관성이 있음을 유의해야 합니다. 저희는 최신 정보를 제공하기 위해 노력하나, 다른 대규모 시스템과 마찬가지로 예상 밖의 행동을 고용량 트래픽으로 간주할 수 있습니다.》

https://twittercommunity.com/t/inconsistent-tweet-retrieval/150635

API.search_tweets() 로부터 아무 결과값도 받지 못하는 이유는 무엇인가요?

트위터의 표준 검색 API는 《최근 7일간의 트윗에 대해서만 검색》합니다.

최근 7일 밖과 같은 범위를 지정하거나, 지난 7일간의 트윗(또는 대상 데이터)이 없으면 결과값이 반환되지 않습니다.

더 자세한 정보는 다음의 트위터 API 문서 - 표준 검색을 참고하세요: https://developer.twitter.com/en/docs/twitter-api/v1/tweets/search/overview https://developer.twitter.com/en/docs/twitter-api/v1/tweets/search/api-reference/get-search-tweets

tweepy v4

API 클래스의 메서드 중 하나의 위치 인수(Positional argument)를 받는 메서드가 두 개의 위치 인수를 전달해줬을 때 TypeError 를 반환하나요?

이 오류 및 다른 유사한 오류는 Tweepy v4.0.0 에서의 변경점 중 API 클래스의 메서드가 더 이상 임의의 위치 인수를 받지 않도록 바뀌었기 때문입니다.

이런 매개변수는 키워드 인수(Keyword argument)로 대신 전달될 수 있습니다.

사용 중인 API 클래스 메서드에 대한 tweepy 문서를 참고하세요.

API.me 는 어디로 이동됐나요?

tweepy v4에서 API.me 를 사용하려 하면, APIme 속성을 가지고 있지 않다는 AttributeError 가 반환될 겁니다.

이는 Tweepy v4.0.0 부터 API.me 가 제거됐기 때문입니다.

API.verify_credentials() 를 이 대신 사용할 수 있습니다.

API.search 는 어디로 이동됐나요?

API.search 이나 tweepy v3 에서만 지원했던 API 메서드를 사용하려는 경우, tweepy v4에서는 AttributeError 가 대신 반환되게 됩니다.

이는 Tweepy v4.0.0 부터 많은 API 클래스 메서드의 이름을 일관적으로 보이도록 바꿨기 때문입니다.

예로, API.searchAPI.search_tweets() 로 바뀌었습니다. 체인지로그(Changelog)나 릴리즈 노트(Release note)를 참고해, 메서드 호출법을 올바르게 수정해 주세요.

StreamListener 는 어디로 이동됐나요?

tweepy v4에서 StreamListener 를 임포트하려 하면, tweepyStreamListener 속성을 가지고 있지 않다는 AttributeError 가 반환될 겁니다.

이는 tweepy v4.0.0 에서 StreamListenerStream 클래스로 병합되었기 때문입니다.

tweepy v4를 사용하려면, 본인의 코드를 Stream 클래스를 사용하게끔 올바르게 수정해주어야 합니다.

트위터 API v2

API v2에서 Client 클래스를 사용해 필드 데이터를 받지 못하는 이유는 무엇인가요?

만약 본인이 해당 객체를 출력하고 이를 확인하는 경우, API v2 모델 및 객체의 문자열형 표현에는 이 객체가 존재함을 보장하는 속성들만 포현되어 있을 것입니다.

개체 자체에는 여전히 (딕셔너리형 변수와 같이, 특정 속성 및 값으로 접근할 수 있는) 관련 데이터가 포함되어 있습니다.

전체 데이터에 대한 딕셔너리꼴의 데이터를 제공하는, 데이터(data)라는 속성 및 값도 존재합니다.

Paginator 클래스를 포함하고 있는 includes 데이터에 액세스하려면 어떻게 해야 하나요?

Paginator.flatten() 메서드가 data 를 1차원꼴로 단순화해 주고, 이를 각 개체에 대해 반복합니다.

includes 에 액세스하려면, 대신 각 응답에 대해 반복해야 합니다.

Client.search_all_tweets()Paginator 를 같이 사용하는데, 왜 이렇게 트위터 API 제한에 빨리 도달하나요?

Client.search_all_tweets() 가 사용하는 가져오기: /2/tweets/search/all 트위터 API 엔드포인트는 초당 1번의 추가 제한을 갖고 있으며, 이는 Paginator 에 의해 처리되지 않습니다.

time.sleep() 을 이용, 반복 작업 간 지연 시간을 1초로 설정해 API 호출 제한에 도달하지 않도록 할 수 있습니다.