2012-02-27 5 views
0

Je suis un débutant Rails. Je veux utiliser l'API graphique de Koala.Comment utiliser Koala Facebook Graph API?

Dans mon contrôleur

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

Quand je fais cela, je reçois quelque chose comme ça

{ 
"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" 
} 

Comment afficher ce hachage entier dans la vue dans un bon format?

C'est ce que je l'ai fait de ce que jamais j'appris .. À mon avis

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

Cela se la chose entière convertie en une liste ... Il fonctionne génial si c'est juste une clé .. mais comment travailler avec plusieurs clés et afficher uniquement les informations ... quelque chose comme quand il sort hometown : City, State plutôt que quelque chose comme

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

également pour l'éducation si je dis simplement education[school][name] pour afficher la liste des Les écoles ont assisté?

L'erreur que je reçois est can't convert String into Integer

J'ai aussi essayé de le faire dans mon contrôleur, mais je reçois la même erreur ..

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

Aussi, comment puis-je sauver tous ces à la base de données .. quelque chose comme juste la liste de toutes les écoles .. pas leur id non?

Mise à jour:

La façon dont je l'intention d'enregistrer dans ma base de données est .. permet de dire que pour un modèle utilisateur, je veux enregistrer dans la base de données comme: facebook_id,: facebook_name,: facebook_firstname, ... .,: facebook_hometown .. ici, je veux seulement enregistrer le nom ... quand il s'agit de l'éducation .. Je veux enregistrer .. l'école, la concentration et le type .. Je ne sais pas comment y parvenir ..

Dans l'attente de l'aide! Merci!

+0

êtes-vous accidentellement poster quelqu'un (avec le nom d'utilisateur MyName) Facebook informations? Probablement préférable de passer à un utilisateur de test. – lulalala

Répondre

0

Pour afficher le hachage d'une manière assez imprimée, utilisez la gemme 'awesome_print'. Ajouter ceci à votre Gemfile:

gem 'awesome_print'

Et puis exécutez: bundle install

Et puis, à votre avis, vous pouvez ajouter: <%= ap @hello %>

La question de savoir comment stocker dans la base de données requiert un peu plus d'informations sur ce que vous envisagez de faire, mais vous pouvez au minimum créer un modèle, ajouter un 'facebook_data' (le type serait 'texte') sur ce modèle, puis le sérialiser (ajouter cette ligne près de Le haut de votre fichier modèle: serialize :facebook_data). Vous pouvez ensuite affecter le hachage (@hello dans ce cas) à la propriété "facebook_data" du modèle, puis enregistrer le modèle. Mais vous ne serez pas en mesure d'interroger votre base de données pour les attributs individuels de ces données Facebook très facilement de cette façon.

+0

merci beaucoup pour votre réponse! La façon dont je prévois d'enregistrer dans ma base de données est .. disons pour un modèle d'utilisateur, je veux enregistrer dans la base de données comme: facebook_id,: facebook_name,: facebook_firstname, ....,: facebook_hometown .. ici, je veux seulement enregistrer nom ... quand il s'agit de l'éducation .. Je veux sauver .. l'école, la concentration et le type .. Je n'ai aucune idée sur la façon d'y parvenir .. Serait vraiment reconnaissant si vous pouviez m'aider avec une réponse! – gkolan

+0

bien sûr, c'est juste les trucs normaux des rails. Ainsi, vous créeriez, disons, un modèle d'éducation dans les rails, avec des champs school, concentration et school_type (le nom de champ 'type' est à éviter car il est utilisé en interne par rails): 'rails generate model education school_type: chaîne'. Puis migrez votre db: 'rake db: migrate'. Dans votre code, vous pouvez simplement créer un nouveau modèle Education et lui assigner les valeurs suivantes: 'ed = Education.new (school: @hello ['education'] [0] ['school'])' etc. Rails modèles et associations aussi – bantic

+0

voici un lien vers les guides rails pour les modèles et les associations: http://guides.rubyonrails.org/association_basics.html – bantic

0

vous pouvez juste faire @hello["name"] il vous donnera la valeur du nom

0

Votre objet @hello devrait être de la classe Koala::Facebook::API::GraphCollection ou quelque chose de similaire. Vous devriez être capable de parcourir cet objet, comme votre question le démontre. Quant à ce code à mettre dans votre boucle qui vous aidera à sauvegarder des enregistrements à la base de données, en supposant que votre rails nom de classe modèle utilisateur est User, essayer quelque chose comme ceci:

@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 

Dans le cas des champs de ville natale et de l'éducation , vous allez devoir traverser le hachis rubis de la bonne façon. Voir le docs pour plus d'informations.