Skip to content

Instantly share code, notes, and snippets.

@marccarre
Last active July 19, 2020 06:24
Show Gist options
  • Star 0 You must be signed in to star a gist
  • Fork 0 You must be signed in to fork a gist
  • Save marccarre/599ecdfaf021bb5408442e2f3ed7d652 to your computer and use it in GitHub Desktop.
Save marccarre/599ecdfaf021bb5408442e2f3ed7d652 to your computer and use it in GitHub Desktop.
leetcode-ranking.py
#!/usr/bin/env python
'''
Usage:
./leetcode-ranking.py -c 198 marccarre Hydromail daisuke834
2400 marccarre 96
2895 Hydromail 116
6666 daisuke834 267
Prerequisites:
- pipenv install click==7.1.2
- pipenv install requests==2.24.0
'''
import click
import requests
from itertools import count
URL = 'https://leetcode.com/contest/api/ranking/weekly-contest-%(contest)d/?pagination=%(page)d&region=global'
@click.command()
@click.option('-c', '--contest', required=True, type=int, help='Leetcode contest number')
@click.option('-s', '--start', default=1, type=int, help='Page to start from')
@click.argument('usernames', required=True, nargs=-1)
def main(contest, start, usernames):
usernames = set([u.lower() for u in usernames])
for page in count(start=start):
data = requests.get(URL % {'contest': contest, 'page': page}).json()
if not data['total_rank']:
break
for row in data['total_rank']:
if row['username'].lower() in usernames:
print(row['rank'], row['username'], page)
usernames.discard(row['username'].lower())
if not usernames:
return
if __name__ == '__main__':
main()
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment