Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
4 changes: 3 additions & 1 deletion README.md
Original file line number Diff line number Diff line change
@@ -1 +1,3 @@
# truth_seeker
# truth_seeker

https://newsapi.org/
53 changes: 42 additions & 11 deletions app/truth_seeker.py
Original file line number Diff line number Diff line change
@@ -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)

Expand All @@ -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)
Expand All @@ -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())
73 changes: 73 additions & 0 deletions databaseconnection.py
Original file line number Diff line number Diff line change
@@ -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.")
2 changes: 1 addition & 1 deletion dynaconfig.py
Original file line number Diff line number Diff line change
@@ -1,5 +1,5 @@
from dynaconf import Dynaconf

config = Dynaconf(
settings = Dynaconf(
settings_files=[".secrets.toml"],
)