# https://imasoftwareengineer.tistory.com/97?category=791547
import tweepy
from tweepy.streaming import StreamListener
from tweepy import OAuthHandler
from tweepy import Stream
import json

# twitter 계정이 있다면 앱을 만들어서 등록
# 그렇지 않을 시에는 데이터베이스에 있는 정보 등록
consumer_key = 'xx'
consumer_secret = 'xx'
access_token = 'xx'
access_secret = 'xx'

# 리스너 - 스트리밍 API로 부터 값이 들어오면 아래의 리스너가 실행된다.
class Listener(StreamListener):
    def on_data(self, data):
#         all_data = json.loads(data)
#         tweet = all_data["text"]    # 트위터 내용 중 text 정보만 가져오고 싶을 때,
        with open('sample.json', 'a', encoding='utf-8') as f:
            json_data = json.loads(data)    # str -> json으로 변환
            json.dump(json_data, f, ensure_ascii=False) # json을 원형 그대로 파일에 저장(인코딩 깨짐을 방지)
            print(json_data)
        return True

    def on_error(self, status):
        print("ERROR: " + str(status))

def main():
    # 리스너 생성
    l = Listener()
    auth = OAuthHandler(consumer_key, consumer_secret)
    auth.set_access_token(access_token, access_secret)
    stream = Stream(auth, l) # 리스너와 인증키을 통해 스트리밍 객체 생성

    # 언어=한국어(ko), 해시태그=필터할 단어
    stream.filter(languages=["ko"], track=['손흥민'])

if __name__ == '__main__':
    main()

main()