Получение комментариев с сайта с использованием Rails и Koala - PullRequest
0 голосов
/ 04 января 2012

Я пытаюсь получить комментарии с разных новостных сайтов и провести с ними некоторую обработку. Например, https://graph.facebook.com/comments/?ids=http://techcrunch.com/2012/01/04/mechanical-engineering-community-grabcad-grabs-4-million/

У меня есть комментарии, но я не знаю, как сохранить их в базе данных mysql (или любой другой базе данных), используя rails и koala.

Любая помощь / советы высоко ценится

Ответы [ 2 ]

0 голосов
/ 19 мая 2012

Проверьте код ниже:

url_commented_on = "http://techcrunch.com/2012/01/04/mechanical-engineering-community-grabcad-grabs-4-million/"
fb_comments_url = "https://graph.facebook.com/comments/?ids="+url_commented_on
fb_comments_json = open(fb_comments_url).read
fb_comments_data = ActiveSupport::JSON.decode(fb_comments_json)

# If you want to play around, this gets you the first comment
fb_comments_data[url_commented_on]["comments"]["data"].first
# and this gets you the first comment's message
fb_comments_data[url_commented_on]["comments"]["data"].first["message"]

# You could save them in your db like this:
fb_comments = fb_comments_data[url_commented_on]["comments"]["data"]
fb_comments.each do |fb_comment|
  # Your comment Model here
  fb_commenter_name = fb_comment["from"]["name"]
  fb_comment_message = fb_comment["message"]
  fb_comment_creation_date = fb_comment["created_time"]
  # Your comment Model
  comment = CommentModel.new
  comment.author = fb_commenter_name
  comment.comment_text = fb_comment_message
  # Don't overwrite your own "created_at" attribute
  # Instead, use an additional column in the db for storing the date fb gives you
  comment.fb_created_at = fb_comment_creation_date 
  comment.save!
end
0 голосов
/ 04 января 2012

Вы можете проанализировать JSON, используя Ruby

data = ActiveSupport::JSON.decode(json_data)

, а затем просто перебрать данные и сохранить их в базе данных, используя ActiveRecord

data["data"].each do |comment|
  Comment.create!(:message => comment.message, ...)
end
...