sharer 0.0.6 → 0.0.8
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/CHANGELOG.md +5 -1
- data/README.md +4 -3
- data/lib/sharer.rb +36 -46
- data/lib/sharer/version.rb +1 -1
- metadata +19 -9
data/CHANGELOG.md
CHANGED
data/README.md
CHANGED
@@ -15,14 +15,14 @@ Sharer's Git repo is available on GitHub, which can be browsed at:
|
|
15
15
|
|
16
16
|
```ruby
|
17
17
|
http://github.com/14113/sharer
|
18
|
-
```
|
18
|
+
```
|
19
19
|
|
20
20
|
and cloned with:
|
21
21
|
|
22
22
|
```ruby
|
23
23
|
git clone git://github.com/14113/sharer.git
|
24
|
-
```
|
25
|
-
|
24
|
+
```
|
25
|
+
|
26
26
|
## Usage
|
27
27
|
|
28
28
|
Call Sharer in an Model and pass the url of the website.
|
@@ -30,6 +30,7 @@ Call Sharer in an Model and pass the url of the website.
|
|
30
30
|
```ruby
|
31
31
|
site = Sharer::Site.new("google.com")
|
32
32
|
number_of_likes = site.facebook_likes
|
33
|
+
number_of_shares = site.facebook_shares
|
33
34
|
number_of_tweets_buttons = site.twitter_button
|
34
35
|
number_of_linkedin_shares = site.linked_in_share
|
35
36
|
|
data/lib/sharer.rb
CHANGED
@@ -4,16 +4,25 @@ require "net/https"
|
|
4
4
|
require 'xmlrpc/client'
|
5
5
|
require 'rexml/document'
|
6
6
|
|
7
|
+
# == Sharer module is gem that detects the number of sharing sites
|
8
|
+
#
|
9
|
+
# A minimal implementation could be:
|
10
|
+
# site = Sharer::Site.new("google.com")
|
11
|
+
# @result = site.find_all
|
12
|
+
#
|
13
|
+
# This also provides the methods
|
14
|
+
# like +facebook_likes+ or +twitter_shares+
|
15
|
+
# and another...
|
7
16
|
module Sharer
|
8
|
-
|
17
|
+
|
9
18
|
class Site
|
10
|
-
|
19
|
+
|
11
20
|
def initialize url
|
12
21
|
@url = url
|
13
22
|
add_url_protocol
|
14
|
-
end
|
15
|
-
|
16
|
-
# Find the number of likes
|
23
|
+
end
|
24
|
+
|
25
|
+
# Find the number of facebook likes
|
17
26
|
def facebook_likes
|
18
27
|
return nil unless valid_url?
|
19
28
|
path = "http://api.facebook.com/method/fql.query?query=select%20%20like_count%20from%20link_stat%20where%20url=%22#{@url}%22"
|
@@ -21,69 +30,48 @@ module Sharer
|
|
21
30
|
root = REXML::Document.new(content)
|
22
31
|
root.elements[1].elements["link_stat/like_count"].text.to_i
|
23
32
|
end
|
24
|
-
|
25
|
-
# Find the number of shares
|
33
|
+
|
34
|
+
# Find the number of facebook shares
|
26
35
|
def facebook_shares
|
27
36
|
return nil unless valid_url?
|
28
37
|
path = "http://graph.facebook.com/?id=#{@url}"
|
29
38
|
content = content(path)
|
30
39
|
content(path).match(/\"shares\":([0-9]*),/)[1].to_i
|
31
40
|
end
|
32
|
-
|
33
|
-
# Find the number of tweeter buttons
|
41
|
+
|
42
|
+
# Find the number of tweeter buttons
|
34
43
|
def twitter_button
|
35
44
|
return nil unless valid_url?
|
36
45
|
path = "http://urls.api.twitter.com/1/urls/count.json?url=#{@url}"
|
37
46
|
content(path).match(/\"count\":([0-9]*),/)[1].to_i
|
38
47
|
end
|
39
|
-
|
40
|
-
# Find the number of linkedin shares
|
48
|
+
|
49
|
+
# Find the number of linkedin shares
|
41
50
|
def linked_in_share
|
42
51
|
return nil unless valid_url?
|
43
52
|
path = "http://www.linkedin.com/countserv/count/share?url=#{@url}&callback=myCallback&format=json"
|
44
53
|
content(path).match(/\"count\":([0-9]*),/)[1].to_i
|
45
54
|
end
|
46
|
-
|
47
|
-
#
|
48
|
-
|
49
|
-
return nil unless valid_url?
|
50
|
-
url = @url.gsub("http://www.","")
|
51
|
-
path = "http://widgets.digg.com/buttons/count?url=#{url}"
|
52
|
-
content(path).match(/\"diggs\": ([0-9]*),/)[1].to_i
|
53
|
-
end
|
54
|
-
|
55
|
-
# Find shareing by url
|
55
|
+
|
56
|
+
# Returns the hash with all sites.
|
57
|
+
# Method using threads
|
56
58
|
def find_all
|
57
59
|
return nil unless valid_url?
|
58
|
-
|
60
|
+
|
59
61
|
data = {}
|
60
62
|
threads = []
|
61
|
-
|
62
|
-
|
63
|
-
|
64
|
-
|
65
|
-
|
66
|
-
threads << Thread.new do
|
67
|
-
data["facebook_shares"] = facebook_shares
|
68
|
-
end
|
69
|
-
|
70
|
-
threads << Thread.new do
|
71
|
-
data["twitter_tweets"] = twitter_button
|
72
|
-
end
|
73
|
-
|
74
|
-
threads << Thread.new do
|
75
|
-
data["linked_in_shared"] = linked_in_share
|
76
|
-
end
|
77
|
-
|
78
|
-
threads << Thread.new do
|
79
|
-
data["diggs"] = diggs
|
63
|
+
#TODO: use object!
|
64
|
+
[:facebook_likes,:facebook_shares,:twitter_button,:linked_in_share].each do |method|
|
65
|
+
threads << Thread.new do
|
66
|
+
data[method] = send(method)
|
67
|
+
end
|
80
68
|
end
|
81
69
|
|
82
70
|
threads.each {|t| t.join }
|
83
71
|
data
|
84
72
|
end
|
85
|
-
|
86
|
-
|
73
|
+
|
74
|
+
|
87
75
|
private
|
88
76
|
# Valid url
|
89
77
|
def valid_url?
|
@@ -91,7 +79,7 @@ module Sharer
|
|
91
79
|
#(@url =~ URI::regexp).nil?
|
92
80
|
true
|
93
81
|
end
|
94
|
-
|
82
|
+
|
95
83
|
# Content by url
|
96
84
|
def content path
|
97
85
|
begin
|
@@ -100,8 +88,10 @@ module Sharer
|
|
100
88
|
print exception.backtrace.join("\n")
|
101
89
|
end
|
102
90
|
end
|
103
|
-
|
91
|
+
|
92
|
+
# Edit url
|
104
93
|
def add_url_protocol
|
94
|
+
#TODO: use better regex
|
105
95
|
unless @url[/^www./]
|
106
96
|
@url = 'www.' + @url
|
107
97
|
end
|
@@ -109,6 +99,6 @@ module Sharer
|
|
109
99
|
@url = 'http://' + @url
|
110
100
|
end
|
111
101
|
end
|
112
|
-
|
102
|
+
|
113
103
|
end
|
114
104
|
end
|
data/lib/sharer/version.rb
CHANGED
metadata
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
2
2
|
name: sharer
|
3
3
|
version: !ruby/object:Gem::Version
|
4
|
-
version: 0.0.
|
4
|
+
version: 0.0.8
|
5
5
|
prerelease:
|
6
6
|
platform: ruby
|
7
7
|
authors:
|
@@ -9,11 +9,11 @@ authors:
|
|
9
9
|
autorequire:
|
10
10
|
bindir: bin
|
11
11
|
cert_chain: []
|
12
|
-
date:
|
12
|
+
date: 2013-06-10 00:00:00.000000000 Z
|
13
13
|
dependencies:
|
14
14
|
- !ruby/object:Gem::Dependency
|
15
15
|
name: rake
|
16
|
-
requirement:
|
16
|
+
requirement: !ruby/object:Gem::Requirement
|
17
17
|
none: false
|
18
18
|
requirements:
|
19
19
|
- - ! '>='
|
@@ -21,10 +21,15 @@ dependencies:
|
|
21
21
|
version: '0'
|
22
22
|
type: :development
|
23
23
|
prerelease: false
|
24
|
-
version_requirements:
|
24
|
+
version_requirements: !ruby/object:Gem::Requirement
|
25
|
+
none: false
|
26
|
+
requirements:
|
27
|
+
- - ! '>='
|
28
|
+
- !ruby/object:Gem::Version
|
29
|
+
version: '0'
|
25
30
|
- !ruby/object:Gem::Dependency
|
26
31
|
name: rspec
|
27
|
-
requirement:
|
32
|
+
requirement: !ruby/object:Gem::Requirement
|
28
33
|
none: false
|
29
34
|
requirements:
|
30
35
|
- - ! '>='
|
@@ -32,7 +37,12 @@ dependencies:
|
|
32
37
|
version: '0'
|
33
38
|
type: :development
|
34
39
|
prerelease: false
|
35
|
-
version_requirements:
|
40
|
+
version_requirements: !ruby/object:Gem::Requirement
|
41
|
+
none: false
|
42
|
+
requirements:
|
43
|
+
- - ! '>='
|
44
|
+
- !ruby/object:Gem::Version
|
45
|
+
version: '0'
|
36
46
|
description: If your application needs to count the number of shared, this gem can
|
37
47
|
help you.
|
38
48
|
email:
|
@@ -68,7 +78,7 @@ required_ruby_version: !ruby/object:Gem::Requirement
|
|
68
78
|
version: '0'
|
69
79
|
segments:
|
70
80
|
- 0
|
71
|
-
hash:
|
81
|
+
hash: 3641520689904256952
|
72
82
|
required_rubygems_version: !ruby/object:Gem::Requirement
|
73
83
|
none: false
|
74
84
|
requirements:
|
@@ -77,10 +87,10 @@ required_rubygems_version: !ruby/object:Gem::Requirement
|
|
77
87
|
version: '0'
|
78
88
|
segments:
|
79
89
|
- 0
|
80
|
-
hash:
|
90
|
+
hash: 3641520689904256952
|
81
91
|
requirements: []
|
82
92
|
rubyforge_project: sharer
|
83
|
-
rubygems_version: 1.8.
|
93
|
+
rubygems_version: 1.8.25
|
84
94
|
signing_key:
|
85
95
|
specification_version: 3
|
86
96
|
summary: ''
|