Craig Oates
4 years ago
4 changed files with 133 additions and 0 deletions
@ -0,0 +1,29 @@ |
|||||||
|
#!/usr/bin/python3 |
||||||
|
|
||||||
|
import requests |
||||||
|
from datetime import datetime |
||||||
|
from services import art_services, data_services |
||||||
|
|
||||||
|
def main(): |
||||||
|
raw_art_data = data_services.get_json("https://api.craigoates.net/api/1.0/Artwork") |
||||||
|
cd_totals = art_services.get_creation_date_totals(raw_art_data) |
||||||
|
print(cd_totals) |
||||||
|
cat_totals = art_services.get_db_column_totals(raw_art_data, "category") |
||||||
|
print(cat_totals) |
||||||
|
med_totals = art_services.get_db_column_totals(raw_art_data, "medium") |
||||||
|
print(med_totals) |
||||||
|
width_totals = art_services.get_dimension_totals(raw_art_data, "dimensions", "width") |
||||||
|
print(width_totals) |
||||||
|
height_totals = art_services.get_dimension_totals(raw_art_data, "dimensions", "height") |
||||||
|
print(height_totals) |
||||||
|
depth_totals = art_services.get_dimension_totals(raw_art_data, "dimensions", "depth") |
||||||
|
print(depth_totals) |
||||||
|
|
||||||
|
# Use for console priting for the moment. |
||||||
|
date = datetime.now().strftime('%d/%m/%Y') |
||||||
|
time = datetime.now().strftime("%H:%M") |
||||||
|
|
||||||
|
return 0 |
||||||
|
|
||||||
|
if __name__ == "__main__": |
||||||
|
main() |
@ -0,0 +1,91 @@ |
|||||||
|
from datetime import datetime |
||||||
|
|
||||||
|
''' |
||||||
|
Note: Hard-Coding "Months" and "Days" Sets |
||||||
|
====================================================================== |
||||||
|
I have hardcoded the "months" and "days" sets because they are |
||||||
|
fixed values -- unless something monumental happens scientifically |
||||||
|
or politically. On top of that, this makes the graphs easier to |
||||||
|
read because they are in chronological order. This is not |
||||||
|
guaranteed if the "keys" for "months" and "sets" are formed from |
||||||
|
the data-object this function receives. |
||||||
|
Unfortunately, I cannot do the same for years. That will continue |
||||||
|
to grow as the years roll on through here -- unless something |
||||||
|
monumental happens scientifically or politically. |
||||||
|
''' |
||||||
|
def get_creation_date_totals(data): |
||||||
|
years = {} |
||||||
|
|
||||||
|
months = {"1": 0, "2": 0, "3": 0, "4": 0, "5": 0, "6": 0, |
||||||
|
"7": 0, "8": 0, "9": 0,"10": 0, "11": 0, "12": 0} |
||||||
|
|
||||||
|
days = {"1": 0, "2": 0, "3": 0, "4": 0, "5": 0, "6": 0, |
||||||
|
"7": 0, "8": 0, "9": 0,"10": 0, "11": 0, "12": 0, |
||||||
|
"13": 0, "14": 0, "15": 0, "16": 0, "17": 0, "18": 0, |
||||||
|
"19": 0, "20": 0, "21": 0,"22": 0, "23": 0, "24": 0, |
||||||
|
"25": 0, "26": 0, "27": 0, "28": 0, "29": 0, "30": 0, |
||||||
|
"31": 0} |
||||||
|
|
||||||
|
for item in data: |
||||||
|
ft = datetime.fromisoformat(item["dateCreated"]) |
||||||
|
|
||||||
|
if str(ft.year) in years: |
||||||
|
years[str(ft.year)] += 1 |
||||||
|
else: |
||||||
|
years[str(ft.year)] = 1 |
||||||
|
|
||||||
|
if str(ft.month) in months: |
||||||
|
months[str(ft.month)] += 1 |
||||||
|
else: |
||||||
|
months[str(ft.month)] = 1 |
||||||
|
|
||||||
|
if str(ft.day) in days: |
||||||
|
days[str(ft.day)] += 1 |
||||||
|
else: |
||||||
|
days[str(ft.day)] = 1 |
||||||
|
|
||||||
|
return [years, months, days] |
||||||
|
|
||||||
|
def get_category_totals(data): |
||||||
|
categories = {} |
||||||
|
for item in data: |
||||||
|
cat = item["category"] |
||||||
|
''' |
||||||
|
The join and split is because the data returned from the A.P.I. |
||||||
|
call contains a lot of white spaces. This just cleans it up. |
||||||
|
The white space was, also, making the chart render incorrectly. |
||||||
|
''' |
||||||
|
cat = ''.join(cat.split()) |
||||||
|
if cat in categories: |
||||||
|
total = categories.get(cat) |
||||||
|
categories[cat] = total + 1 |
||||||
|
else: |
||||||
|
categories[cat] = 1 |
||||||
|
return categories |
||||||
|
|
||||||
|
def get_db_column_totals(data, column_name): |
||||||
|
column_data = {} |
||||||
|
for item in data: |
||||||
|
col = item[column_name] |
||||||
|
col = " ".join(col.split()) |
||||||
|
# print(col) |
||||||
|
if col in column_data: |
||||||
|
total = column_data.get(col) |
||||||
|
column_data[col] = total + 1 |
||||||
|
else: |
||||||
|
column_data[col] = 1 |
||||||
|
return column_data |
||||||
|
|
||||||
|
def get_dimension_totals(data, column_name, dimension): |
||||||
|
dimensions = {} |
||||||
|
for item in data: |
||||||
|
dim = item[column_name] |
||||||
|
distance = dim[dimension]["value"]["distance"] |
||||||
|
if distance is not None: |
||||||
|
w = str(distance) |
||||||
|
if w not in dimensions: |
||||||
|
dimensions[str(distance)] = 1 |
||||||
|
else: |
||||||
|
total = dimensions.get(str(distance)) |
||||||
|
dimensions[str(distance)] = total + 1 |
||||||
|
return dimensions |
@ -0,0 +1,7 @@ |
|||||||
|
import requests |
||||||
|
|
||||||
|
def get_data(url): |
||||||
|
return requests.get(url) |
||||||
|
|
||||||
|
def get_json(url): |
||||||
|
return requests.get(url).json() |
Reference in new issue