diff --git a/README.md b/README.md index 602a3e3..e98a475 100644 --- a/README.md +++ b/README.md @@ -1 +1,3 @@ -# truth_seeker \ No newline at end of file +# truth_seeker + +https://newsapi.org/ \ No newline at end of file diff --git a/app/truth_seeker.py b/app/truth_seeker.py index d050d73..17c4327 100644 --- a/app/truth_seeker.py +++ b/app/truth_seeker.py @@ -1,12 +1,16 @@ import logging +from datetime import date, timedelta from newsapi import NewsApiClient +import databaseconnection import dynaconfig -# https://newsapi.org/ +API_KEY = dynaconfig.settings["API_KEY"] +QUERY = dynaconfig.settings["QUERY"] -API_KEY = dynaconfig.config["API_KEY"] +# Use to get news from yesterday to current time +YESTERDAY = date.today() - timedelta(days=1) newsapi = NewsApiClient(api_key=API_KEY) @@ -22,10 +26,12 @@ ) -def fetch_info(query: str) -> dict: +def fetch_info() -> dict: try: - result = newsapi.get_everything(q=query, sort_by="popularity") - logging.info(f"Searching for {query}") + result = newsapi.get_everything( + q=QUERY, sort_by="popularity", from_param=YESTERDAY + ) + logging.info(f"Searching for {QUERY}") return result except ConnectionError as con_err: logging.error(con_err) @@ -38,17 +44,42 @@ def fetch_info(query: str) -> dict: def list_info(fetch_info: dict): if fetch_info: for article in fetch_info.get("articles"): - for article_point, article_data in article.items(): - if article_point == "urlToImage": + for article_key, article_data in article.items(): + if article_key == "urlToImage": continue - elif article_point == "source": - print(article_point.capitalize(), article_data.get("name")) + elif article_key == "source": + print(article_key.capitalize(), article_data.get("name")) else: - print(article_point.capitalize(), article_data) + print(article_key.capitalize(), article_data) else: logging.warning("Empty response from API") raise IndexError +def load_to_db(): + for article in fetch_info().get("articles"): + article_list = [] + for article_key, article_data in article.items(): + if article_key == "source": + pass + elif article_key == "content": + pass + elif article_key == "urlToImage": + pass + else: + article_list.append(article_data) + article_list.append("True") + databaseconnection.insert_into( + databaseconnection.create_connection(databaseconnection.DB_FILE), + tuple(article_list), + ) + + if __name__ == "__main__": - list_info(fetch_info("test")) + if dynaconfig.settings["LOAD_TO_DB"]: + try: + load_to_db() + except BaseException as base_err: + logging.error(base_err) + else: + list_info(fetch_info()) diff --git a/databaseconnection.py b/databaseconnection.py new file mode 100644 index 0000000..242fc60 --- /dev/null +++ b/databaseconnection.py @@ -0,0 +1,73 @@ +import logging +import sqlite3 +from pathlib import Path +from sqlite3 import Error + +DB_FILE = Path("test.db") + +CREATE_TABLE_SQL = """ +CREATE TABLE IF NOT EXISTS news ( +news_id INTEGER PRIMARY KEY, +author TEXT, +title TEXT, +description TEXT, +url TEXT, +pub_date TEXT, +used_bool TEXT +); +""" + +INSERT_INTO_SQL = """ +INSERT INTO news +(author,title,description,url,pub_date,used_bool) +VALUES(?,?,?,?,?,?) +""" + + +# Logging +logging.basicConfig( + format="%(asctime)s - %(levelname)s - %(message)s", level=logging.INFO +) +logging.basicConfig( + format="%(asctime)s - %(levelname)s - %(message)s", level=logging.ERROR +) + + +def create_connection(db_file: Path): + conn = None + try: + conn = sqlite3.connect(db_file) + logging.info("Database created successfully !") + return conn + except Error as create_conn_err: + logging.error(create_conn_err) + return conn + + +def create_table(conn, create_table_query): + try: + c = conn.cursor() + c.execute(create_table_query) + logging.info("Table created successfully !") + except Error as create_table_err: + logging.error(create_table_err) + + +def insert_into(conn, data: tuple): + try: + cur = conn.cursor() + cur.execute(INSERT_INTO_SQL, data) + conn.commit() + + logging.info("Data inserted successfully !") + return cur.lastrowid + except Error as insert_err: + logging.error(insert_err) + + +if __name__ == "__main__": + conn = create_connection(DB_FILE) + if conn is not None: + create_table(conn, CREATE_TABLE_SQL) + else: + logging.error("Error! Cannot create the database connection.") diff --git a/dynaconfig.py b/dynaconfig.py index 9977d2a..75a0bf9 100644 --- a/dynaconfig.py +++ b/dynaconfig.py @@ -1,5 +1,5 @@ from dynaconf import Dynaconf -config = Dynaconf( +settings = Dynaconf( settings_files=[".secrets.toml"], )