twitter.py
8.22 KB
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
172
173
174
175
import GetOldTweets3 as got
from bs4 import BeautifulSoup
import datetime
import time
from random import uniform
from tqdm import tqdm_notebook
def get_tweets(criteria):
tweet = got.manager.TweetManager.getTweets(criteria)
tweet_list = []
for index in tqdm_notebook(tweet):
# 메타데이터 목록
username = index.username
link = index.permalink
content = index.text
tweet_date = index.date.strftime("%Y-%m-%d")
retweets = index.retweets
favorites = index.favorites
# 결과 합치기
info_list = {'username' : username, 'text': content, 'time': tweet_date, 'link': link}
tweet_list.append(info_list)
# 휴식
time.sleep(uniform(1,2))
print("====================================")
if(len(tweet_list) == 0):
print("조건에 맞는 tweet이 없습니다.")
else:
print(tweet_list)
print("====================================")
days_range = []
start = datetime.datetime.strptime("2019-11-25", "%Y-%m-%d")
end = datetime.datetime.strptime("2019-11-26", "%Y-%m-%d")
date_generated = [start + datetime.timedelta(days=x) for x in range(0, (end-start).days)]
for date in date_generated:
days_range.append(date.strftime("%Y-%m-%d"))
print("=== 기본으로 설정된 트윗 수집 기간은 {} 에서 {} 까지 입니다 ===".format(days_range[0], days_range[-1]))
print("=== 총 {}일 간의 데이터 수집 ===".format(len(days_range)))
# 수집 기간 맞추기
start_date = days_range[0]
end_date = (datetime.datetime.strptime(days_range[-1], "%Y-%m-%d")
+ datetime.timedelta(days=1)).strftime("%Y-%m-%d") # setUntil이 끝을 포함하지 않으므로, day + 1
my_key = input("검색할 키워드를 입력해주세요: ")
while(True):
temp1 = "현재 검색어는 " + my_key + "입니다. "
print(temp1)
print("기간은 기본적으로 최근 1일입니다.")
print("빠른 검색을 지원하기 위해 최대 50건까지만 표시됩니다.")
print("1. 닉네임을 통한 검색")
print("2. 키워드를 통한 검색")
print("3. 시간을 통한 검색")
print("4. 종료")
userNum = int(input("무엇을 하시겠습니까?: "))
if userNum == 1:
nick = input("검색할 닉네임을 입력해주세요: ")
print("1. 최근 10개만 보기")
print("2. 해당 닉네임의 트윗 50건 보기")
print("3. 현재 검색어를 적용시켜 보기")
tweetNum = int(input("무엇을 하시겠습니까?: "))
if(tweetNum == 1):
tweetCriteria = got.manager.TweetCriteria().setUsername(nick)\
.setSince(start_date)\
.setUntil(end_date)\
.setMaxTweets(10)
get_tweets(tweetCriteria)
elif(tweetNum == 2):
tweetCriteria = got.manager.TweetCriteria().setUsername(nick)\
.setSince(start_date)\
.setUntil(end_date)\
.setMaxTweets(50)
get_tweets(tweetCriteria)
elif(tweetNum == 3):
tweetCriteria = got.manager.TweetCriteria().setUsername(nick)\
.setQuerySearch(my_key)\
.setSince(start_date)\
.setUntil(end_date)\
.setMaxTweets(50)
get_tweets(tweetCriteria)
else:
print("잘못된 보기를 선택하셨습니다.")
elif userNum == 2:
my_key = input("검색할 키워드를 입력해주세요: ")
tweetCriteria = got.manager.TweetCriteria().setQuerySearch(my_key)\
.setSince(start_date)\
.setUntil(end_date)\
.setMaxTweets(50)
get_tweets(tweetCriteria)
elif userNum == 3:
user_start = int(input("시작일을 입력해주세요(yyyymmdd형태): "))
if(user_start < 20170000 or user_start > 20191200):
print("최근 3년 이내만 검색가능합니다.")
continue
user_end = int(input("종료일을 입력해주세요(yyyymmdd형태): "))
if(user_end > 20191200):
print("미래로 갈 수는 없습니다.")
continue
elif(user_end < user_start):
print("시작일보다 작을 수 없습니다.")
continue
if(user_end - 8 > user_start):
print("최대 1주일까지 검색이 가능합니다.")
continue
else:
start_year = user_start // 10000
start_month = user_start // 100 - start_year * 100
start_day = user_start - start_year * 10000 - start_month * 100
end_year = user_end // 10000
end_month = user_end // 100 - end_year * 100
end_day = user_end - end_year * 10000 - end_month * 100
d1 = str(start_year) + "-" + str(start_month) + "-" + str(start_day)
# d2는 보여주기용, d3는 실제 코드에 넣기용(코드에 넣을때는 +1을 해줘야 한다.)
d2 = str(end_year) + "-" + str(end_month) + "-" + str(end_day)
d3 = str(end_year) + "-" + str(end_month) + "-" + str(end_day + 1)
print("1. 현재 검색어를 적용시켜 검색")
print("2. 다른 검색어를 적용시켜 검색")
myNum = int(input("무엇을 선택하시겠습니까?: "))
if(myNum == 1):
print("1. 닉네임을 적용시켜 검색")
print("2. 닉네임 상관없이 전부 검색")
myNum1 = int(input("무엇을 선택하시겠습니까?: "))
if(myNum1 == 1):
nick2 = input("검색할 닉네임을 입력해주세요: ")
tweetCriteria = got.manager.TweetCriteria().setUsername(nick)\
.setQuerySearch(my_key)\
.setSince(d1)\
.setUntil(d3)\
.setMaxTweets(50)
elif(myNum1 == 2):
tweetCriteria = got.manager.TweetCriteria().setQuerySearch(my_key)\
.setSince(d1)\
.setUntil(d3)\
.setMaxTweets(50)
else:
print("잘못된 입력입니다.")
continue
elif(myNum == 2):
my_key = input("검색할 키워드를 입력해주세요: ")
print("1. 닉네임을 적용시켜 검색")
print("2. 닉네임 상관없이 전부 검색")
myNum2 = int(input("무엇을 선택하시겠습니까?: "))
if(myNum2 == 1):
nick2 = input("검색할 닉네임을 입력해주세요: ")
tweetCriteria = got.manager.TweetCriteria().setUsername(nick)\
.setQuerySearch(my_key)\
.setSince(d1)\
.setUntil(d3)\
.setMaxTweets(50)
elif(myNum2 == 2):
tweetCriteria = got.manager.TweetCriteria().setQuerySearch(my_key)\
.setSince(d1)\
.setUntil(d3)\
.setMaxTweets(50)
else:
print("잘못된 입력입니다.")
continue
else:
print("잘못된 입력입니다.")
continue
print("=== 현재 설정된 트윗 수집 기간은 {} 에서 {} 까지 입니다 ===".format(d1, d2))
print("=== 총 {}일 간의 데이터 수집 ===".format(user_end - user_start))
get_tweets(tweetCriteria)
elif userNum == 4:
break
else:
print("잘못된 입력입니다.")
continue