{
 "cells": [
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "## 트위터에서 트윗 가져오기"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "#### 필요한 패키지 가져오기:"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 1,
   "metadata": {},
   "outputs": [],
   "source": [
    "#!pip install tweepy\n",
    "import tweepy\n",
    "import re\n",
    "import os\n",
    "from tweepy import OAuthHandler"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "#### 필요한 키 값들을 설정:"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 2,
   "metadata": {},
   "outputs": [],
   "source": [
    "tw_consumer_key = \"~~~\"                # 각자 본인의 것으로 대체한다.\n",
    "tw_consumer_secret = \"~~~\"             # 각자 본인의 것으로 대체한다.\n",
    "tw_access_token = \"~~~\"                # 각자 본인의 것으로 대체한다.\n",
    "tw_access_secret = \"~~~\"               # 각자 본인의 것으로 대체한다."
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "#### 토큰 초기화:"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 3,
   "metadata": {},
   "outputs": [],
   "source": [
    "auth = OAuthHandler(tw_consumer_key, tw_consumer_secret)\n",
    "auth.set_access_token(tw_access_token, tw_access_secret)"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "#### 트윗 가져오기:"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 4,
   "metadata": {},
   "outputs": [],
   "source": [
    "my_keyword = \"Trump\"                           # 서치 키워드.\n",
    "my_location = \"22.1568,89.4332,500km\"          # 위치.위도경도\n",
    "n_tweets = 100                                 # 트윗개수."
   ]
  },
  {
   "cell_type": "code",
   "execution_count": null,
   "metadata": {},
   "outputs": [],
   "source": [
    "my_tweets = []\n",
    "api = tweepy.API(auth, timeout = 10)           # 10초 후 timeout 적용.10초후 반응없음 끝냄\n",
    "for status in tweepy.Cursor(api.search, q = my_keyword + \" -filter:retweets\", lang=\"en\", result_type=\"recent\", geocode=my_location).items(n_tweets):\n",
    "    my_tweets.append(status.text)\n",
    "    \n",
    "#트윗100개모음"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": null,
   "metadata": {},
   "outputs": [],
   "source": [
    "my_tweets  #지저분함"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "#### 트윗 클리닝 및 전처리 (option): 정규표현식"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": null,
   "metadata": {},
   "outputs": [],
   "source": [
    "my_tweets_new = []\n",
    "for tweet in my_tweets:\n",
    "    tweet = tweet.lower()\n",
    "    tweet = re.sub(r\"^https://t.co/[a-zA-Z0-9]*\\s\", \" \", tweet)   #이 패턴이 트윗에 있으면 스페이스로 변환~(특수문자로 조합한패턴있으면 스페이스 변환해 날림-불필요한거날림, )=불필요한거 지우겠다\n",
    "    tweet = re.sub(r\"\\s+https://t.co/[a-zA-Z0-9]*\\s\", \" \", tweet)\n",
    "    tweet = re.sub(r\"\\s+https://t.co/[a-zA-Z0-9]*$\", \" \", tweet)\n",
    "    tweet = re.sub(r\"that's\",\"that is\",tweet)\n",
    "    tweet = re.sub(r\"there's\",\"there is\",tweet)\n",
    "    tweet = re.sub(r\"what's\",\"what is\",tweet)\n",
    "    tweet = re.sub(r\"where's\",\"where is\",tweet)\n",
    "    tweet = re.sub(r\"it's\",\"it is\",tweet)\n",
    "    tweet = re.sub(r\"who's\",\"who is\",tweet)\n",
    "    tweet = re.sub(r\"i'm\",\"i am\",tweet)\n",
    "    tweet = re.sub(r\"she's\",\"she is\",tweet)\n",
    "    tweet = re.sub(r\"he's\",\"he is\",tweet)\n",
    "    tweet = re.sub(r\"they're\",\"they are\",tweet)\n",
    "    tweet = re.sub(r\"who're\",\"who are\",tweet)\n",
    "    tweet = re.sub(r\"ain't\",\"am not\",tweet)\n",
    "    tweet = re.sub(r\"wouldn't\",\"would not\",tweet)\n",
    "    tweet = re.sub(r\"shouldn't\",\"should not\",tweet)\n",
    "    tweet = re.sub(r\"can't\",\"can not\",tweet)\n",
    "    tweet = re.sub(r\"couldn't\",\"could not\",tweet)\n",
    "    tweet = re.sub(r\"won't\",\"will not\",tweet)\n",
    "    tweet = re.sub(r\"\\W\",\" \",tweet)\n",
    "    tweet = re.sub(r\"\\d\",\" \",tweet)\n",
    "    tweet = re.sub(r\"\\s+[a-z]\\s+\",\" \",tweet)\n",
    "    tweet = re.sub(r\"\\s+[a-z]$\",\" \",tweet)\n",
    "    tweet = re.sub(r\"^[a-z]\\s+\",\" \",tweet)\n",
    "    tweet = re.sub(r\"\\s+\",\" \",tweet)\n",
    "    my_tweets_new.append(tweet)"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": null,
   "metadata": {},
   "outputs": [],
   "source": [
    "i = 0\n",
    "for tw in my_tweets_new:\n",
    "    i += 1\n",
    "    print(str(i) + \" : \" + tw)  #전처리 후 결과 가 깔끔함"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": null,
   "metadata": {},
   "outputs": [],
   "source": []
  }
 ],
 "metadata": {
  "kernelspec": {
   "display_name": "Python 3",
   "language": "python",
   "name": "python3"
  },
  "language_info": {
   "codemirror_mode": {
    "name": "ipython",
    "version": 3
   },
   "file_extension": ".py",
   "mimetype": "text/x-python",
   "name": "python",
   "nbconvert_exporter": "python",
   "pygments_lexer": "ipython3",
   "version": "3.7.4"
  }
 },
 "nbformat": 4,
 "nbformat_minor": 2
}