Skip to main content

소개

이 튜토리얼에서는 프로그래밍 언어 R과 X API v2를 시작하는 데 필요한 내용을 단계별로 살펴봅니다. R을 사용해 user lookup 엔드포인트에 연결하면서, X API에서 반환되는 JSON을 어떻게 다루는지 보여줄 것입니다. User lookup은 GET 메서드이며, 사용자 id 또는 사용자 이름(username)으로 지정된 하나의 사용자 또는 여러 사용자에 대한 정보를 반환합니다. R에 익숙하지 않다면, R은 시계열 분석, 모델링, 시각화 및 기타 데이터 분석과 같은 일반적인 데이터 사이언스 작업에 가장 널리 사용되는 언어 중 하나이며, 종종 X API와 함께 사용됩니다. User lookup 엔드포인트와 함께 user object를 사용하면, 특정 인물이 가진 팔로워 수와 그 사람의 프로필 소개(bio)의 감성 점수 간 상관관계를 분석할 수 있습니다. User object는 또한 프로필에 공개적으로 기재된 위치 정보를 기반으로 여러 계정으로 구성된 그룹을 매핑하는 데도 사용할 수 있습니다.

X API 시작하기

X API v2를 사용하려면 먼저 가입을 통해 개발자 계정을 만들어야 합니다. 개발자 계정 승인을 받은 후에는 먼저 Project를 생성해야 합니다. Project를 사용하면 X API를 어떻게 사용할 계획인지에 따라 작업을 구성할 수 있으므로, API 접근 권한을 효율적으로 관리하고 사용량을 모니터링할 수 있습니다. 각 Project에는 App이 포함되어 있으며, 이를 사용해 X API를 사용하는 데 필요한 자격 증명을 생성할 수 있습니다. X API 사용을 시작하는 방법에 대해 더 알고 싶다면 문서의 시작하기 섹션을 참고하세요.

R 환경 설정하기

먼저 R를 다운로드해야 하며, 이는 CRAN 웹사이트에서 할 수 있습니다. 다음으로 R로 작업할 환경을 설정하기 위해 RStudio, Visual Studio Code의 R 확장 팩, 또는 Python 환경에 익숙하다면 Jupyter Notebook을 사용할 수 있습니다.

환경 변수 설정하기

이 문서에서 보여 줄 코드 예제를 사용하려면 Bearer 토큰을 위한 환경 변수를 만들어 두어야 합니다. Bearer 토큰은 X API에 인증하고 요청을 보내기 시작할 수 있게 해 주는 값입니다. 먼저 “your-bearer-token”을(를) 개발자 콘솔에서 App의 키 및 토큰 섹션을 통해 발급받은 본인의 Bearer 토큰으로 교체하세요. 스크립트를 작성하기 전에 터미널에서 이 한 줄의 코드를 실행해야 합니다.
Sys.setenv(BEARER_TOKEN = "your-bearer-token")

요청 보내기

패키지 httr를 사용해 X API로 HTTP 요청을 보낼 수 있습니다. 아직 설치하지 않았다면 콘솔에서 이 패키지를 설치하세요. 또한 JSON 객체를 다루기 위해 jsonlite와 데이터 처리를 위해 dplyr도 설치해야 합니다.
install.packages("httr")
install.packages("jsonlite")
install.packages("dplyr")
이제 API에 연결하는 R 스크립트 작성을 시작할 수 있습니다. 파일 맨 위에서 httr, jsonlite, dplyr 패키지를 불러오세요.
require(httr)
require(jsonlite)
require(dplyr)
코드 샘플의 첫 번째 단계는 X API에 인증할 수 있도록 환경을 설정하는 것입니다. App에서 가져온 Bearer Token을 가져와서 인증을 위해 헤더에 넣으세요. 아래 예제에서 $BEARER_TOKEN을 자신의 토큰으로 바꿔 넣으세요.
bearer_token <- Sys.getenv("$BEARER_TOKEN")
headers <- c(`Authorization` = sprintf('Bearer %s', bearer_token))
인증 설정을 마쳤다면, 요청에 사용할 파라미터를 정의하세요. 기본적으로는 각 사용자에 대해 id, name, username 값만 반환됩니다. 추가 필드expansions를 더해 이 JSON 페이로드를 조정할 수 있습니다. 이 예제에서는 사용자의 프로필 소개(bio)를 가져와야 하며, 이는 user.fields=description 으로 요청하고, 사용자의 고정 게시물(pinned Post)을 포함하는 expansion도 함께 요청합니다.
params <- list(`user.fields` = 'description', `expansions` = 'pinned_tweet_id')
이제 더 많은 정보를 가져오려는 X 핸들(계정이라고도 함)을 사용해 URL을 포맷팅할 준비가 되었습니다. 이 샘플을 재사용할 수 있도록 readline 메서드를 사용하세요. 조회하려는 핸들을 입력한 뒤 $USERNAME을 원하는 X 핸들로 교체하여, 정의한 핸들이 URL에 포함되도록 구성합니다.
handle <- readline('$USERNAME')
url_handle <- sprintf('https://api.x.com/2/users/by?usernames=%s', handle)
이제 httr 패키지를 사용해 방금 생성한 URL로 GET 요청을 보내고, 헤더를 통해 우리의 인증 정보를 전달한 뒤, 정의한 매개변수들을 함께 넘기면 됩니다. 응답은 변수 obj에 텍스트 객체로 저장한 다음, 이를 출력해서 방금 보낸 요청의 결과를 확인할 수 있습니다.
response <-
  httr::GET(url = url_handle,
    httr::add_headers(.headers = headers),
    query = params)
obj <- httr::content(response, as = "text")
print(obj)

JSON 페이로드 다루기

JSON을 다룰 때 제가 가장 선호하는 방법 중 하나는 데이터 프레임을 사용하는 것입니다. 데이터 프레임을 사용하면 복잡하게 중첩된 데이터에도 쉽게 접근할 수 있습니다. 이를 위해 jsonlite 패키지의 fromJSON 메서드를 사용하여 파일을 평탄화(flatten)해 필드가 동일한 객체 안에 있도록 만듭니다. 그런 다음, 그 객체를 데이터 프레임으로 변환합니다. 이제 이 데이터 프레임을 확인할 준비가 되었습니다.
json_data <- fromJSON(obj, flatten = TRUE) %>% as.data.frame View(json_data)
데이터 프레임에서 데이터의 필드에 접근해 핸들, 사용자 이름, 프로필 소개를 포함하는 문자열을 만들 수 있습니다.
final <-
  sprintf(
    "Handle: %s\nBio: %s\nPinned Post: %s",
    json_data$data.username,
    json_data$data.description,
    json_data$includes.tweets.text
  )
각 필드 사이에 줄바꿈이 들어가도록 객체를 출력하려면 print 대신 cat을 사용하세요.
cat(final)
여러 개의 핸들에 대해 요청을 보낸 경우라면, 루프를 사용해 데이터 프레임의 각 요소에 쉽게 접근할 수 있습니다.

결론

이 튜토리얼이 R과 X API를 함께 사용하는 데 있어 출발점이 되었으면 합니다. 다음 단계로, 최근 검색, 게시물 조회 및 사용자 조회를 위한 R 샘플을 v2 sample code에서 살펴보시기 바랍니다. 진행 중에 문제가 발생하면 forums에서 알려 주시거나, 이 튜토리얼을 바탕으로 무언가를 만들게 되었다면 @XDevelopers로 게시물을 남겨 알려 주시기 바랍니다.