X API v2로 오늘의 내 트윗들을 가져오는 아이폰 단축어

기록을 생활화하자는 2025년 새해 목표에 맞춰, 나의 순간 순간 하루 하루를 기록으로 남기려는 노력을 구체화하고 있다. 그 가운데, 꼭 포함하고 싶었던 것이 X(구 트위터)의 작성 글들을 따로 저장하는 것이다. 이것의 큰 이유 중 하나는 찰나의 순간을 트윗에 남겼는데 검색이 안돼서 헤맸던 경험이 많았기 때문이다. 

 

나의 순간 순간 기록의 주 소스는 내가 사용하는 아이폰이 가장 클 것이다. 하여, 날짜마다 특별한 기록을 남긴다는 목표 아래 아이폰 단축어로 "오늘 내 트윗들을 가져오는 기능"을 만들기로 했다. 아이폰 단축어는 가히 프로그래밍이라 할만한 기능을 갖추고 있는데, 어떻게 써야하는지 도통 잘 모르겠더라는. 이번 기회에 하나하나 써보며, 내 삶의 기록에 대한 보다 자동화한 정리를 시도하였다. 

 

만들고자 하는 기능은 "X(트위터) API로 오늘의 내 트윗들을 가져오고, 이를 별도로 저장하는 것이다" 이 과정을 몇몇 시도 끝에 성공하였고, 단계별로 설명하고자 한다. 

 

X API 사용 준비

X API를 쓰려면 개발자 등록을 먼저 해야 한다. https://docs.x.com/

위 사이트에 들어가서 X 계정으로 로그인하고, "Developer portal"에 들어간다. Free 사용자로 이용할 수 있는 Default Project를 만들 수 있다. 만들어진 프로젝트의 "Keys and tokens"에 들어가면, "Bearer Token"을 만들 수 있다. 이 토큰은 X API를 쓸 수 있게 하는 토큰으로 API를 호출해 쓰려면, 호출한 자가 나라는 사용자를 확인하는 키다. 

Free 사용자와 유료(Pro, Basic) 사용자가 있다. API 호출을 많이 한다면 유료로 가야겠지. 난 하루에 한번만 "내 트윗들"을 가져오면 되니까, 무료면 충분하다. 참고로, 계정 구분별 차이는 아래 스크린샷에 나와 있다.

Free 사용자는 얼마나 쓸 수 있나 봤더니 한달에 100번 가져오고, 500번 쓸 수 있다고 한다. 엄청 짜다. 한달에 100번이라니! 어쩌면 테스트하느랴 써 본 것 때문에 이번달(30일) 모자를지도 모르겠다. 게다가 페이지를 좀 더 내려보면, Free 사용자일 경우, 대부분이 "1 requests / 15 mins PER USER" 이다. 15분 당 요청 한번? 음냐; 암튼, 위에서 만든 Bearer Token 외에도 나의 X 사용자 id를 알아야 한다. 나는 @yong27을 쓰니, "yong27"이 id 인줄 알았는데, 아니다. 이건 username이고, 숫자로 된 별도의 ID가 필요하다. 이걸 알아내는 다양한 방법들이 있는데, 가장 간편한 방법인 FIND TWITTER ID 와 같은 사이트에 물어보는 것이다.  

X (Twitter) username 과 덧셈문제 답을 누르면, 

나의 X ID가 168908493 임을 알 수 있다. 그럼 여기까지 X API를 쓰기 위한 준비가 다 됐다. Bearer Token과 X ID가 필요하다.  

X API 연습 

 X API에는 다양한 endpoint가 제공되는데, 내가 필요한 것은 내가 쓴 트윗들을 가져오는 것이므로, "User Posts timeline by User ID" 를 이용한다. 편리하게도, 사용법을 설명하는 사이트에 바로 이를 시도해 볼 수 있는 버튼 "Try it" 이 있다. 리눅스 명령행 curl 이나, postman 프로그램을 써보는 것보다 편리하게 연습해볼 수 있다. 

위 설명을 한번 읽어보고, "Try it" 버튼을 눌러본다. 

그러면, 바로 이 endpoint를 직접 시도해 볼 수 있는 인터페이스가 등장한다. "Authorization" 부분에 아까 복사한 Bearer Token을 넣고, id 부분에 숫자로 된 Twitter ID를 입력한다. 그리고, 밑에 다양한 옵션들이 있다. 나는 특정한 날짜 데이터만 필요하므로, start_time과 end_time을 각각 특정한 날의 00:00:00 부터 23:59:59 까지 설정하고, "send"를 눌러본다. 그러면 바로, 그날의 트윗들이 예쁘게 JSON으로 나온다. 

 

근데! 또 하면 Too Many Requests 라면서, 안나온다. 15분 기다렸다 다시해야한다. (위에서 말했듯 15분당 요청 한번만 가능) 

 

15분 기다리기 지루하니 다른 일 하면서 틈틈히 테스트한다. 저 테스트 사이트의 장점이 curl, 파이썬 등 언어별로 가져오는 코드를 제공한다는 것. 내가 성공한 요청에 대한 curl 쿼리는 다음과 같다. 

curl --request GET \
  --url 'https://api.twitter.com/2/users/16898493/tweets?start_time=2025-01-13T00%3A00%3A00Z&end_time=2025-01-14T23%3A59%3A59Z&tweet.fields=created_at&media.fields=url&user.fields=name&place.fields=full_name' \
  --header 'Authorization: Bearer AAAAAAAA...... (생략)'

 

이 코드를 보면 어떻게 동작하는지 이해가 갈 것이다. 그럼 이제 이걸 아이폰 단축어로 구현해보자.

이 과정을 아이폰 단축어로 구현하기

아이폰, 스마트폰은 단순한 통신 도구를 넘어, 우리의 삶을 체계적으로 관리하고 더 나은 생활 습관을 만들 수 있는 강력한 개인화 도구이다. 나와 가장 가까운 곳에서 함께 하는 시간도 많으니 기왕이면 좋은 습관과 나은 삶으로 이어지게 하면 좋지 아니한가! 아이폰 단축어(shortcut)은 일종의 엑셀 매크로 같은 것이여서, 아이폰에서 다루는 다양한 정보와 기능들을 내가 원하는 대로 직접 만들어 활용할 수 있는 프로그래밍 환경을 제공한다. 아주 복잡한 로직은 어렵지만, 일상의 기능들을 자동화하기엔 충분하다. 개인 서버를 두고 cron 등으로 자동화했던 많은 일들을 내 아이폰이 대신하게 하면, 개인 서버가 없어도 될 것이다. 어짜피 아이폰은 24시간 켜 있고, 온라인에 연결돼 있고, 성능도 아주 좋으니 말이다. 그리고, 시리, 위젯, 위치, 메모, 메세지, 미리알림, API 등 입력과 출력을 훨씬 다양하게 활용할 수 있다. 해서, 앞으로 종종 도움되는 사례들을 아이폰 단축어로 만들고자 한다. 

 

 

아이폰 단축어는 단위 "동작"들 여러개를 연결하여 원하는 기능으로 조립할 수 있다. 동작은 다음과 같이 구분된다.

  • 스크립트하기: 숫자, 목록(배열), 사전 등 데이터 타입을 비롯하여, 제어구문, 입출력, 변수에 넣기 등
  • 제어 항목: Wi-Fi를 설정한다던가 AirDrop을 한다던가 등 아이폰 설정
  • 기기: 배터리 등 현재 기기의 상태, 클립보드, 알림 등 기기 입출력
  • 위치: GPS 위치에 대한 다양한 동작들
  • 미디어: 이미지, 이미지 편집, 사진 앱 접근, 비디오, 음악, 팟캐스트 관련 동작들
  • 공유하기: 메일, 메세지, AirDrop 등 누군가와 공유하기 위한 동작들
  • 문서: 파일, 프린트, PDF, 리치텍스트 등을 다루는 동작들
  • : 웹 검색, 사파리, RSS, 웹 요청에 대한 동작들 

X API로 오늘의 트윗들을 가져오는 것은 웹 - 웹 요청의 "URL 콘텐츠 가져오기"이다. 여기에 URL 주소와 전송방식, 헤더값등을 넣고 데이터를 받을 수 있다. 현재 날짜를 시작으로 start_time, end_time을 지정하고, URL을 완성한 후, 결과를 받는 것까지 만들면,

 

드래그 앤 드롭 만으로, 오늘 날짜의 트윗을 JSON 형식으로 가져오는 것 성공. 대신 한번 요청 후 15분 안지나면, 세번째 그림의 "Too Many Request" 응답을 볼 수 있다.  JSON 파일도 예쁘게 출력되도록 적절히 파싱할 수 있다. "사전"에 넣은 후, "data" 값을 가져오고 배열을 루프로 돌면서 적절히 문자열 포매팅을 하면 된다. 

 

 

단축어의 재밌는 특징은 대개 별도의 변수 선언이 필요없고, 앞 단계의 동작의 결과가 자동으로 다음 단계의 입력으로 사용된다는 점이다. 변수는 꼭 필요할 때만 만들면 된다. 문자열 포매팅도 직관적이고, 루프 안에서 들여쓰기 된 것도 알아보기 좋다. 다만 몇가지 잘 안되는 점도 있다는 것. 트윗 순서를 최근 것이 밑으로 가도록 정렬, 즉 역순으로 루프를 돌리고 싶은데, 방법을 못찾고는 일단 멈춤. 구글에 한국어로 검색하면 관련 정보는 거의 없고, 영어로 검색하면 reddit 에 조금씩 정보가 있다. 어느 reddit 글을 보니, "Filter Files" 동작을 쓰면 된다고 하는데, 비슷하게 동작하긴 하지만, 그냥 역순으로만 하면 되는 이 문제는 해결이 안된다. (reddit에서는 단축어를 "r/shortcut" 이라고 구분하던데 "r" 이 무슨 의미일까?)

 

암튼, 처음으로 원하는 기능의 아이폰 단축어를 만들었고, 잘 동작한다. 이걸 "자동화" 기능을 통해 매일 한번 자동으로 실행되도록 할 수 있다. 또한 다양한 아이디어를 실험할 수 있는 재밌는 환경임을 알았다. 오케이. 나의 하루를 자동으로 기록하는 첫번째 준비는 여기까지.  

 

반응형