私たちは、GitHubアカウントのリポジトリにある人のすべてのプロジェクトを表示する必要があるプロジェクトに取り組んでいます。
誰かが提案できますか、特定の人のgit-user名を使用してすべてのgitリポジトリの名前を表示するにはどうすればよいですか?
私たちは、GitHubアカウントのリポジトリにある人のすべてのプロジェクトを表示する必要があるプロジェクトに取り組んでいます。
誰かが提案できますか、特定の人のgit-user名を使用してすべてのgitリポジトリの名前を表示するにはどうすればよいですか?
回答:
これにはgithubapiを使用できます。ヒットhttps://api.github.com/users/USERNAME/repos
すると、ユーザーUSERNAMEの公開リポジトリが一覧表示されます。
GithubAPIを使用します。
/users/:user/repos
これにより、すべてのユーザーの公開リポジトリが提供されます。プライベートリポジトリを見つける必要がある場合は、特定のユーザーとして認証する必要があります。その後、REST呼び出しを使用できます。
/user/repos
すべてのユーザーのリポジトリを検索します。
Pythonでこれを行うには、次のようにします。
USER='AUSER'
API_TOKEN='ATOKEN'
GIT_API_URL='https://api.github.com'
def get_api(url):
try:
request = urllib2.Request(GIT_API_URL + url)
base64string = base64.encodestring('%s/token:%s' % (USER, API_TOKEN)).replace('\n', '')
request.add_header("Authorization", "Basic %s" % base64string)
result = urllib2.urlopen(request)
result.close()
except:
print 'Failed to get api request from %s' % url
関数に渡されるURLは、上記の例のようにRESTURLです。認証する必要がない場合は、メソッドを変更して、Authorizationヘッダーの追加を削除します。その後、単純なGETリクエストを使用して任意のパブリックAPIURLを取得できます。
?per_page=100
して最大量を取得できますが、ユーザーが100を超えるリポジトリを持っている場合は、応答とともに送信next
されるHTTPLink
ヘッダー内のいくつかのURLに従う必要があります。
次のcurl
コマンドを試して、リポジトリを一覧表示します。
GHUSER=CHANGEME; curl "https://api.github.com/users/$GHUSER/repos?per_page=100" | grep -o 'git@[^"]*'
複製されたURLを一覧表示するには、次のコマンドを実行します。
GHUSER=CHANGEME; curl -s "https://api.github.com/users/$GHUSER/repos?per_page=1000" | grep -w clone_url | grep -o '[^"]\+://.\+.git'
プライベートの場合は、次のようにAPIキー(access_token=GITHUB_API_TOKEN
)を追加する必要があります。
curl "https://api.github.com/users/$GHUSER/repos?access_token=$GITHUB_API_TOKEN" | grep -w clone_url
ユーザーが組織の場合は、/orgs/:username/repos
代わりにを使用してすべてのリポジトリを返します。
それらのクローンを作成するには、GitHubからすべてのリポジトリを一度にクローンする方法を参照してください。
per_page=1000
。
-s
オプションを追加して、curl
次のように見苦しいプログレスバーをcurl -s ...
/orgs/:username/repos
、すべてのリポジトリを /users/...
返し、それらの一部を返します。これは確かに奇妙です。ユーザー名は、ユーザーまたは組織の両方として扱うことができます。
jqがインストールされている場合は、次のコマンドを使用して、ユーザーのすべてのパブリックリポジトリを一覧表示できます。
curl -s https://api.github.com/users/<username>/repos | jq '.[]|.html_url'
おそらくjsonpソリューションが必要です:
https://api.github.com/users/[user name]/repos?callback=abc
jQueryを使用する場合:
$.ajax({
url: "https://api.github.com/users/blackmiaool/repos",
jsonp: true,
method: "GET",
dataType: "json",
success: function(res) {
console.log(res)
}
});
<script src="https://ajax.googleapis.com/ajax/libs/jquery/2.1.1/jquery.min.js"></script>
NPMモジュールリポジトリは、一部のユーザーまたはグループのすべてのパブリックリポジトリのJSONを取得します。これはから直接実行できるnpx
ため、何もインストールする必要はありません。組織またはユーザー(ここでは「W3C」)を選択するだけです。
$ npx repos W3C W3Crepos.json
これにより、W3Crepos.jsonというファイルが作成されます。Grepは、たとえばリポジトリのリストをフェッチするのに十分です。
$ grep full_name W3Crepos.json
長所:
短所:
npx
(またはnpm
実際にインストールする場合)。Pythonを使用してGitHubユーザーのすべてのパブリックリポジトリのリストを取得します。
import requests
username = input("Enter the github username:")
request = requests.get('https://api.github.com/users/'+username+'/repos')
json = request.json()
for i in range(0,len(json)):
print("Project Number:",i+1)
print("Project Name:",json[i]['name'])
print("Project URL:",json[i]['svn_url'],"\n")
素晴らしいGraphQLAPIExplorerを使用するオプションがあります。
組織のすべてのアクティブなリポジトリとそれぞれの言語のリストが必要でした。このクエリはまさにそれを行います:
{
organization(login: "ORG_NAME") {
repositories(isFork: false, first: 100, orderBy: {field: UPDATED_AT, direction: DESC}) {
pageInfo {
endCursor
}
nodes {
name
updatedAt
languages(first: 5, orderBy: {field: SIZE, direction: DESC}) {
nodes {
name
}
}
primaryLanguage {
name
}
}
}
}
}
組織のレポを探している場合-
api.github.com/orgs/$NAMEOFORG/repos
例:
curl https://api.github.com/orgs/arduino-libraries/repos
また、ページネーションの問題が発生した場合に備えて、per_pageパラメーターを追加してすべての名前を取得することもできます-
curl https://api.github.com/orgs/arduino-libraries/repos?per_page=100
reposAPIの完全な仕様は次のとおりです。
https://developer.github.com/v3/repos/#list-repositories-for-a-user
GET /users/:username/repos
クエリ文字列パラメータ:
最初の5つは、上記のAPIリンクに記載されています。page
およびのパラメータはper_page
他の場所で文書化されており、完全な説明に役立ちます。
type
(文字列):のいずれかになりますall
、owner
、member
。デフォルト:owner
sort
(文字列):のいずれかになりますcreated
、updated
、pushed
、full_name
。デフォルト:full_name
direction
(文字列):asc
またはのいずれかになりdesc
ます。デフォルト:asc
を使用full_name
する場合、それ以外の場合desc
page
(整数):現在のページper_page
(整数):ページあたりのレコード数これはHTTPGET APIであるため、cURLに加えて、ブラウザーで簡単に試すことができます。例えば:
https://api.github.com/users/grokify/repos?per_page=1&page=2
HTML
<div class="repositories"></div>
JavaScript
// Githubリポジトリ
リポジトリリストを制限したい場合は、の?per_page=3
後に追加できますusername/repos
。
例えば username/repos?per_page=3
//の代わりにusername
、Githubに任意のユーザーのユーザー名を配置できます。
var request = new XMLHttpRequest();
request.open('GET','https://api.github.com/users/username/repos' ,
true)
request.onload = function() {
var data = JSON.parse(this.response);
console.log(data);
var statusHTML = '';
$.each(data, function(i, status){
statusHTML += '<div class="card"> \
<a href=""> \
<h4>' + status.name + '</h4> \
<div class="state"> \
<span class="mr-4"><i class="fa fa-star mr-2"></i>' + status.stargazers_count + '</span> \
<span class="mr-4"><i class="fa fa-code-fork mr-2"></i>' + status.forks_count + '</span> \
</div> \
</a> \
</div>';
});
$('.repositories').html(statusHTML);
}
request.send();
以下のJSコードは、コンソールで使用することを目的としています。
username = "mathieucaroff";
w = window;
Promise.all(Array.from(Array(Math.ceil(1+184/30)).keys()).map(p =>
fetch(`//api.github.com/users/{username}/repos?page=${p}`).then(r => r.json())
)).then(all => {
w.jo = [].concat(...all);
// w.jo.sort();
// w.jof = w.jo.map(x => x.forks);
// w.jow = w.jo.map(x => x.watchers)
})
答えは「/ users /:user / repo」ですが、サーバー上でWebアプリケーションを立ち上げるために使用できるオープンソースプロジェクトでこれを行うすべてのコードがあります。
私は、すべてのリポジトリを一覧表示するGitHubAPIと通信するGit-Captainと呼ばれるGitHubプロジェクトを立ち上げました。
これは、GitHub APIを利用してNode.jsで構築されたオープンソースのウェブアプリケーションであり、多数のGitHubリポジトリ全体でブランチを検索、作成、削除します。
組織またはシングルユーザー向けに設定できます。
私はそれをread-meで設定する方法を段階的に説明しています。
ユーザーの100個の公開リポジトリのURLを取得するには:
$.getJSON("https://api.github.com/users/suhailvs/repos?per_page=100", function(json) {
var resp = '';
$.each(json, function(index, value) {
resp=resp+index + ' ' + value['html_url']+ ' -';
console.log(resp);
});
});
<script src="https://ajax.googleapis.com/ajax/libs/jquery/2.1.1/jquery.min.js"></script>
const request = require('request');
const config = require('config');
router.get('/github/:username', (req, res) => {
try {
const options = {
uri: `https://api.github.com/users/${req.params.username}/repos?per_page=5
&sort=created:asc
&client_id=${config.get('githubClientId')}
&client_secret=${config.get('githubSecret')}`,
method: 'GET',
headers: { 'user-agent': 'node.js' }
};
request(options, (error, response, body) => {
if (error) console.log(error);
if (response.statusCode !== 200) {
res.status(404).json({ msg: 'No Github profile found.' })
}
res.json(JSON.parse(body));
})
} catch (err) {
console.log(err.message);
res.status(500).send('Server Error!');
}
});
?per_page=
developer.github.com