Skip to content

Commit 1dea0db

Browse files
Merge pull request #8 from CoolCoderCarl/feature/FUNC_3
Feature/func 3
2 parents f6817aa + 502c7a3 commit 1dea0db

4 files changed

Lines changed: 119 additions & 13 deletions

File tree

README.md

Lines changed: 3 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1 +1,3 @@
1-
# truth_seeker
1+
# truth_seeker
2+
3+
https://newsapi.org/

app/truth_seeker.py

Lines changed: 42 additions & 11 deletions
Original file line numberDiff line numberDiff line change
@@ -1,12 +1,16 @@
11
import logging
2+
from datetime import date, timedelta
23

34
from newsapi import NewsApiClient
45

6+
import databaseconnection
57
import dynaconfig
68

7-
# https://newsapi.org/
9+
API_KEY = dynaconfig.settings["API_KEY"]
10+
QUERY = dynaconfig.settings["QUERY"]
811

9-
API_KEY = dynaconfig.config["API_KEY"]
12+
# Use to get news from yesterday to current time
13+
YESTERDAY = date.today() - timedelta(days=1)
1014

1115
newsapi = NewsApiClient(api_key=API_KEY)
1216

@@ -22,10 +26,12 @@
2226
)
2327

2428

25-
def fetch_info(query: str) -> dict:
29+
def fetch_info() -> dict:
2630
try:
27-
result = newsapi.get_everything(q=query, sort_by="popularity")
28-
logging.info(f"Searching for {query}")
31+
result = newsapi.get_everything(
32+
q=QUERY, sort_by="popularity", from_param=YESTERDAY
33+
)
34+
logging.info(f"Searching for {QUERY}")
2935
return result
3036
except ConnectionError as con_err:
3137
logging.error(con_err)
@@ -38,17 +44,42 @@ def fetch_info(query: str) -> dict:
3844
def list_info(fetch_info: dict):
3945
if fetch_info:
4046
for article in fetch_info.get("articles"):
41-
for article_point, article_data in article.items():
42-
if article_point == "urlToImage":
47+
for article_key, article_data in article.items():
48+
if article_key == "urlToImage":
4349
continue
44-
elif article_point == "source":
45-
print(article_point.capitalize(), article_data.get("name"))
50+
elif article_key == "source":
51+
print(article_key.capitalize(), article_data.get("name"))
4652
else:
47-
print(article_point.capitalize(), article_data)
53+
print(article_key.capitalize(), article_data)
4854
else:
4955
logging.warning("Empty response from API")
5056
raise IndexError
5157

5258

59+
def load_to_db():
60+
for article in fetch_info().get("articles"):
61+
article_list = []
62+
for article_key, article_data in article.items():
63+
if article_key == "source":
64+
pass
65+
elif article_key == "content":
66+
pass
67+
elif article_key == "urlToImage":
68+
pass
69+
else:
70+
article_list.append(article_data)
71+
article_list.append("True")
72+
databaseconnection.insert_into(
73+
databaseconnection.create_connection(databaseconnection.DB_FILE),
74+
tuple(article_list),
75+
)
76+
77+
5378
if __name__ == "__main__":
54-
list_info(fetch_info("test"))
79+
if dynaconfig.settings["LOAD_TO_DB"]:
80+
try:
81+
load_to_db()
82+
except BaseException as base_err:
83+
logging.error(base_err)
84+
else:
85+
list_info(fetch_info())

databaseconnection.py

Lines changed: 73 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,73 @@
1+
import logging
2+
import sqlite3
3+
from pathlib import Path
4+
from sqlite3 import Error
5+
6+
DB_FILE = Path("test.db")
7+
8+
CREATE_TABLE_SQL = """
9+
CREATE TABLE IF NOT EXISTS news (
10+
news_id INTEGER PRIMARY KEY,
11+
author TEXT,
12+
title TEXT,
13+
description TEXT,
14+
url TEXT,
15+
pub_date TEXT,
16+
used_bool TEXT
17+
);
18+
"""
19+
20+
INSERT_INTO_SQL = """
21+
INSERT INTO news
22+
(author,title,description,url,pub_date,used_bool)
23+
VALUES(?,?,?,?,?,?)
24+
"""
25+
26+
27+
# Logging
28+
logging.basicConfig(
29+
format="%(asctime)s - %(levelname)s - %(message)s", level=logging.INFO
30+
)
31+
logging.basicConfig(
32+
format="%(asctime)s - %(levelname)s - %(message)s", level=logging.ERROR
33+
)
34+
35+
36+
def create_connection(db_file: Path):
37+
conn = None
38+
try:
39+
conn = sqlite3.connect(db_file)
40+
logging.info("Database created successfully !")
41+
return conn
42+
except Error as create_conn_err:
43+
logging.error(create_conn_err)
44+
return conn
45+
46+
47+
def create_table(conn, create_table_query):
48+
try:
49+
c = conn.cursor()
50+
c.execute(create_table_query)
51+
logging.info("Table created successfully !")
52+
except Error as create_table_err:
53+
logging.error(create_table_err)
54+
55+
56+
def insert_into(conn, data: tuple):
57+
try:
58+
cur = conn.cursor()
59+
cur.execute(INSERT_INTO_SQL, data)
60+
conn.commit()
61+
62+
logging.info("Data inserted successfully !")
63+
return cur.lastrowid
64+
except Error as insert_err:
65+
logging.error(insert_err)
66+
67+
68+
if __name__ == "__main__":
69+
conn = create_connection(DB_FILE)
70+
if conn is not None:
71+
create_table(conn, CREATE_TABLE_SQL)
72+
else:
73+
logging.error("Error! Cannot create the database connection.")

dynaconfig.py

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,5 +1,5 @@
11
from dynaconf import Dynaconf
22

3-
config = Dynaconf(
3+
settings = Dynaconf(
44
settings_files=[".secrets.toml"],
55
)

0 commit comments

Comments
 (0)