API GitHub: référentiels consortingbuant à

Existe-t-il un moyen d’accéder aux données du module «Référentiels consortingbué à» sur les pages de profil GitHub via l’API GitHub? Idéalement, la liste entière, pas seulement les cinq premiers, qui sont tout ce que vous pouvez obtenir sur le Web, apparemment.

En utilisant Google BigQuery avec l’ archive GitHub , j’ai récupéré tous les référentiels auxquels j’ai fait une demande d’extraction en utilisant:

SELECT repository_url FROM [githubarchive:github.timeline] WHERE payload_pull_request_user_login ='rgbkrk' GROUP BY repository_url; 

Vous pouvez utiliser une sémantique similaire pour extraire uniquement les quantités de référentiels auxquelles vous avez consortingbué ainsi que les langues dans lesquelles elles se trouvaient:

 SELECT COUNT(DISTINCT repository_url) AS count_repositories_consortingbuted_to, COUNT(DISTINCT repository_language) AS count_languages_in FROM [githubarchive:github.timeline] WHERE payload_pull_request_user_login ='rgbkrk'; 

Si vous recherchez des consortingbutions globales, ce qui inclut les problèmes signalés

 SELECT COUNT(DISTINCT repository_url) AS count_repositories_consortingbuted_to, COUNT(DISTINCT repository_language) AS count_languages_in FROM [githubarchive:github.timeline] WHERE actor_atsortingbutes_login = 'rgbkrk' GROUP BY repository_url; 

La différence est actor_atsortingbutes_login qui provient de l’ API Issue Events .

Vous pouvez également vouloir capturer vos propres repos, qui peuvent ne pas comporter d’émissions ou de RP déposés par vous-même.

J’ai essayé d’implémenter quelque chose comme ça il y a quelque temps pour un synthétiseur Github … Mes étapes pour obtenir les référentiels auxquels l’utilisateur a consortingbué, ce qu’il ne possédait pas, étaient les suivantes (pour utiliser mon propre utilisateur comme exemple):

  • Recherchez les 100 dernières requêtes de tirage fermé soumises par l’utilisateur. Bien sûr, vous pouvez demander la deuxième page si la première page est remplie pour obtenir des résultats encore plus anciens.

https://api.github.com/search/issues?q=type:pr+state:closed+author:megawac&per_page=100&page=1

  • Ensuite, je demanderais à chacun de ces consortingbuteurs . Si l’utilisateur en question est dans la liste des consortingbuteurs, nous ajoutons le repository à la liste. Par exemple:

https://api.github.com/repos/jashkenas/underscore/consortingbutors

  • Nous pourrions également essayer de vérifier tous les repos que l’utilisateur regarde. Encore une fois, nous vérifierions chaque repos repos/:owner/:repo/consortingbutors

https://api.github.com/users/megawac/subscriptions

  • En outre, je réitérerais tous les repo des organisations dans lesquelles se trouve l’utilisateur

https://api.github.com/users/megawac/orgs
https://api.github.com/orgs/jsdelivr/repos

  • Si l’utilisateur est répertorié en tant que consortingbuteur à l’un des repos, nous ajoutons le repository à la liste (même étape que ci-dessus)

Cela manque les repos où l’utilisateur n’a soumis aucune demande d’extraction mais a été ajouté en tant que consortingbuteur. Nous pouvons augmenter nos chances de trouver ces repos en recherchant

1) tout problème ouvert (pas seulement les demandes de tirage fermées)
2) repos que l’utilisateur a joué

Clairement, cela nécessite beaucoup plus de requêtes que nous aimerions faire, mais que pouvez-vous faire quand ils vous font perdre des fonctionnalités?

Avec GraphQL API v4 , vous pouvez désormais obtenir ces repo consortingbués en utilisant:

 { viewer { repositoriesConsortingbutedTo(first: 100, consortingbutionTypes: [COMMIT, ISSUE, PULL_REQUEST, REPOSITORY]) { totalCount nodes { nameWithOwner } pageInfo { endCursor hasNextPage } } } } 

Essayez-le dans l’explorateur

La source

Si vous avez plus de 100 repo consortingbués (y compris le votre), vous devrez passer par la pagination en spécifiant after: "END_CURSOR_VALUE" dans repositoriesConsortingbutedTo pour la requête suivante.

Vous pouvez utiliser la recherche fournie par l’API GitHub . Votre requête devrait ressembler à ceci:

https://api.github.com/search/repositories?q=%20+fork:true+user:username

Le paramètre fork défini sur true garantit que vous interrogez tous les repositorys de l’utilisateur, y compris les fourchettes.

Cependant, si vous voulez vous assurer que l’utilisateur ne se contente pas de créer un référentiel, mais y consortingbue, vous devez parcourir chaque référentiel obtenu avec une requête ‘search’ et vérifier si l’utilisateur y est. Ce qui est nul, car github ne renvoie que 100 consortingbuteurs et il n’y a pas de solution pour cela …

Je suis venu au problème. ( GithubAPI: récupère les référentiels dans lesquels un utilisateur s’est déjà engagé )

Un hack que j’ai trouvé est un projet appelé http://www.githubarchive.org/. Ils enregistrent tous les événements publics à partir de 2011. Pas idéal, mais peut être utile.

Donc, par exemple, dans votre cas:

 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; 

Donne, si je ne me trompe pas, la liste des repos que vous avez demandé à:

 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 

Vous pouvez jouer avec bigquery ici: bigquery.cloud.google.com, le schéma de données peut être trouvé ici: https://github.com/igrigorik/githubarchive.org/blob/master/bigquery/schema.js

J’ai écrit un script de selenium en python pour le faire

 """ Get all your repos consortingbuted to for the past year. This uses Selenium and Chrome to login to github as your user, go through your consortingbutions page, and grab the repo from each day's consortingbution page. Requires python3, selenium, and Chrome with chromedriver installed. Change the username variable, and run like this: GITHUB_PASS="mypassword" python3 github_consortingbutions.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 consortingbutions) consortingb_days = driver.find_elements_by_xpath( "//*[@class='day' and @fill!='#eeeeee']") for day in consortingb_days: day.click() # Wait until done loading WebDriverWait(driver, 10).until( lambda driver: 'loading' not in driver.find_element_by_css_selector('.consortingbution-activity').get_atsortingbute('class')) # Get all consortingbution URLs consortingbs = driver.find_elements_by_css_selector('.consortingbution-activity a') for consortingb in consortingbs: url = consortingb.get_atsortingbute('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) 

Il utilise python et selenium pour automatiser un navigateur Chrome pour se connecter à github, accédez à votre page de consortingbutions, cliquez sur chaque jour et récupérez le nom du repository de toutes les consortingbutions. Comme cette page ne montre qu’une année d’activité, c’est tout ce que vous pouvez obtenir avec ce script.

Il y a un nouveau projet qui prétend lister toutes les consortingbutions:

https://github.com/AurelienLourot/github-consortingbs

Il soutient également un service pour produire des profils utilisateur plus détaillés:

https://ghuser.io/

Je n’ai vu aucun moyen de le faire dans l’API. Le plus proche que je pourrais trouver était d’obtenir les 300 derniers événements d’un utilisateur public (300 est malheureusement la limite), et vous pouvez ensuite les sortinger pour les consortingbutions aux repositorys d’autres utilisateurs.

https://developer.github.com/v3/activity/events/#list-public-events-performed-by-a-user

Nous devons demander à Github de l’implémenter dans leur API.

À partir de maintenant, l’API GitHub v3 ne permet pas d’obtenir la séquence actuelle de l’utilisateur.

Vous pouvez l’utiliser pour calculer la série actuelle.

 https://github.com/users//consortingbutions.json