GitHub APIを介して、GitHubプロファイルページの「寄付されたリポジトリ」モジュールのデータにアクセスする方法はありますか?理想的には、トップ5だけではなく、リスト全体がWeb上で明らかに入手できるすべてです。
Google BigQuery を GitHub Archive と組み合わせて使用して、プルリクエストを作成したすべてのリポジトリをプルしました。
SELECT repository_url
FROM [githubarchive:github.timeline]
WHERE payload_pull_request_user_login ='rgbkrk'
GROUP BY repository_url;
同様のセマンティクスを使用して、貢献したリポジトリの数だけでなく、それらがあった言語も抽出できます。
SELECT COUNT(DISTINCT repository_url) AS count_repositories_contributed_to,
COUNT(DISTINCT repository_language) AS count_languages_in
FROM [githubarchive:github.timeline]
WHERE payload_pull_request_user_login ='rgbkrk';
報告された使用の問題を含む、全体的な貢献を探している場合
SELECT COUNT(DISTINCT repository_url) AS count_repositories_contributed_to,
COUNT(DISTINCT repository_language) AS count_languages_in
FROM [githubarchive:github.timeline]
WHERE actor_attributes_login = 'rgbkrk'
GROUP BY repository_url;
違いはactor_attributes_login
Issue Events API から来ています。
また、問題やPRが自分で提出していない可能性がある独自のリポジトリをキャプチャすることもできます。
GraphQL API v4 を使用すると、次のコマンドを使用して、これらの寄付されたリポジトリを取得できます。
{
viewer {
repositoriesContributedTo(first: 100, contributionTypes: [COMMIT, ISSUE, PULL_REQUEST, REPOSITORY]) {
totalCount
nodes {
nameWithOwner
}
pageInfo {
endCursor
hasNextPage
}
}
}
}
100を超えるレポジトリ(自分のものを含む)がある場合は、次のリクエストのためにrepositoriesContributedTo
でafter: "END_CURSOR_VALUE"
を指定してページ分割を行う必要があります。
私はこのようなものをGithubサマライザ用に少し前に実装してみました ...ユーザーが提供したリポジトリを取得するための私の手順は次のとおりです(自分のリポジトリを使用します)例としてユーザー):
https://api.github.com/search/issues?q=type:pr+state:closed+author:megawac&per_page=100&page=1
https://api.github.com/repos/jashkenas/underscore/contributors
repos/:owner/:repo/contributors
https://api.github.com/users/megawac/subscriptions
https://api.github.com/users/megawac/orgs
https://api.github.com/orgs/jsdelivr/repos
これは、ユーザーがプルリクエストを送信していないが、コントリビューターとして追加されているリポジトリを欠落しています。検索することで、これらのリポジトリを見つける確率を上げることができます。
1)開かれた問題(プルされたプルリクエストだけではない)
2)ユーザーがスターを付けたリポジトリ
明らかに、これは私たちがしたいよりもはるかに多くの要求を必要としますが、彼らがあなたに機能をごまかすようにさせるとき、あなたは何ができますか\ o /
GitHub APIが提供する検索 を使用できます。クエリは次のようになります。
https://api.github.com/search/repositories?q=%20+fork:true+user:username
forkパラメータをtrueに設定すると、forkを含めて、すべてのユーザーのリポジトリを照会できます。
ただし、ユーザーがリポジトリをフォークしただけでなく、それに貢献したことを確認したい場合は、「検索」リクエストで取得したすべてのリポジトリを反復処理し、ユーザーがその中にいるかどうかを確認する必要があります。 githubが貢献者を100人しか返さず、そのための解決策がないため、これはかなり厄介です...
私は問題に来ました。 ( GithubAPI:ユーザーがこれまでにコミットしたリポジトリを取得する )
私が見つけた実際のハックの1つは、 http://www.githubarchive.org/ というプロジェクトがあることです。2011年以降、すべてのパブリックイベントを記録します。理想的ではありませんが、役立つ場合があります。
したがって、たとえば、あなたの場合:
SELECT payload_pull_request_head_repo_clone_url
FROM [githubarchive:github.timeline]
WHERE payload_pull_request_base_user_login='outoftime'
GROUP BY payload_pull_request_head_repo_clone_url;
私が間違っていない場合は、プルしたリポジトリのリストが要求されます:
https://github.com/jreidthompson/noaa.git
https://github.com/kkrol89/sunspot.git
https://github.com/rterbush/sunspot.git
https://github.com/ottbot/cassandra-cql.git
https://github.com/insoul/cequel.git
https://github.com/mcordell/noaa.git
https://github.com/hackhands/sunspot_Rails.git
https://github.com/lgierth/eager_record.git
https://github.com/jnicklas/sunspot.git
https://github.com/klclee/sunspot.git
https://github.com/outoftime/cequel.git
ここでbigqueryを操作できます:bigquery.cloud.google.com、データスキーマはここにあります: https://github.com/igrigorik/githubarchive.org/blob/master/bigquery/schema.js
私はセレンを書いたpythonこれを行うためのスクリプト
"""
Get all your repos contributed to for the past year.
This uses Selenium and Chrome to login to github as your user, go through
your contributions page, and grab the repo from each day's contribution page.
Requires python3, Selenium, and Chrome with chromedriver installed.
Change the username variable, and run like this:
GITHUB_PASS="mypassword" python3 github_contributions.py
"""
import os
import sys
import time
from pprint import pprint as pp
from urllib.parse import urlsplit
from Selenium import webdriver
from Selenium.webdriver.support.ui import WebDriverWait
from Selenium.webdriver.support import expected_conditions as EC
username = 'jessejoe'
password = os.environ['GITHUB_PASS']
repos = []
driver = webdriver.Chrome()
driver.get('https://github.com/login')
driver.find_element_by_id('login_field').send_keys(username)
password_elem = driver.find_element_by_id('password')
password_elem.send_keys(password)
password_elem.submit()
# Wait indefinitely for 2-factor code
if 'two-factor' in driver.current_url:
print('2-factor code required, go enter it')
while 'two-factor' in driver.current_url:
time.sleep(1)
driver.get('https://github.com/{}'.format(username))
# Get all days that aren't colored gray (no contributions)
contrib_days = driver.find_elements_by_xpath(
"//*[@class='day' and @fill!='#eeeeee']")
for day in contrib_days:
day.click()
# Wait until done loading
WebDriverWait(driver, 10).until(
lambda driver: 'loading' not in driver.find_element_by_css_selector('.contribution-activity').get_attribute('class'))
# Get all contribution URLs
contribs = driver.find_elements_by_css_selector('.contribution-activity a')
for contrib in contribs:
url = contrib.get_attribute('href')
# Only care about repo owner and name from URL
repo_path = urlsplit(url).path
repo = '/'.join(repo_path.split('/')[0:3])
if repo not in repos:
repos.append(repo)
# Have to click something else to remove pop-up on current day
driver.find_element_by_css_selector('.vcard-fullname').click()
driver.quit()
pp(repos)
pythonおよびSeleniumを使用してChromeブラウザでgithubにログインし、投稿ページに移動して、毎日クリックし、投稿からリポジトリ名を取得します。 。このページには1年間のアクティビティのみが表示されるため、このスクリプトで取得できるのはそれだけです。
すべての貢献をリストすることを主張する新しいプロジェクトがあります:
https://github.com/AurelienLourot/github-contribs
また、サービスをサポートして、より詳細なユーザープロファイルを作成します。
APIでそれを行う方法はありませんでした。私が見つけることができる最も近いものは、パブリックユーザーから最新の300イベントを取得することでした(残念ながら、300が上限です)。他のリポジトリへの貢献のためにそれらを並べ替えることができます。
https://developer.github.com/v3/activity/events/#list-public-events-performed-by-a-user
これをGithubにAPIに実装するよう依頼する必要があります。