কোনও ব্যক্তির সমস্ত গিটহাব সংগ্রহস্থলের তালিকা কীভাবে পুনরুদ্ধার করবেন?


90

আমরা এমন একটি প্রকল্পে কাজ করছি যেখানে আমাদের গিটহাব অ্যাকাউন্টে কোনও ব্যক্তির তার সংগ্রহস্থলের সমস্ত প্রকল্প প্রদর্শন করতে হবে।

যে কেউ পরামর্শ দিতে পারে, আমি কীভাবে কোনও বিশেষ ব্যক্তির গিট-ব্যবহারকারীর নাম ব্যবহার করে সমস্ত গিট সংগ্রহস্থলের নাম প্রদর্শন করতে পারি?

উত্তর:


63

আপনি এর জন্য গিথুব এপি ব্যবহার করতে পারেন । আঘাত https://api.github.com/users/USERNAME/reposব্যবহারকারীর জন্য পাবলিক ভান্ডার তালিকা প্রস্তুত করা যাবে USERNAME এর



4
api.github.com/users/USERNAME/repos?page=1 ফলাফলের প্রথম পৃষ্ঠা দেয়। (1 থেকে 2 পরিবর্তন করুন এবং তেমন, ডিফল্ট প্রতি পৃষ্ঠায় 30 ফলাফল)
স্টিভেক

39

গিথুব এপিআই ব্যবহার করুন :

/users/:user/repos

এটি আপনাকে ব্যবহারকারীর সমস্ত পাবলিক ভান্ডার দেবে। আপনার যদি ব্যক্তিগত সংগ্রহস্থলগুলি সন্ধান করতে হয় তবে আপনাকে অবশ্যই নির্দিষ্ট ব্যবহারকারী হিসাবে প্রমাণীকরণ করতে হবে। তারপরে আপনি আরআরএসটি কলটি ব্যবহার করতে পারেন:

/user/repos

এটি সব ব্যবহারকারীর Repos।

পাইথনে এটি করার জন্য এর মতো কিছু করুন:

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 পেতে পারেন।


27
এটি কেবলমাত্র ফলাফল সেটটির প্রথম "পৃষ্ঠা" দেবে যা ডিফল্টরূপে 30 আইটেমে সেট করা হয়। আপনি ?per_page=100সর্বোচ্চ পরিমাণ পাওয়ার জন্য ব্যবহার করতে পারেন তবে কোনও ব্যবহারকারীর যদি শতাধিক রেপো থাকে তবে আপনাকে nextএইচটিটিপি Linkশিরোনামের বেশ কয়েকটি ইউআরএল অনুসরণ করতে হবে প্রতিক্রিয়া সহ।
পথেরকা

4
ধন্যবাদ @ পাদারকা, আমি যা খুঁজছিলাম ঠিক তাই!
aknuds1

33

curlসংগ্রহস্থলগুলির তালিকা করতে নিম্নলিখিত কমান্ডটি ব্যবহার করে দেখুন:

GHUSER=CHANGEME; curl "https://api.github.com/users/$GHUSER/repos?per_page=100" | grep -o 'git@[^"]*'

ক্লোন করা ইউআরএল তালিকা করতে, চালান:

GHUSER=CHANGEME; curl -s "https://api.github.com/users/$GHUSER/repos?per_page=1000" | grep -w clone_url | grep -o '[^"]\+://.\+.git'

যদি এটি ব্যক্তিগত হয় তবে আপনার এপিআই কী ( 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 পরিবর্তে সমস্ত সংগ্রহস্থল ফেরত করুন।

তাদের ক্লোন করতে, দেখুন: গিটহাব থেকে কীভাবে একবারে সমস্ত রেডিও ক্লোন করবেন?

আরও দেখুন: কীভাবে কমান্ড লাইন ব্যবহার করে ব্যক্তিগত রেপো থেকে গিটহাব রিলিজ ডাউনলোড করবেন


9
এটি কেবল প্রথম 100 টি সংগ্রহস্থল দেখায়, নির্বিশেষে per_page=1000
jm666

4
এই -scurlcurl -s ...
কদর্য

4
@ Jm666 বলেছেন, সর্বোচ্চ পৃষ্ঠার আকার 100 2nd পৃষ্ঠা দেখতে হয়, একটি করুন: কার্ল " api.github.com/users/$USER/repos?per_page=100 \ & পৃষ্ঠা = 2"
rscohn2

4
ব্যক্তিগত উদাহরণ উদাহরণ সহকারে কাজ করবে না, / ব্যবহারকারী / "বহুবচনে" কেবল পাবলিক रिपোগুলি প্রদান করে। আপনাকে api.github.com/user/repos এর সাথে যেতে হবে এবং ব্যক্তিগতগুলি পেতে অনুরোধের সাথে টোকেন যুক্ত করতে হবে।
LeandroCR

4
@ টেনরব রহস্যের সমাধান হয়েছে, ব্যবহারকারী একটি org তাই /orgs/:username/reposসমস্ত রেপো /users/...ফিরিয়ে দিন , তার একটি অংশ ফেরৎ দিন, এটি সত্যই অদ্ভুত। ব্যবহারকারীর নামটি ব্যবহারকারী বা একটি org উভয় হিসাবে বিবেচনা করা যেতে পারে।
আইওএস লার্নার 1 ই

11

আপনি যদি জিকিউ ইনস্টল করে থাকেন তবে ব্যবহারকারীর সমস্ত পাবলিক রেপো তালিকাবদ্ধ করতে নিম্নলিখিত কমান্ডটি ব্যবহার করতে পারেন

curl -s https://api.github.com/users/<username>/repos | jq '.[]|.html_url'

6

আপনার সম্ভবত একটি জাসনপ সমাধান দরকার:

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>


3

এনপিএম মডিউল রেপোস কিছু ব্যবহারকারী বা গোষ্ঠীর জন্য সমস্ত পাবলিক রেপোর জন্য জেএসনকে ধরে। আপনি এটিকে সরাসরি চালাতে পারেন npxতাই আপনাকে কেবল একটি org বা ব্যবহারকারী বাছাই করার দরকার নেই ("W3C" এখানে):

$ npx repos W3C W3Crepos.json

এটি W3Crepos.json নামে একটি ফাইল তৈরি করবে। গ্রেপ যথেষ্ট ভাল উদাহরণস্বরূপ repos এর তালিকা আনতে:

$ grep full_name W3Crepos.json

পেশাদার:

  • 100 টিরও বেশি রেপো সহ কাজ করে (এই প্রশ্নের অনেক উত্তর দেয় না)।
  • টাইপ করার মতো বেশি কিছু নয়।

কনস:

  • প্রয়োজন npx(অথবা npmআপনি যদি এটি বাস্তবের জন্য ইনস্টল করতে চান)।

3

পাইথন ব্যবহার করে গিটহাব ব্যবহারকারীর সমস্ত পাবলিক স্টোরের তালিকা পুনরুদ্ধার করুন:

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")

রেফারেন্স


4
এটি কাজ করছে না (সম্ভবত এটি পুরানো এপিআই সংস্করণের জন্য)
ওজাইচেক

4
হ্যাঁ, একটি ছোট পরিবর্তন আছে। আমি আমার উত্তরটি সম্পাদনা করেছি এবং এখন এটি ভালভাবে কাজ করে।
দর্শনা 99

3

দারুণ গ্রাফকিউএল এপিআই এক্সপ্লোরার ব্যবহারের এখন একটি বিকল্প রয়েছে ।

আমি আমার সমস্ত org এর সক্রিয় রেপোগুলির একটি তালিকা তাদের নিজ নিজ ভাষার সাথে চেয়েছিলাম। এই ক্যোয়ারী ঠিক এটি করে:

{
  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
        }
      }
    }
  }
}


3

যদি কোনও সংস্থার ভাণ্ডার খুঁজছেন-

api.github.com/orgs/$NAMEOFORG/repos

উদাহরণ:

curl https://api.github.com/orgs/arduino-libraries/repos

এছাড়াও পৃষ্ঠাগুলির কোনও সমস্যা দেখা দিলে আপনি সমস্ত নাম পেতে পার_পেজের প্যারামিটার যুক্ত করতে পারেন-

curl https://api.github.com/orgs/arduino-libraries/repos?per_page=100

3

রেপোস এপিআইয়ের জন্য এখানে একটি সম্পূর্ণ অনুমান দেওয়া আছে:

https://developer.github.com/v3/repos/#list-repositories-for-a-user

GET /users/:username/repos

স্ট্রিং প্যারামিটারগুলি অনুসন্ধান করুন:

প্রথম 5 টি উপরের API লিঙ্কে নথিভুক্ত করা হয়েছে। এর জন্য প্যারামিটারগুলি pageএবং per_pageযা অন্য কোথাও নথিভুক্ত এবং সম্পূর্ণ বিবরণে কার্যকর।

  • type(STRING): এক হতে পারে all, owner, member। ডিফল্ট:owner
  • sort(STRING): এক হতে পারে created, updated, pushed, full_name। ডিফল্ট:full_name
  • direction(স্ট্রিং): এক ascবা হতে পারে desc। ডিফল্ট: অন্যথায় ascব্যবহার করার সময়full_namedesc
  • page (পূর্ণসংখ্যা): বর্তমান পৃষ্ঠা
  • per_page (পূর্ণসংখ্যা): প্রতি পৃষ্ঠায় রেকর্ডের সংখ্যা

যেহেতু এটি একটি এইচটিটিপি জিইটি এপিআই, সিআরএল ছাড়াও, আপনি এটি ব্রাউজারেও চেষ্টা করে দেখতে পারেন। উদাহরণ স্বরূপ:

https://api.github.com/users/grokify/repos?per_page=1&page=2


2

এইচটিএমএল

<div class="repositories"></div>

জাভাস্ক্রিপ্ট

// গিথুব রেপোস

আপনি যদি সংগ্রহস্থলগুলির তালিকা সীমাবদ্ধ করতে চান তবে আপনি কেবল ?per_page=3পরে যুক্ত করতে পারেন username/repos

যেমন username/repos?per_page=3

/ username/ এর পরিবর্তে আপনি যে কোনও ব্যক্তির ব্যবহারকারীর নাম গিথুব এ রাখতে পারেন।

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();

1

পেজিং JSON

নীচের জেএস কোডটি একটি কনসোলে ব্যবহৃত হতে বোঝানো হয়েছে।

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)
})

1

উত্তরটি "/ ব্যবহারকারী /: ব্যবহারকারী / রেপো", তবে আমার কাছে এমন সমস্ত কোড রয়েছে যা এটি একটি ওপেন-সোর্স প্রকল্পে করে যা আপনি কোনও সার্ভারে একটি ওয়েব-অ্যাপ্লিকেশন দাঁড়াতে ব্যবহার করতে পারেন।

আমি গিট-ক্যাপ্টেন নামে একটি গিটহাব প্রজেক্ট দাঁড়িয়েছিলাম যা গিটহাব এপিআইয়ের সাথে যোগাযোগ করে যা সমস্ত ভান্ডার তালিকাভুক্ত করে।

এটি নোড.জেএসএস দিয়ে গিটহাব এপিআই ব্যবহার করে অসংখ্য গিটহাব সংগ্রহস্থল জুড়ে একটি শাখা খুঁজে পেতে, তৈরি করতে এবং মুছে ফেলার জন্য নির্মিত একটি ওপেন-সোর্স ওয়েব-অ্যাপ্লিকেশন।

এটি সংস্থা বা একক ব্যবহারকারীর জন্য সেটআপ করা যেতে পারে।

আমার কাছে এটি কীভাবে সেট আপ করতে হবে তা ধাপে ধাপে রয়েছে read


1

ব্যবহারকারীর 100 টি পাবলিক ভান্ডারগুলির ইউআরএল পেতে:

$.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>


1
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!');
    }
});

4
আরও তথ্যের জন্য গিট ডকস-> ডেভেলপার.
বিশাল কঙ্ক

4
তাই আপনাকে স্বাগতম! দয়া করে চেক করুন এই পোস্ট করার আগে ... আপনি একটি উত্তর পোস্ট কখন এবং কিছু, আপনার পোঁদ অনুকূল এবং, দয়া করে দেখানোর শুধু পোস্ট কোড চি, এটি একটি সামান্য বিট ব্যাখ্যা।
ডেভিড গার্সিয়া বোডেগো 26'19
আমাদের সাইট ব্যবহার করে, আপনি স্বীকার করেছেন যে আপনি আমাদের কুকি নীতি এবং গোপনীয়তা নীতিটি পড়েছেন এবং বুঝতে পেরেছেন ।
Licensed under cc by-sa 3.0 with attribution required.