【问题标题】:How to use Koala Facebook Graph API?如何使用考拉 Facebook Graph API?
【发布时间】:2012-02-27 22:39:34
【问题描述】:

我是 Rails 新手。我想用考拉的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"=>"somename@somecompany.com", 
"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"]

另外,我怎样才能将所有这些保存到数据库中..就像所有学校的列表..而不是他们的身份证号码?

更新:

我计划保存到我的数据库的方式是.. 假设一个用户模型,我想保存到数据库中:facebook_id, :facebook_name, :facebook_firstname, ...., :facebook_hometown .. 在这里我只想要保存名字……说到教育……我想要保存……学校、注意力和类型……我不知道如何实现这一目标……

期待帮助!谢谢!

【问题讨论】:

  • 您是否不小心发布了某人(用户名为 MyName)的 Facebook 信息?换成一些测试用户可能会更好。

标签: ruby ruby-on-rails-3 facebook-graph-api hash hashmap


【解决方案1】:

要以漂亮的打印方式显示哈希,请使用 gem 'awesome_print'。 将此添加到您的 Gemfile:

gem 'awesome_print'

然后运行: bundle install

然后,在您看来,您可以添加: &lt;%= ap @hello %&gt;

如何在数据库中存储的问题需要更多关于您打算如何使用它的信息,但至少您可以创建一个模型,在其上添加一个“facebook_data”(类型为“text”)模型,然后对其进行序列化(在模型文件顶部附近添加此行:serialize :facebook_data)。然后您可以将散列(在这种情况下为@hello)分配给模型的“facebook_data”属性,然后保存模型。但是您将无法通过这种方式轻松地在数据库中查询此 facebook 数据的各个属性。

【讨论】:

  • 非常感谢您的回答!我计划保存到我的数据库的方式是.. 假设一个用户模型,我想保存到数据库中:facebook_id, :facebook_name, :facebook_firstname, ...., :facebook_hometown .. 在这里我只想保存名字......说到教育......我想节省......学校,注意力和类型......我不知道如何实现这一目标......如果你能帮助我回答,我将非常感激!跨度>
  • 当然,这只是普通的 Rails 模型。因此,您将在 rails 中创建一个 Education 模型,其中包含 school、concentration 和 school_type 字段(最好避免使用“type”字段名称,因为它在 rails 内部使用):rails generate model education school:string concentration:string school_type:string。然后迁移您的数据库:rake db:migrate。在您的代码中,您可以创建一个新的 Education 模型并为其分配这些值:ed = Education.new(school:@hello['education'][0]['school']) 等。您也应该查看 Rails 模型和关联
  • 这里是模型和关联的 Rails 指南的链接:guides.rubyonrails.org/association_basics.html
【解决方案2】:

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

【讨论】:

    【解决方案3】:

    您的@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
    

    对于家乡和教育领域,您只需要以正确的方式遍历 ruby​​ 哈希即可。请参阅docs 了解更多信息。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2014-12-04
      • 2011-04-27
      • 2011-06-07
      • 2011-02-16
      相关资源
      最近更新 更多