2017-07-11 7 views
2

Ich möchte die Anzahl der Pull-Anfragen und Probleme für eine besonders GitHub rep erhalten. Im Moment ist die Methode, die ich benutze, wirklich tollpatschig.Octokit GitHub API

Mit dem octokit Juwel und den folgenden Code:

# Builds data that is sent to the API 
def request_params 
    data = { } 

    # labels example: "bug,invalid,question" 
    data["labels"] = labels.present? ? labels : "" 

    # filter example: "assigned" "created" "mentioned" "subscribed" "all" 
    data["filter"] = filter 

    # state example: "open" "closed" "all" 
    data["state"] = state 

    return data 
end 


Octokit.auto_paginate = true 
github = Octokit::Client.new(access_token: oauth_token) 
github.list_issues("#{user}/#{repository}", request_params).count 

Die empfangenen Daten ist extrem groß, so dass ihre sehr ineficient in Bezug auf Speicher. Ich brauche keine Daten über die Probleme nur, wie viele es gibt, X-Probleme (basierend auf den Filtern/Staat/Etiketten).

Ich dachte an eine Lösung, konnte sie aber nicht implementieren. Grundsätzlich: 1 Anfrage, um den Header zu bekommen, in der Kopfzeile sollte es einen Link zur letzten Seite geben. Dann machen Sie eine weitere Anfrage auf die letzte Seite und überprüfen Sie, wie viele Probleme es gibt. Dann können wir berechnen:

count = (number of pages * (issues-per-page - 1)) + issues-on-last-page 

Aber ich habe nicht herausgefunden, wie Request-Header Informationen aus octokit authentifiziert Clients zu erhalten. Wenn es einen einfachen Weg gibt, es ohne Octokit zu machen, werde ich es gerne benutzen.

Hinweis: Ich möchte dieses Problem beheben, da die Anzahl der Pull-Anforderungen ziemlich hoch ist und der obige Code R14-Fehler auf Heroku generiert.

Vielen Dank!

Antwort

3

Ich glaube, ein einfacher Weg ist, die GitHub API zu verwenden und die Anzahl der PRs einzuschränken, die auf einer Seite angezeigt werden sollen, indem Sie den per_page Filter verwenden. Zum Beispiel: Um alle PRs des Repos OneGet/Oneget zu finden, die Sie verwenden können .. https://api.github.com/search/issues?q=repo:OneGet/oneget+type:pr&per_page=1. Die JSON-Antwort hat das Feld "total_count", das die Anzahl der PRs angibt. Und die Antwort wird relativ leicht sein, da nur ein Problem aufgeführt wird. Ref: Search Issues

+1

Vielen Dank für die Antwort! Ich habe genau dieselbe Lösung gefunden, funktioniert perfekt. –