social_shares 0.0.3 → 0.1.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
data/README.md CHANGED
@@ -6,30 +6,44 @@ Supported networks:
6
6
  * [facebook](http://www.facebook.com/)
7
7
  * [google plus](https://plus.google.com)
8
8
  * [twitter](https://twitter.com/)
9
+ * [reddit](http://www.reddit.com/)
10
+ * [linkedin](https://www.linkedin.com/)
11
+ * [pinterest](http://www.pinterest.com/)
12
+ * [stumbleupon](http://www.stumbleupon.com/)
9
13
  * [vkontakte](http://vkontakte.ru/)
10
14
  * [mail.ru](http://mail.ru/)
11
15
  * [odnoklassniki](http://www.odnoklassniki.ru/)
12
16
 
13
17
  Usage
14
18
  -----
15
- Currently all methods can raise exception when there is any error with network access.
16
19
  ```ruby
17
20
  :000 > require 'social_shares'
18
21
  => true
19
22
  :000 > SocialShares.supported_networks
20
- => [:vkontakte, :facebook, :google, :twitter, :mail_ru, :odnoklassniki]
23
+ => [:vkontakte, :facebook, :google, :twitter, :mail_ru, :odnoklassniki, :reddit, :linkedin, :pinterest, :stumbleupon]
21
24
  :000 > url = 'http://www.apple.com/'
22
- => "https://www.ruby-toolbox.com/"
25
+ => "http://www.apple.com/"
23
26
  :000 > SocialShares.facebook url
24
27
  => 394927
25
28
  :000 > SocialShares.google url
26
29
  => 28289
27
30
  :000 > SocialShares.twitter url
28
31
  => 1164675
32
+ # in case of exception it will return nil value
33
+ :000 > SocialShares.twitter url
34
+ => nil
35
+ # but this method will raise it
36
+ :000 > SocialShares.twitter! url
37
+ => RestClient::RequestTimeout: Request Timeout
29
38
  :000 > SocialShares.all url
30
- => {:vkontakte=>43044, :facebook=>394927, :google=>28289, :twitter=>1164675, :mail_ru=>105, :odnoklassniki=>62}
31
- :000 > SocialShares.selected url, %w(facebook google)
32
- => {:facebook=>394927, :google=>28289}
39
+ => {:vkontakte=>44, :facebook=>399027, :google=>28346, :twitter=>1836, :mail_ru=>37, :odnoklassniki=>1, :reddit=>2361, :linkedin=>nil, :pinterest=>21011, :stumbleupon=>43035}
40
+ # same for #all! method, it will not handle exceptions
41
+ :000 > SocialShares.all! url
42
+ => RestClient::RequestTimeout: Request Timeout
43
+ :000 > SocialShares.selected url, %w(facebook google linkedin)
44
+ => {:facebook=>394927, :google=>28289, :linkedin=>nil}
45
+ :000 > SocialShares.selected! url, %w(facebook google linkedin)
46
+ => RestClient::RequestTimeout: Request Timeout
33
47
  # Total sum of sharings in selected networks
34
48
  :000 > SocialShares.total url, %w(facebook google)
35
49
  => 423216
data/lib/social_shares.rb CHANGED
@@ -8,10 +8,25 @@ require 'social_shares/twitter'
8
8
  require 'social_shares/vkontakte'
9
9
  require 'social_shares/mail_ru'
10
10
  require 'social_shares/odnoklassniki'
11
+ require 'social_shares/reddit'
12
+ require 'social_shares/linkedin'
13
+ require 'social_shares/pinterest'
14
+ require 'social_shares/stumbleupon'
11
15
 
12
16
  module SocialShares
13
17
  class << self
14
- SUPPORTED_NETWORKS = [:vkontakte, :facebook, :google, :twitter, :mail_ru, :odnoklassniki]
18
+ SUPPORTED_NETWORKS = [
19
+ :vkontakte,
20
+ :facebook,
21
+ :google,
22
+ :twitter,
23
+ :mail_ru,
24
+ :odnoklassniki,
25
+ :reddit,
26
+ :linkedin,
27
+ :pinterest,
28
+ :stumbleupon
29
+ ]
15
30
 
16
31
  def supported_networks
17
32
  SUPPORTED_NETWORKS
@@ -22,6 +37,11 @@ module SocialShares
22
37
  class_name = network_name.to_s.split('_').map(&:capitalize).join
23
38
  SocialShares.const_get(class_name).new(url).shares
24
39
  end
40
+
41
+ define_method("#{network_name}!") do |url|
42
+ class_name = network_name.to_s.split('_').map(&:capitalize).join
43
+ SocialShares.const_get(class_name).new(url).shares!
44
+ end
25
45
  end
26
46
 
27
47
  def selected(url, selected_networks)
@@ -31,16 +51,27 @@ module SocialShares
31
51
  end
32
52
  end
33
53
 
54
+ def selected!(url, selected_networks)
55
+ filtered_networks(selected_networks).inject({}) do |result, network_name|
56
+ result[network_name] = self.send("#{network_name}!", url)
57
+ result
58
+ end
59
+ end
60
+
34
61
  def all(url)
35
62
  selected(url, SUPPORTED_NETWORKS)
36
63
  end
37
64
 
65
+ def all!(url)
66
+ selected!(url, SUPPORTED_NETWORKS)
67
+ end
68
+
38
69
  def total(url, selected_networks = SUPPORTED_NETWORKS)
39
- selected(url, selected_networks).values.reduce(:+)
70
+ selected!(url, selected_networks).values.reduce(:+)
40
71
  end
41
72
 
42
73
  def has_any?(url, selected_networks = SUPPORTED_NETWORKS)
43
- !filtered_networks(selected_networks).find{|n| self.send(n, url) > 0}.nil?
74
+ !filtered_networks(selected_networks).find{|n| self.send("#{n}!", url) > 0}.nil?
44
75
  end
45
76
 
46
77
  private
@@ -7,6 +7,13 @@ module SocialShares
7
7
  end
8
8
 
9
9
  def shares
10
+ shares!
11
+ rescue => e
12
+ puts "[#{self.class.name}] Error during requesting sharings of '#{checked_url}': #{e}"
13
+ nil
14
+ end
15
+
16
+ def shares!
10
17
  raise NotImplementedError
11
18
  end
12
19
  end
@@ -1,6 +1,6 @@
1
1
  module SocialShares
2
2
  class Facebook < Base
3
- def shares
3
+ def shares!
4
4
  response = RestClient.get(url)
5
5
  JSON.parse(response)["shares"] || 0
6
6
  end
@@ -1,7 +1,7 @@
1
1
  module SocialShares
2
2
  class Google < Base
3
- def shares
4
- response = RestClient.post(url, Oj.dump(params), content_type: :json, accept: :json)
3
+ def shares!
4
+ response = RestClient.post(url, JSON.dump(params), content_type: :json, accept: :json)
5
5
  JSON.parse(response)[0]["result"]["metadata"]["globalCounts"]["count"].to_i
6
6
  end
7
7
 
@@ -0,0 +1,14 @@
1
+ module SocialShares
2
+ class Linkedin < Base
3
+ def shares!
4
+ response = RestClient.get(url)
5
+ JSON.parse(response)['count']
6
+ end
7
+
8
+ private
9
+
10
+ def url
11
+ "http://www.linkedin.com/countserv/count/share?format=json&url=#{checked_url}"
12
+ end
13
+ end
14
+ end
@@ -1,6 +1,6 @@
1
1
  module SocialShares
2
2
  class MailRu < Base
3
- def shares
3
+ def shares!
4
4
  response["share_mm"].to_i
5
5
  end
6
6
 
@@ -1,6 +1,6 @@
1
1
  module SocialShares
2
2
  class Odnoklassniki < MailRu
3
- def shares
3
+ def shares!
4
4
  response["share_ok"].to_i
5
5
  end
6
6
  end
@@ -0,0 +1,14 @@
1
+ module SocialShares
2
+ class Pinterest < Base
3
+ def shares!
4
+ response = RestClient.get(url)
5
+ /count":(\d+)/.match(response)[-1].to_i
6
+ end
7
+
8
+ private
9
+
10
+ def url
11
+ "http://api.pinterest.com/v1/urls/count.json?url=#{checked_url}"
12
+ end
13
+ end
14
+ end
@@ -0,0 +1,15 @@
1
+ module SocialShares
2
+ class Reddit < Base
3
+ def shares!
4
+ response = RestClient.get(url)
5
+ children_data = JSON.parse(response)['data']['children']
6
+ children_data.map{|c| c['data']['score']}.reduce(:+) || 0
7
+ end
8
+
9
+ private
10
+
11
+ def url
12
+ "http://www.reddit.com/api/info.json?url=#{checked_url}"
13
+ end
14
+ end
15
+ end
@@ -0,0 +1,14 @@
1
+ module SocialShares
2
+ class Stumbleupon < Base
3
+ def shares!
4
+ response = RestClient.get(url)
5
+ JSON.parse(response)['result']['views'] || 0
6
+ end
7
+
8
+ private
9
+
10
+ def url
11
+ "http://www.stumbleupon.com/services/1.01/badge.getinfo?url=#{checked_url}"
12
+ end
13
+ end
14
+ end
@@ -1,6 +1,6 @@
1
1
  module SocialShares
2
2
  class Twitter < Base
3
- def shares
3
+ def shares!
4
4
  response = RestClient.get(url)
5
5
  JSON.parse(response)["count"]
6
6
  end
@@ -1,3 +1,3 @@
1
1
  module SocialShares
2
- VERSION = '0.0.3'
2
+ VERSION = '0.1.0'
3
3
  end
@@ -1,6 +1,6 @@
1
1
  module SocialShares
2
2
  class Vkontakte < Base
3
- def shares
3
+ def shares!
4
4
  response = RestClient.get(url)
5
5
  /VK.Share.count\(1,\s(\d+)\)/.match(response)[1].to_i
6
6
  end
@@ -9,7 +9,7 @@ Gem::Specification.new do |spec|
9
9
  spec.authors = ['Timur Kozmenko']
10
10
  spec.email = ['timraell@gmail.com']
11
11
  spec.summary = %q{Check how many times url was shared in social networks.}
12
- spec.description = %q{Check how many times url was shared in social networks.}
12
+ spec.description = %q{Check how many times url was shared in social networks, e.g. share counts.}
13
13
  spec.homepage = 'https://github.com/Timrael/social_shares'
14
14
  spec.license = 'MIT'
15
15
 
metadata CHANGED
@@ -1,79 +1,88 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: social_shares
3
3
  version: !ruby/object:Gem::Version
4
- version: 0.0.3
4
+ version: 0.1.0
5
+ prerelease:
5
6
  platform: ruby
6
7
  authors:
7
8
  - Timur Kozmenko
8
9
  autorequire:
9
10
  bindir: bin
10
11
  cert_chain: []
11
- date: 2014-10-13 00:00:00.000000000 Z
12
+ date: 2014-10-18 00:00:00.000000000 Z
12
13
  dependencies:
13
14
  - !ruby/object:Gem::Dependency
14
15
  name: rest-client
15
16
  requirement: !ruby/object:Gem::Requirement
17
+ none: false
16
18
  requirements:
17
- - - ">="
19
+ - - ! '>='
18
20
  - !ruby/object:Gem::Version
19
21
  version: '0'
20
22
  type: :runtime
21
23
  prerelease: false
22
24
  version_requirements: !ruby/object:Gem::Requirement
25
+ none: false
23
26
  requirements:
24
- - - ">="
27
+ - - ! '>='
25
28
  - !ruby/object:Gem::Version
26
29
  version: '0'
27
30
  - !ruby/object:Gem::Dependency
28
31
  name: json
29
32
  requirement: !ruby/object:Gem::Requirement
33
+ none: false
30
34
  requirements:
31
- - - ">="
35
+ - - ! '>='
32
36
  - !ruby/object:Gem::Version
33
37
  version: '0'
34
38
  type: :runtime
35
39
  prerelease: false
36
40
  version_requirements: !ruby/object:Gem::Requirement
41
+ none: false
37
42
  requirements:
38
- - - ">="
43
+ - - ! '>='
39
44
  - !ruby/object:Gem::Version
40
45
  version: '0'
41
46
  - !ruby/object:Gem::Dependency
42
47
  name: bundler
43
48
  requirement: !ruby/object:Gem::Requirement
49
+ none: false
44
50
  requirements:
45
- - - "~>"
51
+ - - ~>
46
52
  - !ruby/object:Gem::Version
47
53
  version: '1.6'
48
54
  type: :development
49
55
  prerelease: false
50
56
  version_requirements: !ruby/object:Gem::Requirement
57
+ none: false
51
58
  requirements:
52
- - - "~>"
59
+ - - ~>
53
60
  - !ruby/object:Gem::Version
54
61
  version: '1.6'
55
62
  - !ruby/object:Gem::Dependency
56
63
  name: rake
57
64
  requirement: !ruby/object:Gem::Requirement
65
+ none: false
58
66
  requirements:
59
- - - ">="
67
+ - - ! '>='
60
68
  - !ruby/object:Gem::Version
61
69
  version: '0'
62
70
  type: :development
63
71
  prerelease: false
64
72
  version_requirements: !ruby/object:Gem::Requirement
73
+ none: false
65
74
  requirements:
66
- - - ">="
75
+ - - ! '>='
67
76
  - !ruby/object:Gem::Version
68
77
  version: '0'
69
- description: Check how many times url was shared in social networks.
78
+ description: Check how many times url was shared in social networks, e.g. share counts.
70
79
  email:
71
80
  - timraell@gmail.com
72
81
  executables: []
73
82
  extensions: []
74
83
  extra_rdoc_files: []
75
84
  files:
76
- - ".gitignore"
85
+ - .gitignore
77
86
  - Gemfile
78
87
  - LICENSE.txt
79
88
  - README.md
@@ -82,8 +91,12 @@ files:
82
91
  - lib/social_shares/base.rb
83
92
  - lib/social_shares/facebook.rb
84
93
  - lib/social_shares/google.rb
94
+ - lib/social_shares/linkedin.rb
85
95
  - lib/social_shares/mail_ru.rb
86
96
  - lib/social_shares/odnoklassniki.rb
97
+ - lib/social_shares/pinterest.rb
98
+ - lib/social_shares/reddit.rb
99
+ - lib/social_shares/stumbleupon.rb
87
100
  - lib/social_shares/twitter.rb
88
101
  - lib/social_shares/version.rb
89
102
  - lib/social_shares/vkontakte.rb
@@ -91,25 +104,27 @@ files:
91
104
  homepage: https://github.com/Timrael/social_shares
92
105
  licenses:
93
106
  - MIT
94
- metadata: {}
95
107
  post_install_message:
96
108
  rdoc_options: []
97
109
  require_paths:
98
110
  - lib
99
111
  required_ruby_version: !ruby/object:Gem::Requirement
112
+ none: false
100
113
  requirements:
101
- - - ">="
114
+ - - ! '>='
102
115
  - !ruby/object:Gem::Version
103
116
  version: '0'
104
117
  required_rubygems_version: !ruby/object:Gem::Requirement
118
+ none: false
105
119
  requirements:
106
- - - ">="
120
+ - - ! '>='
107
121
  - !ruby/object:Gem::Version
108
122
  version: '0'
109
123
  requirements: []
110
124
  rubyforge_project:
111
- rubygems_version: 2.4.2
125
+ rubygems_version: 1.8.25
112
126
  signing_key:
113
- specification_version: 4
127
+ specification_version: 3
114
128
  summary: Check how many times url was shared in social networks.
115
129
  test_files: []
130
+ has_rdoc:
checksums.yaml DELETED
@@ -1,7 +0,0 @@
1
- ---
2
- SHA1:
3
- metadata.gz: 27877d5ac4dc67febe1d05033a50c25649cc5232
4
- data.tar.gz: b0365e412ee96188a36c57135a19d62bb6dd99a2
5
- SHA512:
6
- metadata.gz: 52c3e2cc8cbfe5fb9350a6abdb51cee0cc43e4a65d1bb12b02b8560cf5c4fae64fffa1d242fa1a3728829bbbdd3bfe0f748787b40911cac6d5daaad6bf47f8d5
7
- data.tar.gz: d8a61a63e2a4cb5aa1192c0d77ca2905c6c99e720361ba428da411c216f272d3720e4751deb1a490669e2ccf79ee64ed03ec5a86f20b7c8e7f3644873fce7129