diff --git a/README.md b/README.md
index a7375c5..d9371ee 100644
--- a/README.md
+++ b/README.md
@@ -7,11 +7,13 @@
## KATA 소개

### Republic of Korea Army Trend Analysis (KATA)
-### 대한민국 육군 트랜드 분석 서비스
+### 대한민국 육군 트렌드 분석 서비스
국방 및 안보 이슈에 중점을 두고, 사회적 관심사로 부상하는 키워드를 선정한다. 선택된 키워드와 관련된 기사 반응을 분석하고 요약하여, 사용자가 해당 키워드에 대한 감정 변화, 여론 추이 및 예측 등을 종합적으로 파악할 수 있게 지원하는 도구이다.
KATA는 국방분야에서의 빅데이터 활용을 통한 새로운 가치 창출을 목표로 하고 있다. 이를 통해 육군이 보다 효과적으로 정보를 분석하고, 더 빠르고 정확한 결정을 내릴 수 있도록 돕고자 한다.
+[바로가기](https://kata-front.run.goorm.site/)
+
## 주요 기능
**Page Map**

@@ -30,5 +32,5 @@ KATA는 국방분야에서의 빅데이터 활용을 통한 새로운 가치 창
| [허동석](https://github.com/POBSIZ) | [석민석](https://github.com/msjk27) | [남궁현](https://github.com/DWL21)
| :----------------------------------------------------------: | :----------------------------------------------------------: | :----------------------------------------------------------:
|
|
|
-
+
- 2023.10 대한민국 육군 9311부대 소속 장병
diff --git a/dao/__pycache__/keyword_fixture.cpython-37.pyc b/dao/__pycache__/keyword_fixture.cpython-37.pyc
new file mode 100644
index 0000000..9e53dff
Binary files /dev/null and b/dao/__pycache__/keyword_fixture.cpython-37.pyc differ
diff --git a/dao/_keyword.py b/dao/_keyword.py
new file mode 100644
index 0000000..1fbc93b
--- /dev/null
+++ b/dao/_keyword.py
@@ -0,0 +1,13 @@
+from pydantic import BaseModel
+
+class Keyword(BaseModel):
+ id: int = None
+ name: str
+
+
+keyword_names = [
+ "삼성전자", "코로나 백신", "올림픽", "메타버스", "NFT",
+ "AI", "블록체인", "테슬라", "애플", "에이치엘비",
+ "환율", "비트코인", "가상화폐", "클라우드 컴퓨팅",
+ "구글", "유튜브", "방탄소년단", "빅데이터", "5G", "IoT"
+]
diff --git a/dao/article.py b/dao/article.py
new file mode 100644
index 0000000..2f5b3d1
--- /dev/null
+++ b/dao/article.py
@@ -0,0 +1,13 @@
+from pydantic import BaseModel
+
+class Article(BaseModel):
+ id: int = None
+ title: str
+ body: str
+ reporter: str
+ media: str
+ link: str
+ time: str
+
+
+article_fixtures = []
diff --git a/dao/article_dao.py b/dao/article_dao.py
new file mode 100644
index 0000000..b07aedd
--- /dev/null
+++ b/dao/article_dao.py
@@ -0,0 +1,31 @@
+from typing import Optional
+from article import article
+
+articles_db = {}
+
+def save(name: str) -> Optional[Article]:
+ if name not in articles_db.values():
+ article = Article(id=len(articles_db) + 1, name=name)
+ articles_db[article.id] = article
+ return article
+ return None
+
+
+def find(id: int) -> Optional[Article]:
+ if id in articles_db:
+ return articles_db[id]
+ return None
+
+
+def find_all() -> list:
+ return list(articles_db.values())
+
+
+def edit(article: Article):
+ if article.id in articles_db:
+ articles_db[id] = article
+
+
+def delete(article: Article):
+ if article.id in articles_db:
+ articles_db.pop(article.id)
diff --git a/dao/article_keyword.py b/dao/article_keyword.py
new file mode 100644
index 0000000..5b80509
--- /dev/null
+++ b/dao/article_keyword.py
@@ -0,0 +1,12 @@
+from pydantic import BaseModel
+from article import Article
+from _keyword import Keyword
+
+
+class ArticleKeyword(BaseModel):
+ id: int = None
+ article: Article
+ keyword: Keyword
+
+
+article_keyword_fixtures = []
diff --git a/dao/article_keyword_dao.py b/dao/article_keyword_dao.py
new file mode 100644
index 0000000..20795e7
--- /dev/null
+++ b/dao/article_keyword_dao.py
@@ -0,0 +1,31 @@
+from typing import Optional
+from article_keyword import ArticleKeyword
+
+article_keywords_db = {}
+
+def save(name: str) -> Optional[ArticleKeyword]:
+ if name not in article_keywords_db.values():
+ article_keyword = ArticleKeyword(id=len(article_keywords_db) + 1, name=name)
+ article_keywords_db[article_keyword.id] = article_keyword
+ return article_keyword
+ return None
+
+
+def find(id: int) -> Optional[ArticleKeyword]:
+ if id in article_keywords_db:
+ return article_keywords_db[id]
+ return None
+
+
+def find_all() -> list:
+ return list(article_keywords_db.values())
+
+
+def edit(article_keyword: ArticleKeyword):
+ if article_keyword.id in article_keywords_db:
+ article_keywords_db[id] = article_keyword
+
+
+def delete(article_keyword: ArticleKeyword):
+ if article_keyword.id in article_keywords_db:
+ article_keywords_db.pop(article_keyword.id)
diff --git a/dao/community.py b/dao/community.py
new file mode 100644
index 0000000..e77bb09
--- /dev/null
+++ b/dao/community.py
@@ -0,0 +1,11 @@
+from pydantic import BaseModel
+
+class Community(BaseModel):
+ id: int = None
+ source: str
+ body: str
+ link: str
+ time: str
+
+
+community_fixtures = []
diff --git a/dao/community_dao.py b/dao/community_dao.py
new file mode 100644
index 0000000..d932f19
--- /dev/null
+++ b/dao/community_dao.py
@@ -0,0 +1,31 @@
+from typing import Optional
+from _community import community
+
+communitys_db = {}
+
+def save(name: str) -> Optional[Community]:
+ if name not in communitys_db.values():
+ community = Community(id=len(communitys_db) + 1, name=name)
+ communitys_db[community.id] = community
+ return community
+ return None
+
+
+def find(id: int) -> Optional[Community]:
+ if id in communitys_db:
+ return communitys_db[id]
+ return None
+
+
+def find_all() -> list:
+ return list(communitys_db.values())
+
+
+def edit(community: Community):
+ if community.id in communitys_db:
+ communitys_db[id] = community
+
+
+def delete(community: Community):
+ if community.id in communitys_db:
+ communitys_db.pop(community.id)
diff --git a/dao/keyword_dao.py b/dao/keyword_dao.py
new file mode 100644
index 0000000..ace9445
--- /dev/null
+++ b/dao/keyword_dao.py
@@ -0,0 +1,31 @@
+from typing import Optional
+from _keyword import Keyword
+
+keywords_db = {}
+
+def save(name: str) -> Optional[Keyword]:
+ if name not in keywords_db.values():
+ keyword = Keyword(id=len(keywords_db) + 1, name=name)
+ keywords_db[keyword.id] = keyword
+ return keyword
+ return None
+
+
+def find(id: int) -> Optional[Keyword]:
+ if id in keywords_db:
+ return keywords_db[id]
+ return None
+
+
+def find_all() -> list:
+ return list(keywords_db.values())
+
+
+def edit(keyword: Keyword):
+ if keyword.id in keywords_db:
+ keywords_db[id] = keyword
+
+
+def delete(keyword: Keyword):
+ if keyword.id in keywords_db:
+ keywords_db.pop(keyword.id)
diff --git a/dao/trend.py b/dao/trend.py
new file mode 100644
index 0000000..04a6cb2
--- /dev/null
+++ b/dao/trend.py
@@ -0,0 +1,7 @@
+from pydantic import BaseModel
+
+class Trend(BaseModel):
+ id: int = None
+ time: str
+
+trend_fixtures = []
diff --git a/dao/trend_dao.py b/dao/trend_dao.py
new file mode 100644
index 0000000..2888966
--- /dev/null
+++ b/dao/trend_dao.py
@@ -0,0 +1,31 @@
+from typing import Optional
+from _trend import trend
+
+trends_db = {}
+
+def save(name: str) -> Optional[Trend]:
+ if name not in trends_db.values():
+ trend = Trend(id=len(trends_db) + 1, name=name)
+ trends_db[trend.id] = trend
+ return trend
+ return None
+
+
+def find(id: int) -> Optional[Trend]:
+ if id in trends_db:
+ return trends_db[id]
+ return None
+
+
+def find_all() -> list:
+ return list(trends_db.values())
+
+
+def edit(trend: Trend):
+ if trend.id in trends_db:
+ trends_db[id] = trend
+
+
+def delete(trend: Trend):
+ if trend.id in trends_db:
+ trends_db.pop(trend.id)
diff --git a/modules/crawling/tweets_crawling.py b/modules/crawling/tweets_crawling.py
index 8b13789..7120012 100644
--- a/modules/crawling/tweets_crawling.py
+++ b/modules/crawling/tweets_crawling.py
@@ -1 +1,14 @@
+import tweepy
+
+# 트위터 개발자 계정에서 얻은 키들을 아래에 입력하세요.
+def tweets_crawling(consumer_key, consumer_secret, access_token, access_token_secret, keyword):
+ auth = tweepy.OAuthHandler(consumer_key, consumer_secret)
+ auth.set_access_token(access_token, access_token_secret)
+
+ api = tweepy.API(auth)
+
+ # 특정 키워드가 포함된 트윗을 검색합니다.
+ public_tweets = api.search(q=keyword, lang="ko", count=5)
+
+ return public_tweets