import Apikeys import requests import pprint import csv import pandas as pd pp = pprint.PrettyPrinter(indent=4) APIKEY = Apikeys.ANTHOLOGY HEADERS = { "accept": "application/json", "X-Api-Key": APIKEY, } BASEURL = "https://api.northpass.com/v2/" GROUPS = [ "Accreditation", "Anthology 101", "Baseline", "Course Evaluations", "Engage", "Evaluate", "Finance & HCM", "Learn", "Portfolio", "Power BI", "Raise", "Reach", "Student", ] def group_ids(): """ Get the group Ids from a list of named groups. """ url = "groups" ids = [] for group in GROUPS: filter = f"?filter[name][cont]={group} - (" urlreq = f"{BASEURL}{url}{filter}" response = requests.get(urlreq, headers=HEADERS) response = response.json() for data in response["data"]: group = data["attributes"]["name"] id1 = data["id"] group_tupe = (id1, group) ids.append(group_tupe) get_courses(ids) def get_courses(ids): df = pd.DataFrame() courses = [] for tupe in ids: id = tupe[0] print(id) group = tupe[1] url2 = f"groups/{id}/courses?limit=100" courseurl = f"{BASEURL}{url2}" coursereq = requests.get(courseurl, headers=HEADERS) coursedata = coursereq.json() nextlink = coursedata["links"] count = 0 while "next" in nextlink: for count in range(10): print(f"Next link for {group} and page {count}") coursereq2 = requests.get(f"{courseurl}&page={count}", headers=HEADERS) coursedata2 = coursereq2.json() next = coursedata2["links"] coursedict = parse_data(coursedata2, group) print(f"While Coursedict --> {coursedict}") if coursedict is None: pass else: courses.append(coursedict) if "next" not in next: break else: print(f"Else Statement for {group}") coursedict = parse_data(coursedata, group) print(f"Else Coursedict --> {coursedict}") if coursedict is None: pass else: courses.append(coursedict) pddata = df.from_records(courses) pddata.to_csv("~/Downloads/Anthology_Course_IDs_Names.csv") def parse_data(coursedata, group): for cdata in coursedata["included"]: if cdata["attributes"]["status"] == "live": name = cdata["attributes"]["name"] courseid = cdata["attributes"]["share_course_link"].split("/")[5] enrollments = cdata["attributes"]["enrollments_count"] created = cdata["attributes"]["created_at"] updated = cdata["attributes"]["updated_at"] coursedict = { "group": group, "name": name, "id": courseid, "enrollments": enrollments, "created at": created, "updated at": updated, } if coursedict is not None: return coursedict if __name__ == "__main__": group_ids()