Showing
2 changed files
with
90 additions
and
50 deletions
twitter/modify.md
0 → 100644
| 1 | +߸ |
| 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 | ... | ... |
-
Please register or login to post a comment