2016-08-04 11 views
1

私はgithubユーザーをランク付けする小さなアプリケーションを構築しています。私はAPIから必要なメンバーを列挙し、すべてのメンバーからURLを取得する関数を作成しました。ここに私のJSです:

var myAppModule = angular.module('myApp', []) 
    .controller('myctrl', ['$scope', '$http', function($scope, $http){ 
     $http({ 
       method: 'GET', 
       url: 'https://api.github.com/orgs/angular'+ '?access_token=MYTOKEN' }) 
       .then(function(response) { 
       $scope.org = response.data; 
      }, function(error) { 
       displayError("Something went wrong"); 
      }); 

     $http({ 
       method: 'GET', 
       url: 'https://api.github.com/orgs/angular/members'+ '?access_token=MYTOKEN' }) 
       .then(function(response) { 
       $scope.members = response.data; 
      }, function(error) { 
       displayError("Something went wrong"); 
      }); 

     $http({ 
       method: 'GET', 
       url: 'https://api.github.com/orgs/angular/members?page=2'+ '&access_token=MYTOKEN' }) 
       .then(function(response) { 
       $scope.members2 = response.data; 
      }, function(error) { 
       displayError("Something went wrong"); 
      }); 

     $http({ 
       method: 'GET', 
       url: 'https://api.github.com/orgs/angular/members?page=3'+'&access_token=MYTOKEN' }) 
       .then(function(response) { 
       $scope.members3 = response.data; 
      }, function(error) { 
       displayError("Something went wrong"); 
      }); 
     $http({ 
       method: 'GET', 
       url: 'https://api.github.com/users' + '?access_token=MYTOKEN' }) 
       .then(function(response) { 
       $scope.user = response.data; 
       $scope.login = response.data["login"]; 
       $scope.memberall = $scope.members.concat($scope.members2, $scope.members3); 
        for(var i = 0; i < $scope.memberall.length; i++) { 
        $http.get("https://api.github.com/users/" + $scope.login + '?access_token=MYTOKEN'); 
       } 
    }); 
    }]); 

私はそれがすべてのURLを取得しようと、コンソールに表示することができますが、私は誰もがこの背後にある理由を知っている"https://api.github.com/users/undefined" .Doesを取得しておきますか?このURLの中にログインを入れて、なぜ "$ scope.login"がうまくいかないのですか?

EDIT: response.dataは、ユーザーの束で、1は次のようになります。

{ 
    "login": "mojombo", 
    "id": 1, 
    "avatar_url": "https://avatars.githubusercontent.com/u/1?v=3", 
    "gravatar_id": "", 
    "url": "https://api.github.com/users/mojombo", 
    "html_url": "https://github.com/mojombo", 
    "followers_url": "https://api.github.com/users/mojombo/followers", 
    "following_url": "https://api.github.com/users/mojombo/following{/other_user}", 
    "gists_url": "https://api.github.com/users/mojombo/gists{/gist_id}", 
    "starred_url": "https://api.github.com/users/mojombo/starred{/owner}{/repo}", 
    "subscriptions_url": "https://api.github.com/users/mojombo/subscriptions", 
    "organizations_url": "https://api.github.com/users/mojombo/orgs", 
    "repos_url": "https://api.github.com/users/mojombo/repos", 
    "events_url": "https://api.github.com/users/mojombo/events{/privacy}", 
    "received_events_url": "https://api.github.com/users/mojombo/received_events", 
    "type": "User", 
    "site_admin": false 
    }, 

私はこのコードが必要になります。

$http({ 
      method: 'GET', 
      url: 'https://api.github.com/users' + '?access_token=21174ee069d6ded5ae3d8ea78d73f15a4cb4890c' }) 
      .then(function(response) { 
      $scope.user = response.data; 
      $scope.memberall = $scope.members.concat($scope.members2, $scope.members3); 
       for(var index = 0; index < $scope.memberall.length; index++) { 
        $http.get("https://api.github.com/users/" + $scope.memberall.login + '?access_token=21174ee069d6ded5ae3d8ea78d73f15a4cb4890c'); 
       } 
      }, function(error) { 
      displayError("Something went wrong"); 
}); 

ユーザのログインや場所を見つけるためにそれらは各角の組織メンバーのためのURLを得るためにURLの中にある。私は答えに近いと思うが、私はまだ "https://api.github.com/users/undefined"をコンソールに取得する。


最終作業コードは次のとおり $ HTTP({ 方法: 'GET'、 URL: '?access_tokenは= mytoken' 'https://api.github.com/users' +}) .then(関数(応答){
$ scope.user = response.data; $ scope.memberall = $ scope.members.concat($ scope.members2、$ scope.members3); for(var index = 0; index < $ scope.memberall.length ; index ++){ $ http.get( "https://api.github.com/users/" + $ scope.memberall [index] .login + '?access_token = mytoken'); } }、関数(エラー){ displayError( "何か問題が発生しました"); });

+0

'$ scope.login'はどこに定義されていますか? – Kyriakos

+0

@Quiriacus:最後に、 '$ scope.memberall'の前に。 – joh04667

+0

'for'ループの2行上にあります。 – summerfreeze

答えて

1

/usersのGithubのAPIによると、response.dataは配列です。 indexは、アクセスするユーザーの指標である

var index = 0; // Get 1st user in the array 
$scope.login = response.data[index].login; 

編集:あなたはその配列を反復処理したいので、次の行うことができます。しかし

$scope.users = response.data; 
for (var index = 0; index < $scope.users.length; index++) { 
    $http.get("https://api.github.com/users/" + $scope.users[index].login + "?access_token=MYTOKEN") 
    .then(function(data) { 
     // do something on success 
    }); 
} 

または

$scope.users = response.data; 
$scope.users.forEach(element, index) { 
    $http.get("https://api.github.com/users/" + element.login + "?access_token=MYTOKEN") 
    .then(function(data) { 
     // do something on success 
    }); 
} 

をAPIドキュメントによると、 GET /users/:usernameが返すデータは既に配列GET /usersに含まれています。あなたがすでに持っているユーザーのデータをループすることができます - 例えばそのJSONデータを印刷:

$scope.users = response.data; 
for (var index = 0; index < $scope.users.length; index++) { 
    console.log("#" + index + " user: " + $scope.users[index]); 
} 

しかし、それはすべてのあなたの最終目標が何であるかに帰着します。

+0

しかし、それは私のURLを取得します。同じユーザー60回 – summerfreeze

+0

すべてのユーザーを繰り返して、[/users/:username](https://developer.github.com/v3/users/#get-a-single-user)にリクエストを送信しようとしていますか?それぞれの? – Kyriakos

+0

はい、それは私がやろうとしているものです。 – summerfreeze

関連する問題