0

フォロワーなどの特定のユーザーに関する統計を取得するために、 Github APIのラッパーであるnode-githubという NodeJS モジュールを使用しています。

var getFollowers = function(user, callback) {
  github.user.getFollowers(user, function(err, res) {
    console.log("getFollowers", res.length);
    callback(err, res);
  });
};

...

getFollwers({user: mike}, function(err, followers) {
  if(err) {
    console.log(err);
  }
  else {
    console.log(followers);
  }
});

どうやら、Github は呼び出し結果を (per_pageパラメーターを介して)最大 100 に制限し、Link ヘッダーを利用して結果の「次のページ」が存在することを知らせます。

私が使用しているモジュールには、Link ヘッダーを処理するための簡単な方法がいくつか用意されているため、解析する必要はありません。基本的に、github.hasNextPage(res)またはgithub.getNextPage(res)(元の呼び出しresから受け取った応答はどこにありますか)を呼び出すことができますgithub.user.getFollowers()

私が探しているのは、関数がすべてのページで構成されるすべての結果を返すようにするための正しいアプローチ/パラダイムです。再帰関数に少し手を出しましたが、うまくいきましたが、もっと良いアプローチがあるかもしれないと感じずにはいられません。

この回答は、標準が普及した場合、Github だけでなく、将来のすべての Link ヘッダー呼び出しを処理するための優れたアプローチとして役立つ可能性があります。

ありがとう!

4

1 に答える 1

0

最後に、再帰に頼りました (再帰の 2 つの大きな弱点を思い出してください: それを維持することと、それを説明すること:))。誰かが興味を持っているなら、これが私の現在のコードです:

var getFollowers = function(callback) {
  var followers = []
  ,  getFollowers = function(error, result) {
      followers = followers.concat(result);
      if(github.hasNextPage(result)) {
        github.getNextPage(result, getFollowers);
      }
      else {
        callback(error, followers);
      }
    };              

  github.user.getFollowers(options, getFollowers);
};

しかし、フォロワーの総数だけが必要な場合は、 getLastPage 関数を使用して最後のページのフォロワー数を取得し、次に

total_num_of_followers = num_of_followers_on_last_page + (total_num_of_pages * results_per_page)

于 2012-12-11T21:59:19.980 に答える