Skip to content

Instantly share code, notes, and snippets.

@dannguyen
Last active Jul 30, 2022
Embed
What would you like to do?
fetch_ghstars.py: quick CLI script to fetch from Github API all of a user's starred repos and save it as raw JSON and wrangled CSV

fetch_ghstars.py: quick CLI script to fetch and collate from Github API all of a user's starred repos

  • Requires Python 3.6+
  • Creates a subdir 'ghstars-USERNAME' at the current working directory
  • the raw JSON of each page request is saved as: 01.json, 02.json 0n.json
  • A flattened, filtered CSV is also created: wrangled.csv

Example usage:

$ fetch_ghstars.py USERNAME [OPTIONAL_AUTH_TOKEN]

cURL equivalent for individual fetch:

$ curl -H "Accept: application/vnd.github.v3.star+json" https://api.github.com/users/USERNAME/starred

To use authentication, get a personalized token from Github here: https://github.com/settings/tokens/new

Stuff

Todo notes to myself

  • stargazers_count seems to be the same as watchers_count
  • API doesn't return data for number of repo watchers or pull requests
  • Open issues doesn't seem to reflect the Issues GUI value; is it a combo of open issues and pull requests?
  • wtf is size value
#!/usr/bin/env python3
"""
Requires Python 3.6+
Example usage:
$ fetch_ghstars.py USERNAME [OPTIONAL_AUTH_TOKEN]
"""
import csv
from functools import reduce
import json
from pathlib import Path
import requests
from sys import argv, exit, stderr
BASE_ENDPOINT = (
"https://api.github.com/users/{username}/starred?per_page=100&page={pagenum}"
)
BASE_HEADERS = {"Accept": "application/vnd.github.v3.star+json"}
TARGET_DIRNAME = "./ghstars-{username}/"
WRANGLED_BASENAME = "wrangled.csv"
OUTPUT_HEADERS = {
"repo": "repo.full_name",
"starred_at": "starred_at",
"repo_name": "repo.name",
"owner_name": "repo.owner.login",
"size": "repo.size",
"stars": "repo.stargazers_count",
"watchers": "repo.watchers_count",
"forks": "repo.forks_count",
"updated_at": "repo.updated_at",
"pushed_at": "repo.pushed_at",
"created_at": "repo.created_at",
"language": "repo.language",
"license": "repo.license.key",
"description": "repo.description",
"homepage": "repo.homepage",
"is_private": "repo.private",
"is_fork": "repo.fork",
"is_archived": "repo.archived",
"has_issues": "repo.has_issues",
"has_downloads": "repo.has_downloads",
"has_projects": "repo.has_projects",
"has_wiki": "repo.has_wiki",
"has_pages": "repo.has_pages",
"repo_id": "repo.id",
"repo_url": "repo.html_url",
}
def fetch(user_name: str, target_dir: Path, auth_token: str = None) -> list:
"""fetches each page of GIthub star results, saves the raw json, and returns a compiled list of deserialized objects"""
target_dir.mkdir(exist_ok=True)
headers = BASE_HEADERS.copy()
if auth_token:
headers["Authorization"] = f"token {auth_token}"
alldata = []
i = 0
while i >= 0:
i += 1
url = BASE_ENDPOINT.format(username=user_name, pagenum=i)
xlog(f"Fetch #{i}")
xlog(f"- {url}")
resp = requests.get(url, headers=headers, stream=True)
data = resp.json()
if type(data) is not list:
exit(f"Unexpected or error response from API:\n{data}")
if not data:
xlog("Empty result set, seems we're done fetching!")
break
else:
alldata.extend(data)
dp = target_dir.joinpath("{}.json".format(str(i).rjust(2, "0")))
xlog(f"- Writing {len(data)} results to: {dp} ({len(alldata)} total)")
dp.write_text(json.dumps(data, indent=2))
return alldata
def wrangle(data: list) -> list:
"""returns a compiled list of Github star data, with select header names"""
wdata = []
for row in data:
w = {}
for hed, ktxt in OUTPUT_HEADERS.items():
w[hed] = reduce(
lambda r, k: r[k] if r and r.get(k) else None, ktxt.split("."), row
)
wdata.append(w)
return wdata
def xlog(thing):
stderr.write(f"{thing}\n")
def main():
if len(argv) < 2:
exit("Error: Need to provide a username as first argument")
username, *xargs = argv[1:]
oauth = xargs[0] if xargs else None
oatxt = "token " + oauth[0:4] + "****" + oauth[-3:] if oauth else "no auth"
target_dir = Path(TARGET_DIRNAME.format(username=username))
xlog(f"Collecting `{username}` data. Using {oatxt}. Saving to: {target_dir}/")
rawdata = fetch(username, target_dir, auth_token=oauth)
wdata = wrangle(rawdata)
wpath = target_dir.joinpath(WRANGLED_BASENAME)
with open(wpath, "w") as w:
outs = csv.DictWriter(w, fieldnames=OUTPUT_HEADERS.keys())
outs.writeheader()
outs.writerows(wdata)
xlog(f"Wrote {len(wdata)} flattened records to: {wpath}")
if __name__ == "__main__":
main()
[
{
"starred_at": "2020-10-29T15:31:41Z",
"repo": {
"id": 52855516,
"node_id": "MDEwOlJlcG9zaXRvcnk1Mjg1NTUxNg==",
"name": "homebrew-core",
"full_name": "Homebrew/homebrew-core",
"private": false,
"owner": {
"login": "Homebrew",
"id": 1503512,
"node_id": "MDEyOk9yZ2FuaXphdGlvbjE1MDM1MTI=",
"avatar_url": "https://avatars2.githubusercontent.com/u/1503512?v=4",
"gravatar_id": "",
"url": "https://api.github.com/users/Homebrew",
"html_url": "https://github.com/Homebrew",
"followers_url": "https://api.github.com/users/Homebrew/followers",
"following_url": "https://api.github.com/users/Homebrew/following{/other_user}",
"gists_url": "https://api.github.com/users/Homebrew/gists{/gist_id}",
"starred_url": "https://api.github.com/users/Homebrew/starred{/owner}{/repo}",
"subscriptions_url": "https://api.github.com/users/Homebrew/subscriptions",
"organizations_url": "https://api.github.com/users/Homebrew/orgs",
"repos_url": "https://api.github.com/users/Homebrew/repos",
"events_url": "https://api.github.com/users/Homebrew/events{/privacy}",
"received_events_url": "https://api.github.com/users/Homebrew/received_events",
"type": "Organization",
"site_admin": false
},
"html_url": "https://github.com/Homebrew/homebrew-core",
"description": "\ud83c\udf7b Default formulae for the missing package manager for macOS",
"fork": false,
"url": "https://api.github.com/repos/Homebrew/homebrew-core",
"forks_url": "https://api.github.com/repos/Homebrew/homebrew-core/forks",
"keys_url": "https://api.github.com/repos/Homebrew/homebrew-core/keys{/key_id}",
"collaborators_url": "https://api.github.com/repos/Homebrew/homebrew-core/collaborators{/collaborator}",
"teams_url": "https://api.github.com/repos/Homebrew/homebrew-core/teams",
"hooks_url": "https://api.github.com/repos/Homebrew/homebrew-core/hooks",
"issue_events_url": "https://api.github.com/repos/Homebrew/homebrew-core/issues/events{/number}",
"events_url": "https://api.github.com/repos/Homebrew/homebrew-core/events",
"assignees_url": "https://api.github.com/repos/Homebrew/homebrew-core/assignees{/user}",
"branches_url": "https://api.github.com/repos/Homebrew/homebrew-core/branches{/branch}",
"tags_url": "https://api.github.com/repos/Homebrew/homebrew-core/tags",
"blobs_url": "https://api.github.com/repos/Homebrew/homebrew-core/git/blobs{/sha}",
"git_tags_url": "https://api.github.com/repos/Homebrew/homebrew-core/git/tags{/sha}",
"git_refs_url": "https://api.github.com/repos/Homebrew/homebrew-core/git/refs{/sha}",
"trees_url": "https://api.github.com/repos/Homebrew/homebrew-core/git/trees{/sha}",
"statuses_url": "https://api.github.com/repos/Homebrew/homebrew-core/statuses/{sha}",
"languages_url": "https://api.github.com/repos/Homebrew/homebrew-core/languages",
"stargazers_url": "https://api.github.com/repos/Homebrew/homebrew-core/stargazers",
"contributors_url": "https://api.github.com/repos/Homebrew/homebrew-core/contributors",
"subscribers_url": "https://api.github.com/repos/Homebrew/homebrew-core/subscribers",
"subscription_url": "https://api.github.com/repos/Homebrew/homebrew-core/subscription",
"commits_url": "https://api.github.com/repos/Homebrew/homebrew-core/commits{/sha}",
"git_commits_url": "https://api.github.com/repos/Homebrew/homebrew-core/git/commits{/sha}",
"comments_url": "https://api.github.com/repos/Homebrew/homebrew-core/comments{/number}",
"issue_comment_url": "https://api.github.com/repos/Homebrew/homebrew-core/issues/comments{/number}",
"contents_url": "https://api.github.com/repos/Homebrew/homebrew-core/contents/{+path}",
"compare_url": "https://api.github.com/repos/Homebrew/homebrew-core/compare/{base}...{head}",
"merges_url": "https://api.github.com/repos/Homebrew/homebrew-core/merges",
"archive_url": "https://api.github.com/repos/Homebrew/homebrew-core/{archive_format}{/ref}",
"downloads_url": "https://api.github.com/repos/Homebrew/homebrew-core/downloads",
"issues_url": "https://api.github.com/repos/Homebrew/homebrew-core/issues{/number}",
"pulls_url": "https://api.github.com/repos/Homebrew/homebrew-core/pulls{/number}",
"milestones_url": "https://api.github.com/repos/Homebrew/homebrew-core/milestones{/number}",
"notifications_url": "https://api.github.com/repos/Homebrew/homebrew-core/notifications{?since,all,participating}",
"labels_url": "https://api.github.com/repos/Homebrew/homebrew-core/labels{/name}",
"releases_url": "https://api.github.com/repos/Homebrew/homebrew-core/releases{/id}",
"deployments_url": "https://api.github.com/repos/Homebrew/homebrew-core/deployments",
"created_at": "2016-03-01T06:58:36Z",
"updated_at": "2020-10-29T20:54:52Z",
"pushed_at": "2020-10-29T20:45:46Z",
"git_url": "git://github.com/Homebrew/homebrew-core.git",
"ssh_url": "git@github.com:Homebrew/homebrew-core.git",
"clone_url": "https://github.com/Homebrew/homebrew-core.git",
"svn_url": "https://github.com/Homebrew/homebrew-core",
"homepage": "https://brew.sh",
"size": 338391,
"stargazers_count": 8210,
"watchers_count": 8210,
"language": "Ruby",
"has_issues": true,
"has_projects": false,
"has_downloads": true,
"has_wiki": false,
"has_pages": false,
"forks_count": 8497,
"mirror_url": null,
"archived": false,
"disabled": false,
"open_issues_count": 138,
"license": {
"key": "bsd-2-clause",
"name": "BSD 2-Clause \"Simplified\" License",
"spdx_id": "BSD-2-Clause",
"url": "https://api.github.com/licenses/bsd-2-clause",
"node_id": "MDc6TGljZW5zZTQ="
},
"forks": 8497,
"open_issues": 138,
"watchers": 8210,
"default_branch": "master"
}
},
{
"starred_at": "2020-10-22T15:32:08Z",
"repo": {
"id": 305462211,
"node_id": "MDEwOlJlcG9zaXRvcnkzMDU0NjIyMTE=",
"name": "2020-election-night-model",
"full_name": "washingtonpost/2020-election-night-model",
"private": false,
"owner": {
"login": "washingtonpost",
"id": 1963554,
"node_id": "MDEyOk9yZ2FuaXphdGlvbjE5NjM1NTQ=",
"avatar_url": "https://avatars0.githubusercontent.com/u/1963554?v=4",
"gravatar_id": "",
"url": "https://api.github.com/users/washingtonpost",
"html_url": "https://github.com/washingtonpost",
"followers_url": "https://api.github.com/users/washingtonpost/followers",
"following_url": "https://api.github.com/users/washingtonpost/following{/other_user}",
"gists_url": "https://api.github.com/users/washingtonpost/gists{/gist_id}",
"starred_url": "https://api.github.com/users/washingtonpost/starred{/owner}{/repo}",
"subscriptions_url": "https://api.github.com/users/washingtonpost/subscriptions",
"organizations_url": "https://api.github.com/users/washingtonpost/orgs",
"repos_url": "https://api.github.com/users/washingtonpost/repos",
"events_url": "https://api.github.com/users/washingtonpost/events{/privacy}",
"received_events_url": "https://api.github.com/users/washingtonpost/received_events",
"type": "Organization",
"site_admin": false
},
"html_url": "https://github.com/washingtonpost/2020-election-night-model",
"description": "2020-election-night-model",
"fork": false,
"url": "https://api.github.com/repos/washingtonpost/2020-election-night-model",
"forks_url": "https://api.github.com/repos/washingtonpost/2020-election-night-model/forks",
"keys_url": "https://api.github.com/repos/washingtonpost/2020-election-night-model/keys{/key_id}",
"collaborators_url": "https://api.github.com/repos/washingtonpost/2020-election-night-model/collaborators{/collaborator}",
"teams_url": "https://api.github.com/repos/washingtonpost/2020-election-night-model/teams",
"hooks_url": "https://api.github.com/repos/washingtonpost/2020-election-night-model/hooks",
"issue_events_url": "https://api.github.com/repos/washingtonpost/2020-election-night-model/issues/events{/number}",
"events_url": "https://api.github.com/repos/washingtonpost/2020-election-night-model/events",
"assignees_url": "https://api.github.com/repos/washingtonpost/2020-election-night-model/assignees{/user}",
"branches_url": "https://api.github.com/repos/washingtonpost/2020-election-night-model/branches{/branch}",
"tags_url": "https://api.github.com/repos/washingtonpost/2020-election-night-model/tags",
"blobs_url": "https://api.github.com/repos/washingtonpost/2020-election-night-model/git/blobs{/sha}",
"git_tags_url": "https://api.github.com/repos/washingtonpost/2020-election-night-model/git/tags{/sha}",
"git_refs_url": "https://api.github.com/repos/washingtonpost/2020-election-night-model/git/refs{/sha}",
"trees_url": "https://api.github.com/repos/washingtonpost/2020-election-night-model/git/trees{/sha}",
"statuses_url": "https://api.github.com/repos/washingtonpost/2020-election-night-model/statuses/{sha}",
"languages_url": "https://api.github.com/repos/washingtonpost/2020-election-night-model/languages",
"stargazers_url": "https://api.github.com/repos/washingtonpost/2020-election-night-model/stargazers",
"contributors_url": "https://api.github.com/repos/washingtonpost/2020-election-night-model/contributors",
"subscribers_url": "https://api.github.com/repos/washingtonpost/2020-election-night-model/subscribers",
"subscription_url": "https://api.github.com/repos/washingtonpost/2020-election-night-model/subscription",
"commits_url": "https://api.github.com/repos/washingtonpost/2020-election-night-model/commits{/sha}",
"git_commits_url": "https://api.github.com/repos/washingtonpost/2020-election-night-model/git/commits{/sha}",
"comments_url": "https://api.github.com/repos/washingtonpost/2020-election-night-model/comments{/number}",
"issue_comment_url": "https://api.github.com/repos/washingtonpost/2020-election-night-model/issues/comments{/number}",
"contents_url": "https://api.github.com/repos/washingtonpost/2020-election-night-model/contents/{+path}",
"compare_url": "https://api.github.com/repos/washingtonpost/2020-election-night-model/compare/{base}...{head}",
"merges_url": "https://api.github.com/repos/washingtonpost/2020-election-night-model/merges",
"archive_url": "https://api.github.com/repos/washingtonpost/2020-election-night-model/{archive_format}{/ref}",
"downloads_url": "https://api.github.com/repos/washingtonpost/2020-election-night-model/downloads",
"issues_url": "https://api.github.com/repos/washingtonpost/2020-election-night-model/issues{/number}",
"pulls_url": "https://api.github.com/repos/washingtonpost/2020-election-night-model/pulls{/number}",
"milestones_url": "https://api.github.com/repos/washingtonpost/2020-election-night-model/milestones{/number}",
"notifications_url": "https://api.github.com/repos/washingtonpost/2020-election-night-model/notifications{?since,all,participating}",
"labels_url": "https://api.github.com/repos/washingtonpost/2020-election-night-model/labels{/name}",
"releases_url": "https://api.github.com/repos/washingtonpost/2020-election-night-model/releases{/id}",
"deployments_url": "https://api.github.com/repos/washingtonpost/2020-election-night-model/deployments",
"created_at": "2020-10-19T17:28:16Z",
"updated_at": "2020-10-28T09:56:32Z",
"pushed_at": "2020-10-22T14:41:48Z",
"git_url": "git://github.com/washingtonpost/2020-election-night-model.git",
"ssh_url": "git@github.com:washingtonpost/2020-election-night-model.git",
"clone_url": "https://github.com/washingtonpost/2020-election-night-model.git",
"svn_url": "https://github.com/washingtonpost/2020-election-night-model",
"homepage": null,
"size": 24,
"stargazers_count": 24,
"watchers_count": 24,
"language": "R",
"has_issues": true,
"has_projects": true,
"has_downloads": true,
"has_wiki": true,
"has_pages": false,
"forks_count": 2,
"mirror_url": null,
"archived": false,
"disabled": false,
"open_issues_count": 0,
"license": {
"key": "mit",
"name": "MIT License",
"spdx_id": "MIT",
"url": "https://api.github.com/licenses/mit",
"node_id": "MDc6TGljZW5zZTEz"
},
"forks": 2,
"open_issues": 0,
"watchers": 24,
"default_branch": "main"
}
},
{
"starred_at": "2020-10-20T18:32:12Z",
"repo": {
"id": 13655592,
"node_id": "MDEwOlJlcG9zaXRvcnkxMzY1NTU5Mg==",
"name": "sphinx_rtd_theme",
"full_name": "readthedocs/sphinx_rtd_theme",
"private": false,
"owner": {
"login": "readthedocs",
"id": 366329,
"node_id": "MDEyOk9yZ2FuaXphdGlvbjM2NjMyOQ==",
"avatar_url": "https://avatars2.githubusercontent.com/u/366329?v=4",
"gravatar_id": "",
"url": "https://api.github.com/users/readthedocs",
"html_url": "https://github.com/readthedocs",
"followers_url": "https://api.github.com/users/readthedocs/followers",
"following_url": "https://api.github.com/users/readthedocs/following{/other_user}",
"gists_url": "https://api.github.com/users/readthedocs/gists{/gist_id}",
"starred_url": "https://api.github.com/users/readthedocs/starred{/owner}{/repo}",
"subscriptions_url": "https://api.github.com/users/readthedocs/subscriptions",
"organizations_url": "https://api.github.com/users/readthedocs/orgs",
"repos_url": "https://api.github.com/users/readthedocs/repos",
"events_url": "https://api.github.com/users/readthedocs/events{/privacy}",
"received_events_url": "https://api.github.com/users/readthedocs/received_events",
"type": "Organization",
"site_admin": false
},
"html_url": "https://github.com/readthedocs/sphinx_rtd_theme",
"description": "Sphinx theme for readthedocs.org",
"fork": false,
"url": "https://api.github.com/repos/readthedocs/sphinx_rtd_theme",
"forks_url": "https://api.github.com/repos/readthedocs/sphinx_rtd_theme/forks",
"keys_url": "https://api.github.com/repos/readthedocs/sphinx_rtd_theme/keys{/key_id}",
"collaborators_url": "https://api.github.com/repos/readthedocs/sphinx_rtd_theme/collaborators{/collaborator}",
"teams_url": "https://api.github.com/repos/readthedocs/sphinx_rtd_theme/teams",
"hooks_url": "https://api.github.com/repos/readthedocs/sphinx_rtd_theme/hooks",
"issue_events_url": "https://api.github.com/repos/readthedocs/sphinx_rtd_theme/issues/events{/number}",
"events_url": "https://api.github.com/repos/readthedocs/sphinx_rtd_theme/events",
"assignees_url": "https://api.github.com/repos/readthedocs/sphinx_rtd_theme/assignees{/user}",
"branches_url": "https://api.github.com/repos/readthedocs/sphinx_rtd_theme/branches{/branch}",
"tags_url": "https://api.github.com/repos/readthedocs/sphinx_rtd_theme/tags",
"blobs_url": "https://api.github.com/repos/readthedocs/sphinx_rtd_theme/git/blobs{/sha}",
"git_tags_url": "https://api.github.com/repos/readthedocs/sphinx_rtd_theme/git/tags{/sha}",
"git_refs_url": "https://api.github.com/repos/readthedocs/sphinx_rtd_theme/git/refs{/sha}",
"trees_url": "https://api.github.com/repos/readthedocs/sphinx_rtd_theme/git/trees{/sha}",
"statuses_url": "https://api.github.com/repos/readthedocs/sphinx_rtd_theme/statuses/{sha}",
"languages_url": "https://api.github.com/repos/readthedocs/sphinx_rtd_theme/languages",
"stargazers_url": "https://api.github.com/repos/readthedocs/sphinx_rtd_theme/stargazers",
"contributors_url": "https://api.github.com/repos/readthedocs/sphinx_rtd_theme/contributors",
"subscribers_url": "https://api.github.com/repos/readthedocs/sphinx_rtd_theme/subscribers",
"subscription_url": "https://api.github.com/repos/readthedocs/sphinx_rtd_theme/subscription",
"commits_url": "https://api.github.com/repos/readthedocs/sphinx_rtd_theme/commits{/sha}",
"git_commits_url": "https://api.github.com/repos/readthedocs/sphinx_rtd_theme/git/commits{/sha}",
"comments_url": "https://api.github.com/repos/readthedocs/sphinx_rtd_theme/comments{/number}",
"issue_comment_url": "https://api.github.com/repos/readthedocs/sphinx_rtd_theme/issues/comments{/number}",
"contents_url": "https://api.github.com/repos/readthedocs/sphinx_rtd_theme/contents/{+path}",
"compare_url": "https://api.github.com/repos/readthedocs/sphinx_rtd_theme/compare/{base}...{head}",
"merges_url": "https://api.github.com/repos/readthedocs/sphinx_rtd_theme/merges",
"archive_url": "https://api.github.com/repos/readthedocs/sphinx_rtd_theme/{archive_format}{/ref}",
"downloads_url": "https://api.github.com/repos/readthedocs/sphinx_rtd_theme/downloads",
"issues_url": "https://api.github.com/repos/readthedocs/sphinx_rtd_theme/issues{/number}",
"pulls_url": "https://api.github.com/repos/readthedocs/sphinx_rtd_theme/pulls{/number}",
"milestones_url": "https://api.github.com/repos/readthedocs/sphinx_rtd_theme/milestones{/number}",
"notifications_url": "https://api.github.com/repos/readthedocs/sphinx_rtd_theme/notifications{?since,all,participating}",
"labels_url": "https://api.github.com/repos/readthedocs/sphinx_rtd_theme/labels{/name}",
"releases_url": "https://api.github.com/repos/readthedocs/sphinx_rtd_theme/releases{/id}",
"deployments_url": "https://api.github.com/repos/readthedocs/sphinx_rtd_theme/deployments",
"created_at": "2013-10-17T17:10:49Z",
"updated_at": "2020-10-29T16:41:41Z",
"pushed_at": "2020-10-25T21:30:55Z",
"git_url": "git://github.com/readthedocs/sphinx_rtd_theme.git",
"ssh_url": "git@github.com:readthedocs/sphinx_rtd_theme.git",
"clone_url": "https://github.com/readthedocs/sphinx_rtd_theme.git",
"svn_url": "https://github.com/readthedocs/sphinx_rtd_theme",
"homepage": "https://sphinx-rtd-theme.readthedocs.io/",
"size": 11942,
"stargazers_count": 3507,
"watchers_count": 3507,
"language": "Sass",
"has_issues": true,
"has_projects": true,
"has_downloads": true,
"has_wiki": true,
"has_pages": false,
"forks_count": 1436,
"mirror_url": null,
"archived": false,
"disabled": false,
"open_issues_count": 163,
"license": {
"key": "other",
"name": "Other",
"spdx_id": "NOASSERTION",
"url": null,
"node_id": "MDc6TGljZW5zZTA="
},
"forks": 1436,
"open_issues": 163,
"watchers": 3507,
"default_branch": "master"
}
}
]
repo starred_at repo_name owner_name size stars watchers forks updated_at pushed_at created_at language license description homepage is_private is_fork is_archived has_issues has_downloads has_projects has_wiki has_pages repo_id repo_url
Homebrew/homebrew-core 2020-10-29T15:31:41Z homebrew-core Homebrew 337952 8209 8209 8497 2020-10-29T20:11:09Z 2020-10-29T20:13:41Z 2016-03-01T06:58:36Z Ruby bsd-2-clause 🍻 Default formulae for the missing package manager for macOS https://brew.sh True True 52855516 https://github.com/Homebrew/homebrew-core
washingtonpost/2020-election-night-model 2020-10-22T15:32:08Z 2020-election-night-model washingtonpost 24 24 24 2 2020-10-28T09:56:32Z 2020-10-22T14:41:48Z 2020-10-19T17:28:16Z R mit 2020-election-night-model True True True True 305462211 https://github.com/washingtonpost/2020-election-night-model
readthedocs/sphinx_rtd_theme 2020-10-20T18:32:12Z sphinx_rtd_theme readthedocs 11942 3507 3507 1436 2020-10-29T16:41:41Z 2020-10-25T21:30:55Z 2013-10-17T17:10:49Z Sass other Sphinx theme for readthedocs.org https://sphinx-rtd-theme.readthedocs.io/ True True True True 13655592 https://github.com/readthedocs/sphinx_rtd_theme
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment