diff --git a/api/download.py b/api/download.py new file mode 100644 index 0000000..bf4965c --- /dev/null +++ b/api/download.py @@ -0,0 +1,81 @@ +import json + +from tqdm import tqdm + + +class Download: + def __init__(self, api): + self.api = api + + def download_edition(cls, edition) : + print("Downloading edition " + edition) + + in_edition = cls.api.get_one( + "items/edition", + {"filter": {"ident": {"_eq": edition}}} + ) + + in_chapters = cls.api.get( + "items/chapter", + {"filter": {"edition": {"edition_id": {"_eq": in_edition["id"]}}}}, + ) + + out_chapters = [] + + for in_chapter in tqdm(in_chapters): + + in_sections = cls.api.get( + "items/section", + {"filter": {"chapter": {"chapter_id": {"_eq": in_chapter["id"]}}}}, + ) + + out_chapters.append( + { + "title": in_chapter["title"], + "abstract": in_chapter["abstract"], + "sections": [], + } + ) + + for in_section in in_sections: + out_chapters[-1]["sections"].append( + { + "title": in_section["title"], + "ident": in_section["ident"], + "status": in_section["status"], + "content": in_section["content"], + "slide": in_section["slide"], + "video": in_section["video_url"], + "questions": [], + } + ) + + with open("data/book_"+edition+".json", "w", encoding="utf-8") as file: + json.dump(out_chapters, file, ensure_ascii=False, indent=4) + + def download_question_metadata(cls) : + print("Downloading question metadata") + + questions = cls.api.get( + "items/questions", + params={"filter": {"class_3": {"_in": [1,2,3]}}, "sort": "position"} + ) + + result = {} + + for question in questions: + result[question["id"]] = { + "number": question["number"], + "picture_question": question["picture_question"] if question["picture_question"] is not None else "", + "picture_a": question["picture_a"] if question["picture_a"] is not None else "", + "picture_b": question["picture_b"] if question["picture_b"] is not None else "", + "picture_c": question["picture_c"] if question["picture_c"] is not None else "", + "picture_d": question["picture_d"] if question["picture_d"] is not None else "", + "layout": question["layout"] if question["layout"] is not None else "", + } + + # Serializing json: + with open("data/metadata.json", "w") as f: + json.dump(result, f, indent=4) + f.close() + diff --git a/build.py b/build.py new file mode 100644 index 0000000..dd5e620 --- /dev/null +++ b/build.py @@ -0,0 +1,11 @@ + +import api.config as config +import api.directus as directus +import api.download as download + +conf = config.Config() +api = directus.DirectusAPI(conf) +dl = download.Download(api) + +dl.download_edition("N") +dl.download_question_metadata() diff --git a/download.py b/download.py deleted file mode 100644 index fe9a8c3..0000000 --- a/download.py +++ /dev/null @@ -1,85 +0,0 @@ -import json - -from tqdm import tqdm - -import api.config as config -import api.directus as directus - - -def download_edition(api, edition) : - print("Downloading edition " + edition) - - in_edition = api.get_one( - "items/edition", - {"filter": {"ident": {"_eq": edition}}} - ) - - in_chapters = api.get( - "items/chapter", - {"filter": {"edition": {"edition_id": {"_eq": in_edition["id"]}}}}, - ) - - out_chapters = [] - - for in_chapter in tqdm(in_chapters): - - in_sections = api.get( - "items/section", - {"filter": {"chapter": {"chapter_id": {"_eq": in_chapter["id"]}}}}, - ) - - out_chapters.append( - { - "title": in_chapter["title"], - "abstract": in_chapter["abstract"], - "sections": [], - } - ) - - for in_section in in_sections: - out_chapters[-1]["sections"].append( - { - "title": in_section["title"], - "ident": in_section["ident"], - "status": in_section["status"], - "content": in_section["content"], - "slide": in_section["slide"], - "video": in_section["video_url"], - "questions": [], - } - ) - - with open("data/book_"+edition+".json", "w", encoding="utf-8") as file: - json.dump(out_chapters, file, ensure_ascii=False, indent=4) - -def download_question_metadata(api) : - print("Downloading question metadata") - - questions = api.get( - "items/questions", - params={"filter": {"class_3": {"_in": [1,2,3]}}, "sort": "position"} - ) - - result = {} - - for question in questions: - result[question["id"]] = { - "number": question["number"], - "picture_question": question["picture_question"] if question["picture_question"] is not None else "", - "picture_a": question["picture_a"] if question["picture_a"] is not None else "", - "picture_b": question["picture_b"] if question["picture_b"] is not None else "", - "picture_c": question["picture_c"] if question["picture_c"] is not None else "", - "picture_d": question["picture_d"] if question["picture_d"] is not None else "", - "layout": question["layout"] if question["layout"] is not None else "", - } - - # Serializing json: - with open("data/metadata.json", "w") as f: - json.dump(result, f, indent=4) - f.close() - -config = config.Config() -api = directus.DirectusAPI(config) - -download_edition(api, "N") -download_question_metadata(api)