HyoJoon

코드 다시 수정

1 -#!/usr/bin/env python
2 -# coding: utf-8
3 -
4 -# In[ ]:
5 -
6 -
7 import GetOldTweets3 as got 1 import GetOldTweets3 as got
8 from bs4 import BeautifulSoup 2 from bs4 import BeautifulSoup
9 3
10 import datetime 4 import datetime
11 -
12 -days_range = []
13 -
14 -start = datetime.datetime.strptime("2019-11-14", "%Y-%m-%d")
15 -end = datetime.datetime.strptime("2019-11-15", "%Y-%m-%d")
16 -date_generated = [start + datetime.timedelta(days=x) for x in range(0, (end-start).days)]
17 -
18 -for date in date_generated:
19 - days_range.append(date.strftime("%Y-%m-%d"))
20 -print("=== 설정된 트윗 수집 기간은 {} 에서 {} 까지 입니다 ===".format(days_range[0], days_range[-1]))
21 -print("=== 총 {}일 간의 데이터 수집 ===".format(len(days_range)))
22 -
23 import time 5 import time
24 -
25 -# 수집 기간 맞추기
26 -start_date = days_range[0]
27 -end_date = (datetime.datetime.strptime(days_range[-1], "%Y-%m-%d")
28 - + datetime.timedelta(days=1)).strftime("%Y-%m-%d") # setUntil이 끝을 포함하지 않으므로, day + 1
29 -
30 -# 트윗 수집 기준 정의
31 -tweetCriteria = got.manager.TweetCriteria().setQuerySearch('한글') .setSince(start_date) .setUntil(end_date) .setMaxTweets(-1)
32 -
33 -# 수집 with GetOldTweet3
34 -print("Collecting data start.. from {} to {}".format(days_range[0], days_range[-1]))
35 -start_time = time.time()
36 -
37 -tweet = got.manager.TweetManager.getTweets(tweetCriteria)
38 -
39 -print("Collecting data end.. {0:0.2f} Minutes".format((time.time() - start_time)/60))
40 -print("=== Total num of tweets is {} ===".format(len(tweet)))
41 from random import uniform 6 from random import uniform
42 from tqdm import tqdm_notebook 7 from tqdm import tqdm_notebook
43 8
44 -# initialize 9 +def get_tweets(criteria):
45 -tweet_list = [] 10 + tweet = got.manager.TweetManager.getTweets(criteria)
11 + tweet_list = []
46 12
47 -for index in tqdm_notebook(tweet): 13 + for index in tqdm_notebook(tweet):
48 14
49 # 메타데이터 목록 15 # 메타데이터 목록
50 username = index.username 16 username = index.username
...@@ -61,9 +27,82 @@ for index in tqdm_notebook(tweet): ...@@ -61,9 +27,82 @@ for index in tqdm_notebook(tweet):
61 # 휴식 27 # 휴식
62 time.sleep(uniform(1,2)) 28 time.sleep(uniform(1,2))
63 29
30 +days_range = []
64 31
65 -# In[ ]: 32 +start = datetime.datetime.strptime("2019-11-17", "%Y-%m-%d")
66 - 33 +end = datetime.datetime.strptime("2019-11-18", "%Y-%m-%d")
34 +date_generated = [start + datetime.timedelta(days=x) for x in range(0, (end-start).days)]
67 35
36 +for date in date_generated:
37 + days_range.append(date.strftime("%Y-%m-%d"))
38 +print("=== 기본으로 설정된 트윗 수집 기간은 {} 에서 {} 까지 입니다 ===".format(days_range[0], days_range[-1]))
39 +print("=== 총 {}일 간의 데이터 수집 ===".format(len(days_range)))
68 40
41 +# 수집 기간 맞추기
42 +start_date = days_range[0]
43 +end_date = (datetime.datetime.strptime(days_range[-1], "%Y-%m-%d")
44 + + datetime.timedelta(days=1)).strftime("%Y-%m-%d") # setUntil이 끝을 포함하지 않으므로, day + 1
69 45
46 +my_key = input("검색할 키워드를 입력해주세요: ")
47 +
48 +while(True):
49 + temp1 = "현재 검색어는 " + my_key + "입니다. "
50 + print(temp1)
51 + print("기간은 기본적으로 최근 1일입니다.")
52 + print("1. 닉네임을 통한 검색")
53 + print("2. 키워드를 통한 검색")
54 + print("3. 시간을 통한 검색")
55 + print("4. 종료")
56 + userNum = int(input("무엇을 하시겠습니까?: "))
57 +
58 + if userNum == 1:
59 + nick = input("검색할 닉네임을 입력해주세요: ")
60 + tweetCriteria = got.manager.TweetCriteria().setUsername(nick)\
61 + .setQuerySearch(my_key)\
62 + .setSince(start_date)\
63 + .setUntil(end_date)\
64 + .setMaxTweets(-1)
65 + get_tweets(tweetCriteria)
66 + elif userNum == 2:
67 + my_key = input("검색할 키워드를 입력해주세요: ")
68 + tweetCriteria = got.manager.TweetCriteria().setQuerySearch(my_key)\
69 + .setSince(start_date)\
70 + .setUntil(end_date)\
71 + .setMaxTweets(-1)
72 + get_tweets(tweetCriteria)
73 + elif userNum == 3:
74 + user_start = int(input("시작일을 입력해주세요(yyyymmdd형태): "))
75 + if(user_start < 20170000 or user_start > 20191200):
76 + print("최근 3년 이내만 검색가능합니다.")
77 + continue
78 + user_end = int(input("종료일을 입력해주세요(yyyymmdd형태): "))
79 + if(user_end > 20191200):
80 + print("미래로 갈 수는 없습니다.")
81 + continue
82 + elif(user_end < user_start):
83 + print("시작일보다 작을 수 없습니다.")
84 + continue
85 + if(user_end - 8 > user_start):
86 + print("최대 1주일까지 검색이 가능합니다.")
87 + continue
88 + else:
89 + start_year = user_start // 10000
90 + start_month = user_start // 100 - start_year * 100
91 + start_day = user_start - start_year * 10000 - start_month * 100
92 + end_year = user_end // 10000
93 + end_month = user_end // 100 - end_year * 100
94 + end_day = user_end - end_year * 10000 - end_month * 100
95 + d1 = str(start_year) + "-" + str(start_month) + "-" + str(start_day)
96 + d2 = str(end_year) + "-" + str(end_month) + "-" + str(end_day)
97 + print("=== 현재 설정된 트윗 수집 기간은 {} 에서 {} 까지 입니다 ===".format(d1, d2))
98 + print("=== 총 {}일 간의 데이터 수집 ===".format(user_end - user_start))
99 + tweetCriteria = got.manager.TweetCriteria().setQuerySearch(my_key)\
100 + .setSince(d1)\
101 + .setUntil(d2)\
102 + .setMaxTweets(-1)
103 + get_tweets(tweetCriteria)
104 + elif userNum == 4:
105 + break
106 + else:
107 + print("잘못된 입력입니다.")
108 + continue
......