facebook graph apiのgem koalaを使って友達一覧を取得する件2

先日ブログでver1.0にしてからfacebookの友達の数を取得するようにしていましたが、会社の同僚の方から「これで出来るよ」と教えてもらったので、再度書きます。

修正方法はズバリ

@api = Koala::Facebook::API.new('ACCESS_TOKEN')
p  @api.get_object('me')
p @api.get_object('/v2.1/me/friends').raw_response

これで取得した結果summaryというキーで「total_count: 10」というのが取れるので、これで友達数が取得出来ます。

ちなみにテストは、こういう感じになりました。

describe 'FacebookVerification API v1' do
  
  let(:mock_facebook_obj) do
    double(Koala::Facebook::API::GraphCollection)
  end

  describe 'POST /facebook_verification' do
    context 'f~~~の場合' do
      before do
        stub_graph = double(Koala::Facebook::API)
     stub_graph.should_receive(:get_object).with('/v2.1/me/friends').and_return(mock_facebook_obj)
        mock_facebook_obj.should_receive(:raw_response).and_return(
       mock_facebook_obj.should_receive(:raw_response).and_return(
          { data: [
            { name: 'Test Facebook_user1', id: '529521869' }.deep_stringify_keys,
            { name: 'Test Facebook_user2', id: '632979490' }.deep_stringify_keys,
            { name: 'Test Facebook_user3', id: '641652697' }.deep_stringify_keys,
            { name: 'Test Facebook_user4', id: '641652699' }.deep_stringify_keys,
            { name: 'Test Facebook_user5', id: '641652622' }.deep_stringify_keys,
            { name: 'Test Facebook_user6', id: '641652555' }.deep_stringify_keys,
            { name: 'Test Facebook_user7', id: '641651222' }.deep_stringify_keys,
            { name: 'Test Facebook_user8', id: '641797357' }.deep_stringify_keys,
            { name: 'Test Facebook_user9', id: '641619294' }.deep_stringify_keys,
            { name: 'Test Facebook_user10', id: '64193487' }.deep_stringify_keys],
            paging: { next: 'https://graph.facebook.com/v2.1/720075131399186/friends?access_token=aaaa' }.deep_stringify_keys,
            summary: { total_count: 10 }.deep_stringify_keys
          }.deep_stringify_keys
        )
        Koala::Facebook::API.stub(:new).and_return(stub_graph)
      end

      context 'facebook_access_tokenが送られた場合' do
        let(:path) { "https://hogehgoe/fuga}" }

        before do
          params = { facebook_access_token: 'access_token' }
          post path, params
        end

        it '200 OK が返ってくる' do
          expect(response.status).to eq(200)
        end

        it 'responseにokという文字が変える' do
          expect(json[:status]).to eq('ok')
        end

        it 'current_userのfacebook_verifiedがtrueになる' do
          current_user.reload
          expect(current_user.facebook_verified).to be_true
        end
      end
    end
  end
end