Twitter(X) API 사용기

THXX·2023년 9월 27일
1

Twitter는 이제 없다. 벌써 X로 타락한 지 꽤 시간이 지난 듯 하다. 그래도 사람들은 아직 Twitter에 익숙하니까 계속 트위터라고 부르기로 했다.

거두절미하고 Twitter API를 사용해본 기록을 한 번 보자.

Twitter API

종류가 두 가지 있다.

  • v1.1
  • v2

v1.1은 예전 방식이고 v2는 최신 방식이다. 그러나 아직 migration이 덜 됐는 지 v1.1에서 되는 것이 v2에서 없는 경우가 있다. (특히 미디어 업로드)

Twitter Developer Portal에 가면 아직 푸르딩딩하게 살아있는 파랑새와 함께 App을 생성할 수 있는 대쉬보드가 보인다.

App을 생성하고, User authentication을 설정하고(Write 권한을 받기 위해서) Keys and tokens 탭에 들어가서 Consumer Keys, Authentication Tokens 및 OAuth 2.0 아이디 및 비밀번호를 생성하고 전부 기록해놓도록 하자.

이런게 보이면 성공이다. 이제 Twitter API를 통해 글을 작성할 수 있다.

필요한 비밀 정보는 다음과 같다.

  • Consumer Key
  • Consumer Secret
  • Access Token
  • Access Secret

Beginning

Python을 사용하겠다. 다음 명령어를 이용하여 TwitterAPI 모듈을 설치해주자. 비공식 Twitter API Wrapper 모듈이지만, 트위터가 공식적으로 추천하는 모듈 중 하나이다.

pip install TwitterAPI

다음과 같은 코드를 작성하자.

from TwitterAPI import TwitterAPI

ck=#YOURCONSUMERKEY
cs=#YOURCONSUMERSECRET
atk=#YOURACCESSTOKEN
ats=#YOURACCESSSECRET

api1= TwitterAPI(ck,cs,atk,ats)
api2= TwitterAPI(ck,cs,atk,ats,api_version='2')

with open("YOUR IMAGE PATH","rb") as f:
    data = f.read()
    r = api1.request('media/upload',{"media_type":"tweet_image"},{
        'media':data
    })
    print(r.json())
    media_id = r.json()["media_id_string"]
TwitterAPI.request(resource,params,files,method_override,hydrate_type)

미디어 업로드의 경우 POST media/upload Twitter API v1.1 엔드포인트에 데이터를 전송해야 한다. 패러미터 정보가 공식 문서에 있으므로 확인하면 좋겠다. media_type의 경우 amplify_video, tweet_gif, tweet_image, tweet_video 가 가능하다. 적절한 media_type을 골라야 한다. 지금은 트윗용 이미지를 업로드하므로 tweet_image를 선택하여 params로 날려주고 있다. 그리고 이미지 바이너리 데이터는 files로 보내주고 있다.

미디어 업로드가 완료되었으면 다음과 같은 response를 r에 저장하게 된다. r.json()으로 JSON 형식으로 바꿔주었다.

{
  'media_id': 1303060470740000000,
  'media_id_string': '1303060470740000000',
  'media_key': '3_1303060470740000000',
  'size': 23554,
  'expires_after_secs': 86400,
  'image':
    {'image_type': 'image/png', 'w': 768, 'h': 768
      
    }
}

우리가 필요한 건 media_id이다. Big Integer를 사용할 수 있는 Python 환경이라면 그냥 media_id를 써도 되지만 string으로 받는 게 그냥 마음 편해서 media_id_string을 사용하기로 했다.

이제 API v2로 이미지가 있는 트윗을 한 번 생성해보도록 하자.

r = api2.request('tweets',method_override="POST",params={
    "text":"YOUR TEXT",
    "media":{
        "media_ids":[media_id]
    }
})

문서
method_override를 POST로 직접 설정해줘야만 했다. 자동으로 될 줄 알았는데.
간단하다... 패러미터에 text와 media_id를 위와 같이 넣어주면 끝이다. 아래와 같은 Response를 받는다.

{
  'data': {
    'edit_history_tweet_ids': ['1305010763265300000'],
    'id': '1305010763265300000',
    'text': 'YOUR TEXT https://t.co/EXAMPLEIMAGEURL'
  }
}

기억 상 edit_history_tweet_ids는 없었던 것 같은데... 트위터가 결국 프리미엄 유저에 한해 수정 기능을 만들었기 때문에 나오지 않나 생각한다.

id는 트위터 글의 id, text는 트위터 글의 내용이다.

이제 트위터를 가서 확인해보면 트윗이 작성되어 있는 것을 확인할 수 있을 것이다.


트위터 API는 완전히 유료화되었다. 글을 읽는 것은 불가능하다. 미디어 업로드 및 트윗 작성/삭제, 그리고 자신의 트위터 UID를 아는 것 말고는 사용할 수 없게 되었다. 안타까운 일이다. 돈도 많으시면서...

혹시나 API를 이용하여 글을 읽으려고 하는 초심자분이 이 글을 읽고 있다면 즉시 포기하라. API를 사용하기 위해서는 거금을 내셔야 한다. 이미 개발되어 있는 트위터 스크랩퍼를 이용하는 것이 좋겠다.

~完~

profile
THXX FOR EVERYTHING

0개의 댓글