[API, Python] 트위터 API 크롤링하기

김재연·2022년 4월 7일
2

자연재해지도

목록 보기
2/8
post-thumbnail
post-custom-banner

트위터 개발자 계정 신청하고 API key 받기

트위터 개발자 계정 신청을 하고 메일을 기다렸는데 존나 아무리 기다려도 안오길래 다른 방법 없나 찾아보다가 2021년 11월? 쯤 올라온 한 글에... 요새는 절차가 간편해져서 키가 바로 나온다~ 라길래 호오오옹ㄱ시나 해서 개발자 계정 만들면서 나왔던 키들로 대충 눈치로 때려맞춰서 넣어봤는데 호고곡........ 나 왜 기다림?

twitter_consumer_key = "API Key"
twitter_consumer_secret = "API Key Secret"  
twitter_access_token = "Access Token"
twitter_access_secret = "Access Token Secret"

그랬다... 이미 키를 줬는데 그냥 아무 의미 없이 기다린거였다...


트위터 API 크롤링 실습

아무튼 그래서 이 키를 가지고 트위터 api 크롤링 실습을 해봤다. 아주 간단함

파이썬과 트위터 API를 활용한 트위터 크롤링 (코드 예제) 를 참고해서 했다.


1. 파이썬 크롤링 오픈소스 라이브러리 설치

pip install python-twitter

2. API 키 넣기

API 키는 .env 파일에 숨겨서 넣었다.

# .env
twitter_consumer_key=API Key
twitter_consumer_secret=API Key Secret
twitter_access_token=Access Token
twitter_access_secret=Access Token Secret
# api/twitter_api.py
# window (secret key)
from pathlib import Path
import os
import environ

BASE_DIR = Path(__file__).resolve().parent.parent
env = environ.Env(
    DEBUG=(bool, False)
)
environ.Env.read_env(os.path.join(BASE_DIR, '.env'))

twitter_consumer_key = env('twitter_consumer_key')
twitter_consumer_secret = env('twitter_consumer_secret')
twitter_access_token = env('twitter_access_token')
twitter_access_secret = env('twitter_access_secret')

원래 env 코드는 settings.py에 넣어서 from disaster_map.settings import * 만 넣어도 잘 돌아가야 하는데 자꾸 disaster_map 이라는 모듈이 없다고 에러를 내서 그냥 필요한 부분만 따와서 또 넣었다.


3. 트위터 API에 연결하기

# api/twitter_api.py
import twitter

twitter_api = twitter.Api(consumer_key=twitter_consumer_key,
                          consumer_secret=twitter_consumer_secret, 
                          access_token_key=twitter_access_token, 
                          access_token_secret=twitter_access_secret)

twitter.Api 메소드에 키값만 잘 맞춰서 넣어주면 연결이 되고, 이후에 사용할 때는 twitter_api 에 메소드를 붙여서 사용한다. 아 그리고 파일 이름을 twitter.py 라고 하니까 import twitter 를 제대로 못시켜서 파일명을 twitter_api.py로 바꿔줬다.


4. 특정 계정의 타임라인 긁어오기 : GetUserTimeline()

# api/twitter_api.py
account = "@DrStrange"
statuses = twitter_api.GetUserTimeline(screen_name=account, count=200, include_rts=True, exclude_replies=False)

for status in statuses:
    print(status.text)

account에 가져올 계정을 적고 다른 메타데이터 없이 실제 트윗 텍스트만 보기 위해 뒤에 .text 를 붙여서 출력하면

얘는 닥터스트레인지 공식계정

얘는 스파이더맨 공식계정

이렇게 가져온다 닥스 개봉 빨리


5. 스트리밍 : GetStreamFilter()

기존에 있는 문서를 긁어오는 크롤링과는 다르게 실시간으로 대기하면서 트윗들을 추적한다.

# api/twitter_api.py
query = ["벚꽃"]
output_file_name = "stream_result.txt"
with open(output_file_name, "w", encoding="utf-8") as output_file:
    stream = twitter_api.GetStreamFilter(track=query)
    while True:
        for tweets in stream:
            tweet = json.dumps(tweets, ensure_ascii=False)
            print(tweet, file=output_file, flush=True)

이러면 실시간으로 '벚꽃'이라는 단어가 포함된 트윗들을 json 형식으로 stream_result.txt에 저장한다. 파일이 저장되는 위치는 현재 내 위치. 어쩔땐 트윗 하나당 한줄씩 예쁘게 나오고 어쩔땐 우다다다 못생기게 나오는데 그 패턴을 잘 모르겠다.


그외

맥이랑 윈도우 환경 일치시키기

시크릿키나 GDAL 관련해서 맥이랑 윈도우랑 달라서 환경 세팅에 시간을 좀 들였는데 윈도우에서만 필요한 파일은 깃에 올릴 필요가 없으니까 .gitignore 에 추가해줬다. 무슨 문법이 있을 줄 알았는데 그냥 깃에 안올리고 싶은 파일명만 띡 써주면 됐다. (setup.bat 파일을 안올리고 싶으면 그냥 .gitignore 파일 맨밑에 setup.bat이라고 써주면 된다.) 이미 올린 파일을 지워서 반영하려면 git rm --cached 파일명 을 하고 커밋을 해야했다.

최초 설치 후 다른 프로젝트에서 GDAL 사용하기

그리고 GDAL을 한번 설치한 상태에서 새 프로젝트에도 쓰려면 wheel 파일을 이용한 GDAL 설치와 libgdal.py 수정만 해주면 됐다. 사실 wheel 파일을 로컬 컴퓨터 아무데나 저장해두고 절대경로로 설치해주면 되고, setup.bat 같은 경우는 최초설치때만 하면 되기 때문에 .gitignore까지 써가면서 이 파일들을 프로젝트에 넣어서 사용할 필요가 없었다. 사실상 libgdal.py 수정만 좀 귀찮은 편? 다만 wheel 파일 같은 경우에는 pip freeze를 하면 requirements.txt에 wheel 파일의 절대경로가 들어가서 맥이든 윈도우든 사람마다 컴퓨터마다 달라서 따로따로 해주긴 해야겠다.

profile
일기장같은 공부기록📝
post-custom-banner

2개의 댓글

comment-user-thumbnail
2022년 7월 14일

안녕하세요 api를 설정하고 싶은데 이런경우도 가능한가요? 잘몰라서 여쭙니다

감사합니다 봇? 매크로 관련해서 궁금한점입니다

A라는 사이트에서 무작위 아니고 딱 정해진 글 사진 입니다

글이나 사진 클릭하면 공유하기 (트위터) 뜨는데

정해진 글 사진을 매일 한번씩 트위터로 공유하기 가능한가요?

그렇다면 어떻게 설정 해야 할까요?

감사합니다

1개의 답글