social_feed_agregator 0.0.3 → 0.0.4

Sign up to get free protection for your applications and to get access to all the features.
checksums.yaml CHANGED
@@ -1,7 +1,7 @@
1
1
  ---
2
2
  SHA1:
3
- metadata.gz: c4fc4e3a81aaea74d2dad456924b6b2a69ad9ef1
4
- data.tar.gz: 3317654c2c16a115b8c4b3c0149e34588abc4070
3
+ metadata.gz: c25a7863ae0347bf1137b9e8d944e8cdbb57df83
4
+ data.tar.gz: 183bf16b93688b987c07ce1b1fe0e66768af5366
5
5
  SHA512:
6
- metadata.gz: 3be704d71ae0522f84e4533b48173eb5544b0e39cc9d8c57dab75785363e0a3ac8e30938b29285c4db61b0ee1c2adbba72d81b08e0b196709f7415e5d38703fe
7
- data.tar.gz: d708b5279a83931fdebff98007f79acdcce61f26637dba650284a68873f22c4b2abe6d4ae47f1e815c1052e6db7408135813786fb9e35d2e2c186c4882620a44
6
+ metadata.gz: 79c9bb597064ca084f47e1669e0e157d37b91fc189484d380bdb041fe10ab5754f2e82015ab0d2d4948dc56c5a8ee6d885e764a3a87ca7c4b9905c78f8ee4a7e
7
+ data.tar.gz: d226b91b2dacae93ea545b6f871f0b0a7b355fdd6aeeb5e84328c1c8d56ee2d6f52d3931ddc9f8e97a087cb86ec755ef122a399262cc344d49306c21b31a2093
data/README.md CHANGED
@@ -18,7 +18,7 @@ Or install it yourself as:
18
18
 
19
19
  ## Usage
20
20
 
21
- ## 1. Create reader for some social service (available Facebook, Twitter, Pinterest)
21
+ ## 1. Create reader for some social service (available Facebook, Twitter, Pinterest, GooglePlus)
22
22
 
23
23
  fb = SFA::Facebook.new ({
24
24
  facebook_app_id: "FACEBOOK_APP_ID",
@@ -38,6 +38,11 @@ Or install it yourself as:
38
38
  pinterest_user_name: "PINTEREST_USER_NAME"
39
39
  })
40
40
 
41
+ gp = SFA::Googleplus.new ({
42
+ googleplus_user_id: "GOOGLEPLUS_USER_ID",
43
+ googleplus_api_key: "GOOGLEPLUS_API_KEY"
44
+ })
45
+
41
46
 
42
47
  ## 2. Get data
43
48
 
@@ -58,6 +63,11 @@ Or install it yourself as:
58
63
  res << feed
59
64
  end
60
65
 
66
+ # Default 25
67
+ gp.get_feeds(count: 2) do |feed|
68
+ res << feed
69
+ end
70
+
61
71
  res.sort!{|a, b| a.created_at <=> b.created_at}
62
72
 
63
73
  res.to_json
@@ -9,58 +9,60 @@ module SocialFeedAgregator
9
9
 
10
10
  def initialize(options={})
11
11
  super(options)
12
- options.replace(SocialFeedAgregator.default_options.merge(options))
12
+ options.replace(SFA.default_options.merge(options))
13
13
 
14
14
  @name = options[:facebook_user_name]
15
15
  @app_id = options[:facebook_app_id]
16
16
  @app_secret = options[:facebook_app_secret]
17
- end
17
+ end
18
18
 
19
19
  def get_feeds(options={})
20
20
  super(options)
21
21
  @name = options[:name] if options[:name]
22
- count = options[:count] || 25
23
-
24
- oauth = Koala::Facebook::OAuth.new(@app_id, @app_secret)
25
- graph = Koala::Facebook::API.new oauth.get_app_access_token
26
- posts = graph.get_connections(@name, "posts")
22
+ count = options[:count] || 25
27
23
 
28
24
  feeds, i, count_per_request, items = [], 0, 25, 0
29
25
 
30
26
  parts = (count.to_f / count_per_request).ceil
31
27
 
28
+ oauth = Koala::Facebook::OAuth.new(@app_id, @app_secret)
29
+ graph = Koala::Facebook::API.new oauth.get_app_access_token
30
+ posts = graph.get_connections(@name, "posts")
31
+
32
32
  begin
33
33
  i+=1
34
34
  posts.each do |post|
35
35
  items+=1
36
36
  break if items > count
37
37
 
38
- feed = Feed.new({
39
- feed_type: :facebook,
40
- feed_id: post['id'],
41
-
42
- user_id: post['from']['id'],
43
- user_name: post['from']['name'],
44
-
45
- permalink: "http://www.facebook.com/#{post['id'].gsub('_', '/posts/')}",
46
- description: post['description'],
47
-
48
- name: post['name'],
49
- picture_url: post['picture'],
50
- link: post['link'],
51
- caption: post['caption'],
52
- story: post['story'],
53
- message: post['message'],
54
- created_at: DateTime.parse(post["created_time"]),
55
- type: post['type']
56
- })
38
+ feed = fill_feed post
57
39
 
58
- block_given? ? yield(feed) : feeds << feed
59
-
40
+ block_given? ? yield(feed) : feeds << feed
60
41
  end
61
42
  end while (posts = posts.next_page) && (i < parts)
62
43
  feeds
63
44
  end
45
+
46
+ private
47
+
48
+ def fill_feed(post)
49
+ Feed.new(
50
+ feed_type: :facebook,
51
+ feed_id: post['id'],
52
+ user_id: post['from']['id'],
53
+ user_name: post['from']['name'],
54
+ permalink: "http://www.facebook.com/#{post['id'].gsub('_', '/posts/')}",
55
+ description: post['description'],
56
+ name: post['name'],
57
+ picture_url: post['picture'],
58
+ link: post['link'],
59
+ caption: post['caption'],
60
+ message: post['message'],
61
+ created_at: DateTime.parse(post["created_time"]),
62
+ type: post['type']
63
+ )
64
+ end
65
+
64
66
  end
65
67
  Facebook = FacebookReader
66
68
  end
@@ -10,7 +10,7 @@ module SocialFeedAgregator
10
10
  :picture_url,
11
11
  :name,
12
12
  :link,
13
- :story,
13
+ # :story,
14
14
  :message, # status message
15
15
  :caption,
16
16
  :created_at,
@@ -29,11 +29,12 @@ module SocialFeedAgregator
29
29
 
30
30
  @name = options[:name]
31
31
  @link = options[:link]
32
- @story = options[:story]
32
+ # @story = options[:story]
33
33
  @message = options[:message]
34
34
  @caption = options[:caption]
35
35
  @created_at = options[:created_at]
36
36
  @type = options[:type]
37
- end
37
+ end
38
+
38
39
  end
39
40
  end
@@ -0,0 +1,83 @@
1
+ require "social_feed_agregator/base_reader"
2
+ require "social_feed_agregator/feed"
3
+
4
+ module SocialFeedAgregator
5
+ class GoogleplusReader < BaseReader
6
+
7
+ attr_accessor :api_key, :user_id
8
+
9
+ def initialize(options={})
10
+ super(options)
11
+ options.replace(SFA.default_options.merge(options))
12
+
13
+ @user_id = options[:googleplus_user_id]
14
+ @api_key = options[:googleplus_api_key]
15
+ end
16
+
17
+ def get_feeds(options={})
18
+ super(options)
19
+ @user_id = options[:user_id] if options[:user_id]
20
+ count = options[:count] || 25
21
+
22
+ feeds, i, count_per_request, items = [], 0, 100, 0
23
+
24
+ opts = {count: count < count_per_request ? count : count_per_request}
25
+
26
+ parts = (count.to_f / count_per_request).ceil
27
+
28
+ url = "https://www.googleapis.com/plus/v1/people/#{@user_id}/activities/public?key=#{@api_key}&maxResults=#{opts[:count]}"
29
+
30
+ begin
31
+ i+=1
32
+ next_query = ""
33
+ data = JSON.parse( RestClient.get("#{url}#{next_query}") )
34
+
35
+ data['items'].each do |post|
36
+ items+=1
37
+ break if items > count
38
+
39
+ feed = fill_feed post
40
+
41
+ block_given? ? yield(feed) : feeds << feed
42
+ end
43
+ next_query = "&pageToken=#{data['nextPageToken']}"
44
+
45
+ end while (data['items'].count > 0 ) && (i < parts)
46
+ end
47
+
48
+ private
49
+ def fill_feed(post)
50
+ picture_url, link, caption = "", "", ""
51
+
52
+ if atts = post['object']['attachments']
53
+ if atts.count > 0
54
+ attach = atts.first
55
+ picture_url = attach['fullImage']['url'] if attach['fullImage']
56
+ link = attach['url']
57
+ caption = attach['displayName']
58
+ end
59
+ end
60
+
61
+ Feed.new(
62
+ feed_type: :googleplus,
63
+ feed_id: post['id'],
64
+
65
+ user_id: post['actor']['id'],
66
+ user_name: post['actor']['displayName'],
67
+
68
+ permalink: post['url'],
69
+ description: post['object']['content'],
70
+
71
+ name: post['title'],
72
+
73
+ picture_url: picture_url,
74
+ link: link,
75
+ caption: caption,
76
+
77
+ created_at: DateTime.parse(post['published']),
78
+ type: post['object']['objectType']
79
+ )
80
+ end
81
+ end
82
+ Googleplus = GoogleplusReader
83
+ end
@@ -8,42 +8,49 @@ module SocialFeedAgregator
8
8
 
9
9
  def initialize(options={})
10
10
  super(options)
11
- options.replace(SocialFeedAgregator.default_options.merge(options))
11
+ options.replace(SFA.default_options.merge(options))
12
12
  @name = options[:pinterest_user_name]
13
13
  end
14
14
 
15
15
  def get_feeds(options={})
16
16
  super(options)
17
- @name = options[:name] if options[:name]
17
+ @name = options[:name] if options[:name]
18
18
  count = options[:count] || 25
19
+ feeds = []
20
+ items = 0
19
21
 
20
- feeds, items = [], 0
21
-
22
- doc = Nokogiri::XML(RestClient.get("http://pinterest.com/#{@name}/feed.rss?page=2"))
22
+ doc = Nokogiri::XML( RestClient.get("http://pinterest.com/#{@name}/feed.rss") )
23
23
 
24
24
  doc.xpath('//item').each do |item|
25
25
  items += 1
26
26
  break if items > count
27
- desc = item.xpath('description').inner_text.match(/src="(\S+)".+<p>(.+)<\/p>/)
28
-
29
- feed = Feed.new ({
30
- feed_type: :pinterest,
31
- feed_id: item.xpath('guid').inner_text.match(/\d+/)[0].to_s,
32
-
33
- user_id: @name,
34
- user_name: @name,
35
-
36
- name: item.xpath('title').inner_text,
37
- permalink: item.xpath('link').inner_text,
38
- picture_url: desc[1],
39
- description: desc[2],
40
- created_at: DateTime.parse(item.xpath('pubDate').inner_text), #.strftime("%Y-%m-%d %H:%M:%S")
41
- })
42
27
 
28
+ feed = fill_feed item
29
+
43
30
  block_given? ? yield(feed) : feeds << feed
44
31
  end
45
32
  feeds
46
33
  end
34
+
35
+
36
+ private
37
+ def fill_feed(item)
38
+ desc = item.xpath('description').inner_text.match(/src="(\S+)".+<p>(.+)<\/p>/)
39
+
40
+ feed = Feed.new(
41
+ feed_type: :pinterest,
42
+ feed_id: item.xpath('guid').inner_text.match(/\d+/)[0].to_s,
43
+
44
+ user_id: @name,
45
+ user_name: @name,
46
+
47
+ name: item.xpath('title').inner_text,
48
+ permalink: item.xpath('link').inner_text,
49
+ picture_url: desc[1],
50
+ description: desc[2],
51
+ created_at: DateTime.parse(item.xpath('pubDate').inner_text), #.strftime("%Y-%m-%d %H:%M:%S")
52
+ )
53
+ end
47
54
  end
48
55
  Pinterest = PinterestReader
49
56
  end
@@ -34,8 +34,7 @@ module SocialFeedAgregator
34
34
  config.oauth_token = @oauth_token
35
35
  config.oauth_token_secret = @token_secret
36
36
  end
37
-
38
-
37
+
39
38
  feeds, i = [], 0
40
39
  count_per_request = 200 #::Twitter::REST::API::Timelines::MAX_TWEETS_PER_REQUEST
41
40
 
@@ -47,37 +46,8 @@ module SocialFeedAgregator
47
46
  i+=1
48
47
 
49
48
  statuses.each do |status|
50
- tweet_type, picture_url, link = 'status', '', ''
51
-
52
- if status.entities?
53
- if status.media.any?
54
- photo_entity = status.media.first
55
- tweet_type = 'photo'
56
- picture_url = photo_entity.media_url
57
- end
58
-
59
- if status.urls.any?
60
- url_entity = status.urls.first
61
- tweet_type = 'link'
62
- link = url_entity.url
63
- end
64
- end
65
-
66
- feed = Feed.new({
67
- feed_type: :twitter,
68
- feed_id: status.id.to_s,
69
-
70
- user_id: status.user.id,
71
- user_name: status.user.screen_name,
72
-
73
- permalink: "https://twitter.com/#{status.user.screen_name}/status/#{status.id}", #status.url,
74
- message: status.text,
75
- created_at: status.created_at,
76
-
77
- type: tweet_type,
78
- picture_url: picture_url,
79
- link: link
80
- })
49
+
50
+ feed = fill_feed status
81
51
 
82
52
  block_given? ? yield(feed) : feeds << feed
83
53
 
@@ -88,7 +58,42 @@ module SocialFeedAgregator
88
58
  end
89
59
  feeds
90
60
  end
91
-
61
+
62
+
63
+ private
64
+ def fill_feed(status)
65
+ tweet_type, picture_url, link = 'status', '', ''
66
+
67
+ if status.entities?
68
+ if status.media.any?
69
+ photo_entity = status.media.first
70
+ tweet_type = 'photo'
71
+ picture_url = photo_entity.media_url
72
+ end
73
+
74
+ if status.urls.any?
75
+ url_entity = status.urls.first
76
+ tweet_type = 'link'
77
+ link = url_entity.url
78
+ end
79
+ end
80
+
81
+ feed = Feed.new(
82
+ feed_type: :twitter,
83
+ feed_id: status.id.to_s,
84
+
85
+ user_id: status.user.id,
86
+ user_name: status.user.screen_name,
87
+
88
+ permalink: "https://twitter.com/#{status.user.screen_name}/status/#{status.id}", #status.url,
89
+ message: status.text,
90
+ created_at: status.created_at,
91
+
92
+ type: tweet_type,
93
+ picture_url: picture_url,
94
+ link: link
95
+ )
96
+ end
92
97
  end
93
98
  Twitter = TwitterReader
94
99
  end
@@ -1,3 +1,3 @@
1
1
  module SocialFeedAgregator
2
- VERSION = "0.0.3"
2
+ VERSION = "0.0.4"
3
3
  end
@@ -2,6 +2,7 @@ require "social_feed_agregator/version"
2
2
  require "social_feed_agregator/facebook_reader"
3
3
  require "social_feed_agregator/twitter_reader"
4
4
  require "social_feed_agregator/pinterest_reader"
5
+ require "social_feed_agregator/googleplus_reader"
5
6
 
6
7
  module SocialFeedAgregator
7
8
  @default_options = {}
@@ -9,5 +10,5 @@ module SocialFeedAgregator
9
10
 
10
11
  class Exception < ::Exception; end
11
12
  end
12
-
13
+
13
14
  SFA=SocialFeedAgregator
@@ -25,4 +25,5 @@ Gem::Specification.new do |spec|
25
25
  spec.add_dependency("twitter", "~> 4.6.2")
26
26
  spec.add_dependency("rest-client", "1.6.7")
27
27
  spec.add_dependency("nokogiri", "~> 1.6.0")
28
+ spec.add_dependency("json", "~> 1.8.0")
28
29
  end
metadata CHANGED
@@ -1,14 +1,14 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: social_feed_agregator
3
3
  version: !ruby/object:Gem::Version
4
- version: 0.0.3
4
+ version: 0.0.4
5
5
  platform: ruby
6
6
  authors:
7
7
  - Eugene Sobolev
8
8
  autorequire:
9
9
  bindir: bin
10
10
  cert_chain: []
11
- date: 2013-09-06 00:00:00.000000000 Z
11
+ date: 2013-09-10 00:00:00.000000000 Z
12
12
  dependencies:
13
13
  - !ruby/object:Gem::Dependency
14
14
  name: bundler
@@ -94,6 +94,20 @@ dependencies:
94
94
  - - ~>
95
95
  - !ruby/object:Gem::Version
96
96
  version: 1.6.0
97
+ - !ruby/object:Gem::Dependency
98
+ name: json
99
+ requirement: !ruby/object:Gem::Requirement
100
+ requirements:
101
+ - - ~>
102
+ - !ruby/object:Gem::Version
103
+ version: 1.8.0
104
+ type: :runtime
105
+ prerelease: false
106
+ version_requirements: !ruby/object:Gem::Requirement
107
+ requirements:
108
+ - - ~>
109
+ - !ruby/object:Gem::Version
110
+ version: 1.8.0
97
111
  description: Social Feed Agregator
98
112
  email:
99
113
  - eus@appfellas.co
@@ -110,6 +124,7 @@ files:
110
124
  - lib/social_feed_agregator/base_reader.rb
111
125
  - lib/social_feed_agregator/facebook_reader.rb
112
126
  - lib/social_feed_agregator/feed.rb
127
+ - lib/social_feed_agregator/googleplus_reader.rb
113
128
  - lib/social_feed_agregator/pinterest_reader.rb
114
129
  - lib/social_feed_agregator/twitter_reader.rb
115
130
  - lib/social_feed_agregator/version.rb