ruby - как разобрать хеш этого LinkedIn? - PullRequest
1 голос
/ 23 марта 2012

Из API LinkedIn я получил этот хэш:

> #<LinkedIn::Mash all=[#<LinkedIn::Mash api_standard_profile_request=#<LinkedIn::Mash headers=#<LinkedIn::Mash
> all=[#<LinkedIn::Mash name="x-li-auth-token" value="name:_nNI">]
> total=1> url="http://api.linkedin.com/v1/people/asdasfga">
> first_name="first name" headline="job position"
> id="id of user" industry="industry"
> last_name="last name" location=#<LinkedIn::Mash
> country=#<LinkedIn::Mash code="en"> name="country">
> site_standard_profile_request=#<LinkedIn::Mash
> url="http://www.linkedin.com/profile?viewProfile=&key=key_number&authToken=_nNI&authType=name&trk=api*a_12346*s_12346*">>]
> total=1>

Уже давно я пытаюсь получить first_name, url и country, но все равно не могу разобрать его Кто-нибудь может мне помочь?

Заранее спасибо

РЕДАКТИРОВАТЬ попытки:

linkedin.connections.each do |item|
   puts item
end

дает

total
1
all
#<LinkedIn::Mash api_standard_profile_request=#<LinkedIn::Mash headers=#<LinkedIn::Mash all=[#<LinkedIn::Mash name=...

Когда я пытался

linkedin.connections.api_standard_profile_request.each do |item|
   puts item
end

тогда я получил

undefined method `each' for nil:NilClass

Ответы [ 2 ]

1 голос
/ 23 марта 2012

Сначала я бы предложил отладить объекты с p вместо puts.Он вызывает inspect для объекта, который вы печатаете, а не to_s, что дает вам гораздо больше информации об объекте.

Далее, ознакомьтесь с документацией по Hashie::Mash.Ваш LinkedIn::Mash объект наследуется от этого класса, но LinkedIn не предоставляет много документации, поэтому вам придется пройтись по цепочке наследования.

Поскольку Hashie::Mash является хеш-подобным объектом, выследует использовать each_pair при итерации по ней для получения каждой пары ключ-значение в хэше, а не по одному ключу или значению за раз:

linkedin.connections.each_pair do |key, value|
  p key
  p value
end

Ничто из этого не отвечает на ваш вопрос, но, надеюсь, вы сможетеполучить больше информации от ваших усилий по отладке.Я предполагаю, что вам нужно сделать что-то вроде этого:

linkedin.connections[0].url

но я не уверен.

1 голос
/ 23 марта 2012

попробуйте это:

linkedin.all.each do |profile|
  puts profile.first_name
end
...