2012-02-27 137 views
0

我是Rails的新手。我想使用考拉的Graph API。如何使用考拉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 %> 

这将让转换为一个列表整个事情......它工作真棒,如果它只是一个键..但如何与多个键的作用,仅显示信息...像 当输出hometown : City, State,而不是像

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

也为教育,如果我只是说education[school][name]显示的列表学校出席了?

我得到的错误是can't convert String into Integer

我也试图做这在我的控制,但我得到了同样的错误..

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

此外,我怎么能保存所有这些的数据库 ..就像所有学校的名单..不是他们的ID不是?

更新:

我打算保存到我的数据库是这样的..可以说为用户模式,我要保存到数据库:facebook_id,:facebook_name,:facebook_firstname,... 。::facebook_hometown ..在这里,我只想保存名字...当涉及到教育..我想保存..学校,浓度和类型..我不知道如何实现这个..

期待寻求帮助!谢谢!

+0

你是否意外地发布了某人(用户名为MyName)的Facebook信息?可能更适合更换某些测试用户。 – lulalala 2013-01-17 04:03:18

回答

0

要以漂亮的方式显示散列,请使用宝石'awesome_print'。 添加到您的Gemfile:

gem 'awesome_print'

然后运行: bundle install

,然后在您看来,您可以添加: <%= ap @hello %>

的如何存储的问题数据库需要更多关于你打算如何处理它的信息,但至少你可以创建一个模型,在该模型上添加一个'facebook_data'(类型应该是'text'),然后序列化它(添加这行在附近您的模型文件顶部:serialize :facebook_data)。然后,您可以将散列(本例中为@hello)分配给模型的'facebook_data'属性,然后保存模型。但是你不能很容易地用这种方式查询你的数据库中这个facebook数据的个别属性。

+0

非常感谢您的回答!我打算保存到我的数据库的方式是..让我们说一个用户模型,我想保存到数据库为:facebook_id,:facebook_name,:facebook_firstname,....,::facebook_hometown ..在这里,我只想保存姓名......当涉及到教育..我想保存..学校,集中和类型..我不知道如何实现这一目标..如果你能帮助我一个答案,将非常感激! – gkolan 2012-02-27 23:26:56

+0

当然,这只是正常的轨道模型的东西。所以你可以创建一个带有学校,专注和school_type字段的教育模型('type'字段名称最好避免,因为它在rails内部使用):'rails生成模型教育学校:字符串集中:字符串school_type:string'。然后迁移你的db:'rake db:migrate'。在你的代码中,你可以创建一个新的教育模型,并为它赋值:'ed = Education.new(school:@hello ['education'] [0] ['school'])'等等。 Rails模型和协会也 – bantic 2012-02-28 23:58:52

+0

这里是模型和协会的轨道指南的链接:http://guides.rubyonrails.org/association_basics.html – bantic 2012-02-28 23:59:04

0

你可以做@hello["name"]然后它会给你的名字的价值

0

@hello对象应该是类Koala::Facebook::API::GraphCollection或类似的东西的。你应该能够循环这个对象,就像你的问题所展示的那样。至于什么样的代码把你的循环内,将帮助您记录保存到数据库中,假定Rails的用户模型类名称为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