diff --git a/app/models/unlistedapps.py b/app/models/unlistedapps.py new file mode 100644 index 0000000..ed6268f --- /dev/null +++ b/app/models/unlistedapps.py @@ -0,0 +1,66 @@ +import requests +import json +import datetime +import os + +class UnlistedApps(): + + def find_unlisted_apps(): + + + official = json.loads(requests.get("https://raw.githubusercontent.com/YunoHost/apps/master/official.json").text) + community = json.loads(requests.get("https://raw.githubusercontent.com/YunoHost/apps/master/community.json").text) + + official_apps = [ os.path.basename(app["url"]) for app in official.values() ] + community_apps = [ os.path.basename(app["url"]) for app in community.values() ] + + apps = [] + + for i in range(0,6): + + print("Page " + str(i) + " ... ") + r = requests.get("https://api.github.com/search/repositories?q=_ynh&sort=updated&per_page=100&page="+str(i)) + assert r.status_code == 200 + j = json.loads(r.text) + print(str(len(j["items"])) + " items ") + for item in j["items"]: + app = { + "name": item["name"], + "url": item["html_url"], + "owner": item["owner"]["login"], + "description": item["description"], + "updated_days_ago": githubDateToDaysAgo(item["updated_at"]) + } + + if str(item["size"]) == "0": + continue + + if not app["name"].endswith("_ynh"): + continue + + if app["name"] in official_apps or app["name"] in community_apps: + continue + + app["name"] = app["name"].replace("_ynh", "") + + apps.append(app) + + apps = sorted(apps, key=lambda x: x["updated_days_ago"]) + + for app in apps: + if app["updated_days_ago"] > 200: + continue + print(app["name"] + " ... " + app["url"]) + + with open('apps.json', 'w') as f: + json.dump(apps, f) + + +def githubDateToDaysAgo(date): + now = datetime.datetime.now() + date = datetime.datetime.strptime(date, "%Y-%m-%dT%H:%M:%SZ") + return (now - date).days + + +UnlistedApps.find_unlisted_apps() +