-
Notifications
You must be signed in to change notification settings - Fork 0
Expand file tree
/
Copy pathread_api.py
More file actions
131 lines (98 loc) · 3.41 KB
/
Copy pathread_api.py
File metadata and controls
131 lines (98 loc) · 3.41 KB
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
import requests
import json
import csv
import pandas as pd
import pymysql
from datetime import datetime as dt
def get_api(url):
response = requests.get(url)
read_json = response.json()
return read_json
def save_news_data_to_csv(url):
# get api from 3rd party
read_json = get_api(url)
# save api data to json file
with open('news_test.json', 'w') as file:
json.dump(read_json, file, sort_keys=True, indent=4)
with open("news_test.json") as json_file:
data = json.load(json_file)
articles = data['articles']
titles = list(articles[0].keys())
slice_object = slice(1, len(titles))
titles = titles[slice_object]
titles.insert(0, 'id')
titles.insert(1, 'name')
# one list of values
tab = []
leng = len(data['articles'])
values = []
i = 0
for x in range(leng):
values = list(articles[x].values())
slice_values = slice(1, len(values))
values = values[slice_values]
name = data['articles'][x]['source']['name']
values.insert(0, name)
tab.append(values)
i += 1
tab[x].insert(0, i)
data_file = open('news_test.csv', 'w')
# create the csv writer object
csv_writer = csv.writer(data_file, delimiter=',', lineterminator='\n')
# Counter variable used for writing
# headers to the CSV file
count = 0
index = 0
csv_writer.writerow(titles)
for article in articles:
# Writing data of CSV file
csv_writer.writerow(tab[index])
index += 1
count += 1
# print(count)
data_file.close()
input_file = 'news_test.csv'
output_file = 'news.csv'
cols_to_remove = 5 # Column indexes to be removed (starts at 0)
row_count = 0 # Current amount of rows processed
with open(input_file, "r") as source:
reader = csv.reader(source)
with open(output_file, "w", newline='') as result:
writer = csv.writer(result)
for row in reader:
row_count += 1
del row[5]
writer.writerow(row)
# push to mysql
def to_mysql(file):
# mydb = pymysql.connect(host='localhost', user='root', passwd="1234", db="users")
mydb = pymysql.connect(host='covid-server.cqzdwek0omew.us-east-2.rds.amazonaws.com', user='admin', passwd="Linhphuc9802", db="users")
cursor = mydb.cursor()
csv_data = csv.reader(open(file))
next(csv_data)
for row in csv_data:
cursor.execute(
'INSERT INTO NewsAPI(id, name, content, description, publishedAt, title, url, urlToImage) '
'VALUES (%s, %s, %s, %s, %s , %s, %s, %s)',
row)
mydb.commit()
cursor.close()
def update_mysql(file):
mydb = pymysql.connect(host='covid-server.cqzdwek0omew.us-east-2.rds.amazonaws.com', user='admin', passwd="Linhphuc9802", db="users")
cursor = mydb.cursor()
csv_data = csv.reader(open(file))
next(csv_data)
for row in csv_data:
rows = (row[1], row[2], row[3], row[4], row[5], row[6], row[7], row[0])
cursor.execute(
'UPDATE NewsAPI SET '
"name = %s, content= %s, description = %s, "
"publishedAt = %s, title = %s, url = %s, urlToImage = %s"
"WHERE id = %s", rows)
mydb.commit()
cursor.close()
save_news_data_to_csv(
'http://newsapi.org/v2/top-headlines?country=us&apiKey=25acb99ee9c14efa9cbc84ee5761722b'
)
to_mysql("news.csv")
# update_mysql("news.csv")