From: misomosi Date: Thu, 27 Aug 2026 03:07:33 +0000 (-0400) Subject: Rename scraper, add EZSets script X-Git-Url: http://git.misomosispi.com/?a=commitdiff_plain;h=00aa15bada178d095bad019cd740cce69fb9ef25;p=radev.git Rename scraper, add EZSets script --- diff --git a/EZSets/EZSets.py b/EZSets/EZSets.py new file mode 100644 index 0000000..c679e3d --- /dev/null +++ b/EZSets/EZSets.py @@ -0,0 +1,70 @@ +#!/usr/bin/env python3 +import json +import pathlib +import requests +import sys +import time + +if __name__ == '__main__': + with open(sys.argv[1]) as fp: + creds = json.load(fp) + key = creds['key'] + user = creds['user'] + + with open(sys.argv[2]) as fp: + games = json.load(fp) + for i in range(len(games)): + gid = games[i] + if isinstance(gid, str): + games[i] = int(pathlib.PurePosixPath(gid).name) + + session = requests.Session() + session.auth = requests.auth.HTTPBasicAuth(user, '') + with open(sys.argv[3], 'a+b') as fp: + fp.seek(0) + progressions = {} + for line in fp: + g = json.loads(line) + progressions[g['ID']] = g + for i,gid in enumerate(games): + print(f'Game {i+1} (ID = {gid}): ', end='', flush=True) + if gid in progressions: + print('Already downloaded') + else: + response = requests.get( + f'https://retroachievements.org/API/API_GetGameProgression.php?y={key}&i={gid}' + ) + p = json.loads(response.text) + progressions[gid] = p + fp.write(json.dumps(p).encode()) + fp.write(b'\n') + fp.flush() + print('Downloaded new progression! (Wait for rate limit...)') + time.sleep(1) + + with open(sys.argv[4], 'wb') as fp: + fp.write('\t'.join([ + 'Game', 'Console', 'Download', 'Points', 'RetroPoints', 'Achievements', + 'Number of Masterers', 'Median Time to Master', + 'Number of Hardcore Beaters', 'Median Time to Hardcore Beat', + 'Number of Completers', 'Median Time to Complete', + 'Number of Beaters', 'Median Time to Beat', + '\n', + ]).encode()) + LIMIT = (1 << 53) + rows = [(g, sum(a['Points'] for a in g['Achievements']), sum(a['TrueRatio'] for a in g['Achievements'])) for _, g in progressions.items()] + rows.sort(key=lambda x: -x[1] / (x[0]['MedianTimeToMaster'] or LIMIT)) + for g, points, retropoints in rows: + fp.write('\t'.join([ + f'=HYPERLINK("https://retroachievements.org/game/{g['ID']}", "{g['Title']}")', + f'=HYPERLINK("https://retroachievements.org/system/{g['ConsoleID']}/games", "{g['ConsoleName']}")', + 'TODO', + str(points or 0), str(retropoints or 0), + str(g['NumAchievements'] or 0), + str(g['TimesUsedInMasteryMedian'] or 0), str(g['MedianTimeToMaster'] or LIMIT), + str(g['TimesUsedInHardcoreBeatMedian'] or 0), str(g['MedianTimeToBeatHardcore'] or LIMIT), + str(g['TimesUsedInCompletionMedian'] or 0), str(g['MedianTimeToComplete'] or LIMIT), + str(g['TimesUsedInBeatMedian'] or 0), str(g['MedianTimeToBeat'] or LIMIT), + '\n', + ]).encode()) + pass diff --git a/EZSets/FreelyAvailableScraper.js b/EZSets/RAHubScraper.js similarity index 100% rename from EZSets/FreelyAvailableScraper.js rename to EZSets/RAHubScraper.js