Is there a way to get access to the data in the “Repositories contributed to” module on GitHub profile pages via the GitHub API? Ideally the entire list, not just the top five, which are all you can get on the web apparently.
Is there a way to get access to the data in the “Repositories contributed to” module on GitHub profile pages via the GitHub API? Ideally the entire list, not just the top five, which are all you can get on the web apparently.
You'll probably get the last year or so via GitHub's GraphQL API, as shown in Bertrand Martel's answer.
Everything that happened back to 2011 can be found in GitHub Archive, as stated in Kyle Kelley's answer. However, BigQuery's syntax and GitHub's API seems to have changed and the examples shown there no longer work in 08/2020.
So here's how I found all repos I contributed to
SELECT distinct repo.name
FROM (
SELECT * FROM `githubarchive.year.2011` UNION ALL
SELECT * FROM `githubarchive.year.2012` UNION ALL
SELECT * FROM `githubarchive.year.2013` UNION ALL
SELECT * FROM `githubarchive.year.2014` UNION ALL
SELECT * FROM `githubarchive.year.2015` UNION ALL
SELECT * FROM `githubarchive.year.2016` UNION ALL
SELECT * FROM `githubarchive.year.2017` UNION ALL
SELECT * FROM `githubarchive.year.2018`
)
WHERE (type = 'PushEvent'
OR type = 'PullRequestEvent')
AND actor.login = 'YOUR_USER'
Some of there Repos returned only have a name, no user or org. But I had to process the result manually afterwards anyway.
There is a new project that claims to list all contributions:
https://github.com/AurelienLourot/github-contribs
It also backs a service to produce more detailed user profiles:
You can take a look at https://github.com/casperdcl/ghstat which automates counting lines of code written in all visible repositories. Extracting the relevant code and tidying it up:
gh from https://github.com/cli/clijqbash${GH_USER} env var set#!/bin/bash
ghjq() { # <endpoint> <filter>
# filter all pages of authenticated requests to https://api.github.com
gh api --paginate "$1" | jq -r "$2"
}
repos="$(
ghjq users/$GH_USER/repos .[].full_name
ghjq "search/issues?q=is:pr+author:$GH_USER+is:merged" \
'.items[].repository_url | sub(".*github.com/repos/"; "")'
ghjq users/$GH_USER/subscriptions .[].full_name
for org in "$(ghjq users/$GH_USER/orgs .[].login)"; do
ghjq orgs/$org/repos .[].full_name
done
)"
repos="$(echo "$repos" | sort -u)"
# print repo if user is a contributor
for repo in $repos; do
if [[ $(ghjq repos/$repo/contributors "[.[].login | test(\"$GH_USER\")] | any") == "true" ]]; then
echo $repo
fi
done
I am using python:
import requests
import pandas as pd
import datetime
token='..........................'
g=Github(token,per_page=10000)
repos=g.search_repositories(query="q:example")