Skip to content

Commit 127a6f8

Browse files
committed
Add func to load to db as sqlite
1 parent 0dcd527 commit 127a6f8

2 files changed

Lines changed: 103 additions & 9 deletions

File tree

app/truth_seeker.py

Lines changed: 30 additions & 9 deletions
Original file line numberDiff line numberDiff line change
@@ -3,14 +3,16 @@
33

44
from newsapi import NewsApiClient
55

6+
import databaseconnection
67
import dynaconfig
78

89
API_KEY = dynaconfig.settings["API_KEY"]
10+
QUERY = dynaconfig.settings["QUERY"]
911

10-
newsapi = NewsApiClient(api_key=API_KEY)
11-
12+
# Use to get news from yesterday to current time
1213
YESTERDAY = date.today() - timedelta(days=1)
13-
QUERY = dynaconfig.settings["QUERY"]
14+
15+
newsapi = NewsApiClient(api_key=API_KEY)
1416

1517
# Logging
1618
logging.basicConfig(
@@ -42,20 +44,39 @@ def fetch_info() -> dict:
4244
def list_info(fetch_info: dict):
4345
if fetch_info:
4446
for article in fetch_info.get("articles"):
45-
for article_point, article_data in article.items():
46-
if article_point == "urlToImage":
47+
for article_key, article_data in article.items():
48+
if article_key == "urlToImage":
4749
continue
48-
elif article_point == "source":
49-
print(article_point.capitalize(), article_data.get("name"))
50+
elif article_key == "source":
51+
print(article_key.capitalize(), article_data.get("name"))
5052
else:
51-
print(article_point.capitalize(), article_data)
53+
print(article_key.capitalize(), article_data)
5254
else:
5355
logging.warning("Empty response from API")
5456
raise IndexError
5557

5658

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+
5778
if __name__ == "__main__":
5879
if dynaconfig.settings["LOAD_TO_DB"]:
59-
pass
80+
load_to_db()
6081
else:
6182
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.")

0 commit comments

Comments
 (0)