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
5 +import time
6 +from random import uniform
7 +from tqdm import tqdm_notebook
8 +
9 +def get_tweets(criteria):
10 + tweet = got.manager.TweetManager.getTweets(criteria)
11 + tweet_list = []
12 +
13 + for index in tqdm_notebook(tweet):
14 +
15 + # 메타데이터 목록
16 + username = index.username
17 + link = index.permalink
18 + content = index.text
19 + tweet_date = index.date.strftime("%Y-%m-%d")
20 + retweets = index.retweets
21 + favorites = index.favorites
22 +
23 + # 결과 합치기
24 + info_list = {'username' : username, 'text': content, 'time': tweet_date, 'link': link}
25 + tweet_list.append(info_list)
26 + print(tweet_list)
27 + # 휴식
28 + time.sleep(uniform(1,2))
11 29
12 days_range = [] 30 days_range = []
13 31
14 -start = datetime.datetime.strptime("2019-11-14", "%Y-%m-%d") 32 +start = datetime.datetime.strptime("2019-11-17", "%Y-%m-%d")
15 -end = datetime.datetime.strptime("2019-11-15", "%Y-%m-%d") 33 +end = datetime.datetime.strptime("2019-11-18", "%Y-%m-%d")
16 date_generated = [start + datetime.timedelta(days=x) for x in range(0, (end-start).days)] 34 date_generated = [start + datetime.timedelta(days=x) for x in range(0, (end-start).days)]
17 35
18 for date in date_generated: 36 for date in date_generated:
19 days_range.append(date.strftime("%Y-%m-%d")) 37 days_range.append(date.strftime("%Y-%m-%d"))
20 -print("=== 설정된 트윗 수집 기간은 {} 에서 {} 까지 입니다 ===".format(days_range[0], days_range[-1])) 38 +print("=== 기본으로 설정된 트윗 수집 기간은 {} 에서 {} 까지 입니다 ===".format(days_range[0], days_range[-1]))
21 print("=== 총 {}일 간의 데이터 수집 ===".format(len(days_range))) 39 print("=== 총 {}일 간의 데이터 수집 ===".format(len(days_range)))
22 40
23 -import time
24 -
25 # 수집 기간 맞추기 41 # 수집 기간 맞추기
26 start_date = days_range[0] 42 start_date = days_range[0]
27 end_date = (datetime.datetime.strptime(days_range[-1], "%Y-%m-%d") 43 end_date = (datetime.datetime.strptime(days_range[-1], "%Y-%m-%d")
28 + datetime.timedelta(days=1)).strftime("%Y-%m-%d") # setUntil이 끝을 포함하지 않으므로, day + 1 44 + datetime.timedelta(days=1)).strftime("%Y-%m-%d") # setUntil이 끝을 포함하지 않으므로, day + 1
29 45
30 -# 트윗 수집 기준 정의 46 +my_key = input("검색할 키워드를 입력해주세요: ")
31 -tweetCriteria = got.manager.TweetCriteria().setQuerySearch('한글') .setSince(start_date) .setUntil(end_date) .setMaxTweets(-1) 47 +
32 - 48 +while(True):
33 -# 수집 with GetOldTweet3 49 + temp1 = "현재 검색어는 " + my_key + "입니다. "
34 -print("Collecting data start.. from {} to {}".format(days_range[0], days_range[-1])) 50 + print(temp1)
35 -start_time = time.time() 51 + print("기간은 기본적으로 최근 1일입니다.")
36 - 52 + print("1. 닉네임을 통한 검색")
37 -tweet = got.manager.TweetManager.getTweets(tweetCriteria) 53 + print("2. 키워드를 통한 검색")
38 - 54 + print("3. 시간을 통한 검색")
39 -print("Collecting data end.. {0:0.2f} Minutes".format((time.time() - start_time)/60)) 55 + print("4. 종료")
40 -print("=== Total num of tweets is {} ===".format(len(tweet))) 56 + userNum = int(input("무엇을 하시겠습니까?: "))
41 -from random import uniform
42 -from tqdm import tqdm_notebook
43 -
44 -# initialize
45 -tweet_list = []
46 -
47 -for index in tqdm_notebook(tweet):
48 57
49 - # 메타데이터 목록 58 + if userNum == 1:
50 - username = index.username 59 + nick = input("검색할 닉네임을 입력해주세요: ")
51 - link = index.permalink 60 + tweetCriteria = got.manager.TweetCriteria().setUsername(nick)\
52 - content = index.text 61 + .setQuerySearch(my_key)\
53 - tweet_date = index.date.strftime("%Y-%m-%d") 62 + .setSince(start_date)\
54 - retweets = index.retweets 63 + .setUntil(end_date)\
55 - favorites = index.favorites 64 + .setMaxTweets(-1)
56 - 65 + get_tweets(tweetCriteria)
57 - # 결과 합치기 66 + elif userNum == 2:
58 - info_list = {'username' : username, 'text': content, 'time': tweet_date, 'link': link} 67 + my_key = input("검색할 키워드를 입력해주세요: ")
59 - tweet_list.append(info_list) 68 + tweetCriteria = got.manager.TweetCriteria().setQuerySearch(my_key)\
60 - print(tweet_list) 69 + .setSince(start_date)\
61 - # 휴식 70 + .setUntil(end_date)\
62 - time.sleep(uniform(1,2)) 71 + .setMaxTweets(-1)
63 - 72 + get_tweets(tweetCriteria)
64 - 73 + elif userNum == 3:
65 -# In[ ]: 74 + user_start = int(input("시작일을 입력해주세요(yyyymmdd형태): "))
66 - 75 + if(user_start < 20170000 or user_start > 20191200):
67 - 76 + print("최근 3년 이내만 검색가능합니다.")
68 - 77 + continue
69 - 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
......