1

Google People APIを使用して Rails 5 アプリにユーザーの連絡先を入力していますが、この問題はこの特定の API に固有のものではないと思います。

つまり、API を正常に呼び出して、すべての Google 連絡先を含む JSON 応答を取得できます。

これは、コントローラー アクションの 1 つで API に対して行っている呼び出しです。

@response = HTTParty.get('https://people.googleapis.com/v1/people/me/connections?requestMask.includeField=person.names%2Cperson.emailAddresses%2Cperson.phoneNumbers&access_token=' + @token,
:headers =>{'Content-Type' => 'application/json'} )

次に、同じコントローラー ファイルで、JSON 応答を解析します。

@parsed_response = JSON.parse(@response.body)

これにより、次のような出力が得られます (共有のために単純化しました)。

{"connections"=>
  [{
    "resourceName"=>"people/c6173361945899061031", "etag"=>"FB4d1LieX4k=",                                  
     "names"=>[{"metadata"=>{"primary"=>true, "source"=>{"type"=>"CONTACT", "id"=>"55ac2f1281953f27"}}, "displayName"=>"John Smith", "familyName"=>"Smith", "givenName"=>"John", "displayNameLastFirst"=>"Smith, John"}],
     "phoneNumbers"=>[{"metadata"=>{"primary"=>true, "source"=>{"type"=>"CONTACT", "id"=>"55ac2f1281953f27"}}, "value"=>"+18083416177", "canonicalForm"=>"+18083416177", "type"=>"mobile", "formattedType"=>"Mobile"}]
  }],
"nextPageToken"=>"CGQQm7Ohg", "nextSyncToken"=>"CPvkoIP1KhIBMRiGE"}

上記の解析された JSON には、私の連絡先の 1 つの情報が含まれていますが、実際のファイルでは、「connections」配列に各連絡先のハッシュが含まれています。私がやろうとしているのは、「接続」配列全体を反復処理して、すべての連絡先の名前のリストを表示することです。完成したコントローラ アクションは次のようになります。

controller.rb

@response = HTTParty.get('https://people.googleapis.com/v1/people/me/connections?requestMask.includeField=person.names%2Cperson.emailAddresses%2Cperson.phoneNumbers&access_token=' + @token,
:headers =>{'Content-Type' => 'application/json'} )

@parsed_response = JSON.parse(@response.body)

@google_contacts = @parsed_response['connections']

これで、連絡先ごとにハッシュの配列 (@google_contacts) が作成されます。次に、私のビュー内で、そのハッシュを繰り返し処理して、各連絡先の「displayName」フィールドを引き出します。

view.html.erb

<% @google_contacts.each do |contact| %>
  <%= contact['names'][0]['displayName'] %>
<% end %>

結果は何ですか。しかし、nil:NilClass のエラーメッセージに対して素敵な未定義のメソッド `[]' があります。[0]['displayName']を削除すると、ビューには各連絡先の 'names' 配列の完全な内容が表示されます (例):

[{"metadata"=>{"primary"=>true, "source"=>{"type"=>"CONTACT", "id"=>"55ac2f1281953f27"}}, "displayName"=>"John Smith", "familyName"=>"Smith", "givenName"=>"John", "displayNameLastFirst"=>"Smith, John"}]

配列内の最初の連絡先を抽出しようとすると、次のように問題なく動作します。

<% @google_contacts[0,1].each do |contact| %>
  <%= contact['names'][0]['displayName'] %>
<% end %>

エラーがスローされることなく、配列内の複数の連絡先の連絡先のdisplayNameを正常に抽出できません。

私は何を間違っていますか?

4

0 に答える 0