2012-02-27 6 views
0

나는 Rails 초보자입니다. 코알라의 그래프 API를 사용하고 싶습니다. 나는이 작업을 수행 할 때 내 컨트롤러에서Koala Facebook Graph API를 사용하는 방법은 무엇입니까?

@graph = Koala::Facebook::API.new('myFacebookAccessToken') 
@hello = @graph.get_object("my.Name") 

, 나는 이런 일이

{ 
"id"=>"123456", 
"name"=>"First Middle Last", 
"first_name"=>"First", 
"middle_name"=>"Middle", 
"last_name"=>"Last", 
"link"=>"http://www.facebook.com/MyName", 
"username"=>"my.name", 
"birthday"=>"12/12/1212", 
"hometown"=>{"id"=>"115200305133358163", "name"=>"City, State"}, "location"=>{"id"=>"1054648928202133335", "name"=>"City, State"}, 
"bio"=>"This is my awesome Bio.", 
"quotes"=>"I am the master of my fate; I am the captain of my soul. - William Ernest Henley\r\n\r\n"Don't go around saying the world owes you a living. The world owes you nothing. It was here first.\" - Mark Twain", 
"work"=>[{"employer"=>{"id"=>"100751133333", "name"=>"Company1"}, "position"=>{"id"=>"105763693332790962", "name"=>"Position1"}, "start_date"=>"2010-08", "end_date"=>"2011-07"}], 
"sports"=>[{"id"=>"104019549633137", "name"=>"Sport1"}, {"id"=>"103992339636529", "name"=>"Sport2"}], 
"favorite_teams"=>[{"id"=>"105467226133353743", "name"=>"Fav1"}, {"id"=>"19031343444432369133", "name"=>"Fav2"}, {"id"=>"98027790139333", "name"=>"Fav3"}, {"id"=>"104055132963393331", "name"=>"Fav4"}, {"id"=>"191744431437533310", "name"=>"Fav5"}], 
"favorite_athletes"=>[{"id"=>"10836600585799922", "name"=>"Fava1"}, {"id"=>"18995689436787722", "name"=>"Fava2"}, {"id"=>"11156342219404022", "name"=>"Fava4"}, {"id"=>"11169998212279347", "name"=>"Fava5"}, {"id"=>"122326564475039", "name"=>"Fava6"}], 
"inspirational_people"=>[{"id"=>"16383141733798", "name"=>"Fava7"}, {"id"=>"113529011990793335", "name"=>"fava8"}, {"id"=>"112032333138809855566", "name"=>"Fava9"}, {"id"=>"10810367588423324", "name"=>"Fava10"}], 
"education"=>[{"school"=>{"id"=>"13478880321332322233663", "name"=>"School1"}, "type"=>"High School", "with"=>[{"id"=>"1401052755", "name"=>"Friend1"}]}, {"school"=>{"id"=>"11482777188037224", "name"=>"School2"}, "year"=>{"id"=>"138383069535219", "name"=>"2005"}, "type"=>"High School"}, {"school"=>{"id"=>"10604484633093514", "name"=>"School3"}, "year"=>{"id"=>"142963519060927", "name"=>"2010"}, "concentration"=>[{"id"=>"10407695629335773", "name"=>"c1"}], "type"=>"College"}, {"school"=>{"id"=>"22030497466330708", "name"=>"School4"}, "degree"=>{"id"=>"19233130157477979", "name"=>"c3"}, "year"=>{"id"=>"201638419856163", "name"=>"2011"}, "type"=>"Graduate School"}], 
"gender"=>"male", 
"interested_in"=>["female"], 
"relationship_status"=>"Single", 
"religion"=>"Religion1", 
"political"=>"Political1", 
"email"=>"[email protected]", 
"timezone"=>-8, 
"locale"=>"en_US", 
"languages"=>[{"id"=>"10605952233759137", "name"=>"English"}, {"id"=>"10337617475934611", "name"=>"L2"}, {"id"=>"11296944428713061", "name"=>"L3"}], 
"verified"=>true, 
"updated_time"=>"2012-02-24T04:18:05+0000" 
} 

가 어떻게 좋은 형식으로보기에이 전체 해시를 보여 있지? 내 생각에 이것은 내가 지금까지 내가 배운 것과 무슨 짓을

.. 는

<% @hello.each do |key, value| %> 
<li><%=h "#{key.to_s} : #{value.to_s}" %></li> 
<% end %> 

이리스트로 변환 전체 일을 얻을 것이다 ... 그것은 굉장 경우는 하나의 키를 작동합니다 .. 하지만 여러 개의 키와 함께 일을하고 나는 단지의 목록을 표시 education[school][name]을 말한다면 그것은 교육 또한

hometown : {"id"=>"115200305133358163", "name"=>"City, State"} 

같은보다는 hometown : City, State를 출력 할 때 같은 정보 만 ... 뭔가를 표시하는 방법 학교에 다녔습니까?

내가 오류가 나는 또한 내 컨트롤러에서이 작업을 수행하려고 can't convert String into Integer

,하지만 난 같은 오류가 .. 또한

@fav_teams = @hello["favorite_teams"]["name"] 

, 어떻게이 모든이를 저장 할 수 데이터베이스 .. 모든 학교의 목록과 같은 것 .. 이드가 아닌가요?

업데이트 : facebook_id, : facebook_name :

내 데이터베이스로 저장할 계획 방법은 .. 내가 같은 데이터베이스에 저장하려는 사용자 모델 말할 수 facebook_firstname을 ... ., : facebook_hometown .. 여기서는 이름 만 저장하고 싶습니다. 교육에 관해서는 .. 학교를 집중하고 집중하고 싶습니다. 이걸 어떻게 성취해야할지 모르겠군요.

앞으로 도움을 기대합니다! 감사!

+0

실수로 누군가 (MyName 사용자 이름 사용) 페이스 북 정보를 게시하고 있습니까? 아마도 일부 테스트 사용자로 변경하는 것이 좋습니다. – lulalala

답변

0

해시를보기 좋게 표시하려면 gem 'awesome_print'을 사용하십시오.

gem 'awesome_print'

을 다음 실행 : 당신의 Gemfile이 추가보기에, 다음 bundle install

을, 당신은 추가 할 수 있습니다 <%= ap @hello %>

에 저장하는 방법에 대한 질문을 데이터베이스는 당신이 무엇을 할 계획인지에 대한 좀 더 많은 정보를 필요로하지만 최소한 모델을 생성하고 그 모델에 'facebook_data'(타입은 'text'가 될 것입니다)를 추가 한 다음 그것을 직렬화합니다 (이 라인을 추가하십시오) 근처에 귀하의 모델 파일 상단 : serialize :facebook_data). 그런 다음 모델의 'facebook_data'속성에 해시 (@hello)를 할당 한 다음 모델을 저장할 수 있습니다. 그러나이 방법으로이 페이스 북 데이터의 개별 속성에 대한 데이터베이스를 매우 쉽게 쿼리 할 수는 없습니다.그냥 @hello["name"] 할 수

+0

답장을 보내 주셔서 감사합니다. 내 데이터베이스에 저장하는 방법은 .. 사용자 모델에 대해 말할 수 있습니다. 데이터베이스에 저장하려는 : facebook_id, : facebook_name, : facebook_firstname, .... : facebook_hometown .. 여기 저장하고 싶습니다. 이름 ... 교육에 관해서 ... 나는 학교, 농도 및 유형을 저장하고 싶다. 나는 이것을 달성하는 방법에 관하여 모른다. 당신이 응답으로 저를 도울 수 있던 경우에 진짜로 고맙게 여길 텐데! – gkolan

+0

확실한 레일 모델입니다. 그래서 학교, 집중, school_type 필드 (예 : 'type'필드 이름은 레일에 의해 내부적으로 사용되므로 피할 수 있음)를 사용하여 레일스로 교육 모델을 만들 수 있습니다. '레일스 모델 교육 학교 생성 : 문자열 집중 : string school_type : 문자열'. 그런 다음 db :'rake db : migrate'을 마이그레이션하십시오. 코드에서 새로운 교육 모델을 만들고 그 값을 할당 할 수 있습니다 :'ed = Education.new (school : @hello [ 'education'] [0] [ 'school'])'등등. 레일 모델과 연관도 – bantic

+0

여기 모델과 협회의 레일 가이드 링크가 있습니다 : http://guides.rubyonrails.org/association_basics.html – bantic

0

는 당신에게

0

귀하의 @hello 객체 클래스 Koala::Facebook::API::GraphCollection 또는 뭔가 비슷한이어야 이름의 가치를 제공 할 것입니다. 당신은 당신의 질문처럼이 객체를 반복 할 수 있어야합니다. 어떤 코드에 관해서는, 당신의 레일 사용자 모델 클래스 이름은 User 가정하고, 데이터베이스에 레코드를 저장 도움이 될 것입니다 귀하의 루프 안에 넣어이 같은 시도 : 고향과 교육 분야의 경우

@hello.each do |h| 
    u = User.where(:facebook_id => h["id"]).first_or_initialize 
    u.update_attributes(
    :name => h["name"], 
    :first_name => h["first_name"], 
    :hometown_city => h["hometown"]["name"].split(",").first, 
    :hometown_state => h["hometown"]["name"].split(",").last.strip 
    # ETC, ETC 
) 
end 

을 , 당신은 루비 해시를 적절한 방법으로 횡단해야 할 것입니다. 자세한 내용은 docs을 참조하십시오.

관련 문제