facebook_feed 1.0.1 → 1.0.4

Sign up to get free protection for your applications and to get access to all the features.
@@ -0,0 +1,15 @@
1
+ ---
2
+ !binary "U0hBMQ==":
3
+ metadata.gz: !binary |-
4
+ NTJhYjVjNDAyNTgwZjIwNTc0YWJlN2UxYzJkYjJlNmM5MzdjM2RiZQ==
5
+ data.tar.gz: !binary |-
6
+ MDQzOTMwY2U2NGFmNDEwMjFkYjZjNjAyMzIxNDEwZmNhYzVlMGY3OA==
7
+ !binary "U0hBNTEy":
8
+ metadata.gz: !binary |-
9
+ NTI4MmEyYjFlM2FiYTg4OTM1MThhODE1YmZjNzdmNDZlNjkxOWIyZGU4ZTVh
10
+ ZjJjN2Q2NzkxYjczNTJkN2Q1OThiODFkMjE1MzBiMTRiZWUyZDMzYzAzY2Yy
11
+ N2UyNGM0OGRmZjZkZTdjYTk0MGIyMWU0ZTA0NGY2NWRmNDQzMzc=
12
+ data.tar.gz: !binary |-
13
+ NTRlYTNhOWViYmRmZDU2NmE2M2ZjMTQzNDA4ZTliMWNmZTgyNTg4MzM3YmVk
14
+ MmFkNzhhNGNiNzA2NGU5NTU3ZDFjMzVkMzMyZmViZTQ3ZDU2NTY4OGUyOGE1
15
+ ZGUyMGQ5MjNmM2VhOTI4ZWI4ZjViY2E3YWI5OTMyYWE0Y2QwN2I=
@@ -6,4 +6,5 @@ require 'facebook_feed/feed_downloader'
6
6
 
7
7
  # Errors
8
8
  require 'facebook_feed/errors/feed_error'
9
- require 'facebook_feed/errors/invalid_credentials_error'
9
+ require 'facebook_feed/errors/invalid_credentials_error'
10
+ require 'facebook_feed/errors/invalid_feed_downloader_error'
@@ -0,0 +1,4 @@
1
+ module FacebookFeed
2
+ class InvalidFeedDownloaderError < FeedError
3
+ end
4
+ end
@@ -6,12 +6,19 @@ module FacebookFeed
6
6
  class FeedDownloader
7
7
  attr_reader :access_token, :feed_id
8
8
 
9
+ # Initialize an instance of FeedDownloader like so
10
+ # opts = { :feed_id => 1234567, :access_token => 'ABCDEFGHI' }
11
+ # downloader = FeedDownloader.new(opts)
12
+
9
13
  def initialize(args)
14
+ raise FacebookFeed::InvalidFeedDownloaderError, "FeedDownloader must be instantiated with a Ruby hash" unless args.is_a?(Hash)
15
+ unless (args.keys.length == 2) and args.keys.include?(:feed_id) and args.keys.include?(:access_token)
16
+ raise FacebookFeed::InvalidFeedDownloaderError, "FeedDownloader must be configured with a hash with two keys only: :feed_id and :access_token"
17
+ end
18
+
10
19
  args.each do |k, v|
11
20
  instance_variable_set("@#{k}", v) unless v.nil?
12
21
  end
13
- #feed_id = opts[:feed_id]
14
- #access_token = opts[:access_token]
15
22
 
16
23
  base_url = "https://graph.facebook.com/#{@feed_id}/feed?access_token=#{@access_token}"
17
24
  @feed_urls = []
@@ -43,6 +50,7 @@ module FacebookFeed
43
50
  feed_urls << content_hash["paging"]["next"] unless posts.empty?
44
51
  end
45
52
 
53
+ # Returns a hash object of the JSON returned by the Facebook Graph API
46
54
  def get_content_hash(url)
47
55
  # TO-DO: Write code to authenticate server
48
56
  content = RestClient::Resource.new(
@@ -56,6 +64,28 @@ module FacebookFeed
56
64
  JSON.parse(content)
57
65
  end
58
66
 
67
+ # Takes in a hash object of the JSON returned by the Facebook Graph API
68
+ # and returns an array of hash objects like the following:
69
+ # {
70
+ # :poster => 'Name of message poster',
71
+ # :message => 'Message text',
72
+ # :type => 'Type of post',
73
+ # :created_time => 'UTC time message was created',
74
+ # :updated_time => 'UTC time message was updated',
75
+ # :like_count => 'Number of likes the post has',
76
+ # :comment_count => 'Number of comments the post has',
77
+ # :comments => ['Array of comment data']
78
+ # }
79
+ #
80
+ # A comment datum is itself as a hash as well.
81
+ # It is like the following:
82
+ # {
83
+ # :commenter => 'Name of person who made the comment',
84
+ # :message => 'Comment text',
85
+ # :created_time => 'UTC time comment was made',
86
+ # :like_count => 'Number of likes the comment has'
87
+ # }
88
+
59
89
  def extract_posts(content_hash)
60
90
  posts = content_hash["data"]
61
91
  return [] if posts.nil?
@@ -68,34 +98,29 @@ module FacebookFeed
68
98
  doc[:type] = post["type"]
69
99
  doc[:created_time] = post["created_time"]
70
100
  doc[:updated_time] = post["updated_time"]
71
- unless post["likes"].nil?
72
- doc[:like_count] = post["likes"]["count"]
73
- else
74
- doc[:like_count] = 0
75
- end
101
+ doc[:like_count] = post["likes"].nil? ? 0 : post["likes"]["count"]
76
102
 
77
103
  # Store each comment's sender, time, number of likes, and
78
104
  # the total number of comments for this post
79
- doc[:comment_count] = post["comments"]["count"]
80
-
81
- # Check if data is not nil rather than comment count because
82
- # there's a Facebook bug that doesn't log all comments even
83
- # if comment number > 0
84
- unless post["comments"]["data"].nil?
85
- doc[:comments] = []
86
- comments = post["comments"]["data"]
87
- comments.each do |comment|
88
- comment_data = {}
89
- comment_data[:commenter] = comment["from"]["name"]
90
- comment_data[:message] = comment["message"]
91
- comment_data[:created_time] = comment["created_time"]
92
- if comment["likes"].nil?
93
- comment_data[:like_count] = 0
94
- else
95
- comment_data[:like_count] = comment["likes"]
105
+ unless post["comments"].nil?
106
+ doc[:comment_count] = post["comments"]["count"]
107
+ # Check if data is not nil rather than comment count because
108
+ # there's a Facebook bug that doesn't log all comments even
109
+ # if comment number > 0
110
+ unless post["comments"]["data"].nil?
111
+ doc[:comments] = []
112
+ comments = post["comments"]["data"]
113
+ comments.each do |comment|
114
+ comment_data = {}
115
+ comment_data[:commenter] = comment["from"]["name"]
116
+ comment_data[:message] = comment["message"]
117
+ comment_data[:created_time] = comment["created_time"]
118
+ comment_data[:like_count] = comment["likes"] || 0
119
+ doc[:comments] << comment_data
96
120
  end
97
- doc[:comments] << comment_data
98
121
  end
122
+ else
123
+ doc[:comment_count] = 0
99
124
  end
100
125
  docs << doc
101
126
  end
metadata CHANGED
@@ -1,20 +1,18 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: facebook_feed
3
3
  version: !ruby/object:Gem::Version
4
- version: 1.0.1
5
- prerelease:
4
+ version: 1.0.4
6
5
  platform: ruby
7
6
  authors:
8
7
  - Carson Tang
9
8
  autorequire:
10
9
  bindir: bin
11
10
  cert_chain: []
12
- date: 2012-07-26 00:00:00.000000000 Z
11
+ date: 2013-04-18 00:00:00.000000000 Z
13
12
  dependencies:
14
13
  - !ruby/object:Gem::Dependency
15
14
  name: json
16
15
  requirement: !ruby/object:Gem::Requirement
17
- none: false
18
16
  requirements:
19
17
  - - '='
20
18
  - !ruby/object:Gem::Version
@@ -22,7 +20,6 @@ dependencies:
22
20
  type: :runtime
23
21
  prerelease: false
24
22
  version_requirements: !ruby/object:Gem::Requirement
25
- none: false
26
23
  requirements:
27
24
  - - '='
28
25
  - !ruby/object:Gem::Version
@@ -30,7 +27,6 @@ dependencies:
30
27
  - !ruby/object:Gem::Dependency
31
28
  name: rest-client
32
29
  requirement: !ruby/object:Gem::Requirement
33
- none: false
34
30
  requirements:
35
31
  - - '='
36
32
  - !ruby/object:Gem::Version
@@ -38,7 +34,6 @@ dependencies:
38
34
  type: :runtime
39
35
  prerelease: false
40
36
  version_requirements: !ruby/object:Gem::Requirement
41
- none: false
42
37
  requirements:
43
38
  - - '='
44
39
  - !ruby/object:Gem::Version
@@ -54,28 +49,28 @@ files:
54
49
  - lib/facebook_feed/feed_downloader.rb
55
50
  - lib/facebook_feed/errors/feed_error.rb
56
51
  - lib/facebook_feed/errors/invalid_credentials_error.rb
52
+ - lib/facebook_feed/errors/invalid_feed_downloader_error.rb
57
53
  homepage: https://github.com/carsontang/facebook_feed
58
54
  licenses: []
55
+ metadata: {}
59
56
  post_install_message:
60
57
  rdoc_options: []
61
58
  require_paths:
62
59
  - lib
63
60
  required_ruby_version: !ruby/object:Gem::Requirement
64
- none: false
65
61
  requirements:
66
62
  - - ! '>='
67
63
  - !ruby/object:Gem::Version
68
64
  version: '0'
69
65
  required_rubygems_version: !ruby/object:Gem::Requirement
70
- none: false
71
66
  requirements:
72
67
  - - ! '>='
73
68
  - !ruby/object:Gem::Version
74
69
  version: '0'
75
70
  requirements: []
76
71
  rubyforge_project:
77
- rubygems_version: 1.8.24
72
+ rubygems_version: 2.0.3
78
73
  signing_key:
79
- specification_version: 3
74
+ specification_version: 4
80
75
  summary: Ruby bindings for Facebook feed APIs
81
76
  test_files: []