rsocial 0.7.0 → 3.6.0
Sign up to get free protection for your applications and to get access to all the features.
- checksums.yaml +4 -4
- data/README.md +34 -7
- data/lib/rsocial.rb +1 -1
- data/lib/rsocial/facebook.rb +1 -1
- data/lib/rsocial/facebook/client.rb +1 -0
- data/lib/rsocial/facebook/client/pages.rb +5 -11
- data/lib/rsocial/facebook/client/posts.rb +28 -0
- data/lib/rsocial/instagram.rb +1 -1
- data/lib/rsocial/instagram/client.rb +1 -0
- data/lib/rsocial/instagram/client/tags.rb +29 -0
- data/lib/rsocial/instagram/client/users.rb +9 -3
- data/lib/rsocial/runner.rb +20 -11
- data/lib/rsocial/shazam.rb +1 -1
- data/lib/rsocial/shazam/client/users.rb +7 -1
- data/lib/rsocial/soundcloud.rb +1 -1
- data/lib/rsocial/soundcloud/client/users.rb +8 -2
- data/lib/rsocial/twitter.rb +1 -1
- data/lib/rsocial/twitter/client/users.rb +10 -4
- data/lib/rsocial/utils.rb +0 -2
- data/lib/rsocial/youtube.rb +1 -1
- data/lib/rsocial/youtube/client/channels.rb +7 -1
- data/lib/rsocial/youtube/client/users.rb +7 -1
- data/rsocial.gemspec +3 -7
- data/spec/rsocial/facebook/client/pages_spec.rb +1 -1
- data/spec/rsocial/facebook/client/posts_spec.rb +13 -0
- data/spec/rsocial/instagram/client/tags_spec.rb +16 -0
- data/spec/rsocial/instagram/client/users_spec.rb +3 -3
- data/spec/rsocial/shazam/client/users_spec.rb +1 -1
- data/spec/rsocial/soundcloud/client/users_spec.rb +2 -2
- data/spec/rsocial/twitter/client/users_spec.rb +4 -4
- data/spec/rsocial/twitter_spec.rb +1 -1
- data/spec/rsocial/youtube/client/channels_spec.rb +1 -1
- data/spec/rsocial/youtube/client/users_spec.rb +1 -1
- metadata +20 -70
checksums.yaml
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
---
|
2
2
|
SHA1:
|
3
|
-
metadata.gz:
|
4
|
-
data.tar.gz:
|
3
|
+
metadata.gz: e3eedba515854389b26c77e190e8d3c231ded0fa
|
4
|
+
data.tar.gz: 4fc9e36e7f238177a1690901fcd246716aeebfd1
|
5
5
|
SHA512:
|
6
|
-
metadata.gz:
|
7
|
-
data.tar.gz:
|
6
|
+
metadata.gz: 3d17038135a9c5d34622de17b053bff67a448fcf05578e52805fd8ad76a8e21704753b1d7076cf7f3857baea086182a9520f88acd3e9ed85d83b496b67a0b486
|
7
|
+
data.tar.gz: 71b69cf303b8ce253500df122c973d38c6424e3382c0f9388c8df6c05449fed08401f812e99db8493e09e9b83b6d7a39d91b0b8a100d591f1ce67219494ef5fc
|
data/README.md
CHANGED
@@ -1,6 +1,11 @@
|
|
1
1
|
## RSocial
|
2
2
|
|
3
|
-
|
3
|
+
RSocial is a Ruby gem for crawling social media stats on various web entities. It's been setup to use Selenium WebDriver to make direct calls to your computers web browser, whereby each social media public web application is loaded and interacted with in order to poll the various stats.
|
4
|
+
|
5
|
+
## Requirements
|
6
|
+
|
7
|
+
* [chromedriver]: https://sites.google.com/a/chromium.org/chromedriver/getting-started
|
8
|
+
* [geckodriver]: https://github.com/mozilla/geckodriver/releasess
|
4
9
|
|
5
10
|
## Installation
|
6
11
|
|
@@ -25,7 +30,10 @@ require 'rsocial'
|
|
25
30
|
|
26
31
|
client = RSocial::Instagram.client(:requesting_handle => "my_handle")
|
27
32
|
|
28
|
-
client.user("
|
33
|
+
client.user("ryanbingham_official")
|
34
|
+
=> {:post_count=>1502, :follower_count=>471000, :following_count=>171, :handle=>"ryanbingham_official"}
|
35
|
+
client.tag("newmusic")
|
36
|
+
=> {:post_count=>6676425, :images=>[{:alt=>"caption",:src=>"src"}]}
|
29
37
|
```
|
30
38
|
|
31
39
|
#### Facebook
|
@@ -35,7 +43,8 @@ require 'rsocial'
|
|
35
43
|
|
36
44
|
client = RSocial::Facebook.client(:requesting_handle => "my_handle")
|
37
45
|
|
38
|
-
client.page("
|
46
|
+
client.page("RyanBingham")
|
47
|
+
=> {:follower_count=>153418, :handle=>"RyanBingham"}
|
39
48
|
```
|
40
49
|
|
41
50
|
#### Twitter
|
@@ -45,7 +54,8 @@ require 'rsocial'
|
|
45
54
|
|
46
55
|
client = RSocial::Twitter.client(:requesting_handle => "my_handle")
|
47
56
|
|
48
|
-
client.
|
57
|
+
client.user("RyanBingham")
|
58
|
+
=> {:tweet_count=>5755, :following_count=>636, :follower_count=>404000, :like_count=>151000, :handle=>"RyanBingham"}
|
49
59
|
```
|
50
60
|
|
51
61
|
#### YouTube
|
@@ -55,7 +65,8 @@ require 'rsocial'
|
|
55
65
|
|
56
66
|
client = RSocial::Youtube.client(:requesting_handle => "my_handle")
|
57
67
|
|
58
|
-
client.
|
68
|
+
client.channel("UCtZ6qwLISrbRkYG2oBYLz3g")
|
69
|
+
=> {:subscriber_count=>11378, :channel_id=>"UCtZ6qwLISrbRkYG2oBYLz3g"}
|
59
70
|
```
|
60
71
|
|
61
72
|
|
@@ -66,7 +77,8 @@ require 'rsocial'
|
|
66
77
|
|
67
78
|
client = RSocial::Shazam.client(:requesting_handle => "my_handle")
|
68
79
|
|
69
|
-
client.
|
80
|
+
client.user("40229308")
|
81
|
+
=> {:follower_count=>254734, :id=>"40229308"}
|
70
82
|
```
|
71
83
|
|
72
84
|
#### Soundcloud
|
@@ -76,7 +88,22 @@ require 'rsocial'
|
|
76
88
|
|
77
89
|
client = RSocial::Soundcloud.client(:requesting_handle => "my_handle")
|
78
90
|
|
79
|
-
client.
|
91
|
+
client.user("ryan-bingham")
|
92
|
+
=> {:follower_count=>1988, :track_count=>51, :handle=>"ryan-bingham"}
|
93
|
+
```
|
94
|
+
|
95
|
+
## Building & Testing
|
96
|
+
|
97
|
+
```
|
98
|
+
rspec
|
99
|
+
```
|
100
|
+
```
|
101
|
+
gem build rsocial.gemspec
|
102
|
+
gem install ./rsocial-X.X.X.gem
|
103
|
+
```
|
104
|
+
irb
|
105
|
+
```
|
106
|
+
require 'rsocial'
|
80
107
|
```
|
81
108
|
|
82
109
|
## Contributing
|
data/lib/rsocial.rb
CHANGED
data/lib/rsocial/facebook.rb
CHANGED
@@ -9,26 +9,20 @@ module RSocial
|
|
9
9
|
).merge(:handle => handle)
|
10
10
|
end
|
11
11
|
|
12
|
-
def
|
13
|
-
|
14
|
-
|
15
|
-
|
16
|
-
).merge(:handle => handle)
|
12
|
+
def pages_instance(handle)
|
13
|
+
wd = Driver.instance.send( "chrome" )
|
14
|
+
wd.get "https://www.facebook.com/#{handle}/"
|
15
|
+
wd
|
17
16
|
end
|
18
17
|
|
19
18
|
private
|
20
19
|
|
21
20
|
def page_injections
|
22
21
|
{
|
23
|
-
:
|
22
|
+
:follower_count => "return document.getElementById('PagesLikesCountDOMID').childNodes[0].textContent"
|
24
23
|
}
|
25
24
|
end
|
26
25
|
|
27
|
-
def posts_injections
|
28
|
-
{
|
29
|
-
:last_post_reactions => "return document.getElementsByClassName('_4arz')[0].textContent"
|
30
|
-
}
|
31
|
-
end
|
32
26
|
end
|
33
27
|
end
|
34
28
|
end
|
@@ -0,0 +1,28 @@
|
|
1
|
+
module RSocial
|
2
|
+
module Facebook
|
3
|
+
class Client
|
4
|
+
module Posts
|
5
|
+
def post(handle)
|
6
|
+
run(
|
7
|
+
"https://www.facebook.com/#{handle}/posts",
|
8
|
+
posts_injections
|
9
|
+
).merge(:handle => handle)
|
10
|
+
end
|
11
|
+
|
12
|
+
def posts_instance(handle)
|
13
|
+
wd = Driver.instance.send( "chrome" )
|
14
|
+
wd.get "https://www.facebook.com/#{handle}/posts"
|
15
|
+
wd
|
16
|
+
end
|
17
|
+
|
18
|
+
private
|
19
|
+
|
20
|
+
def posts_injections
|
21
|
+
{
|
22
|
+
:last_post_reactions => "return document.getElementsByClassName('_4arz')[0].textContent"
|
23
|
+
}
|
24
|
+
end
|
25
|
+
end
|
26
|
+
end
|
27
|
+
end
|
28
|
+
end
|
data/lib/rsocial/instagram.rb
CHANGED
@@ -0,0 +1,29 @@
|
|
1
|
+
module RSocial
|
2
|
+
module Instagram
|
3
|
+
class Client
|
4
|
+
module Tags
|
5
|
+
def tag(query)
|
6
|
+
run(
|
7
|
+
"https://www.instagram.com/explore/tags/#{query}/",
|
8
|
+
tag_injections
|
9
|
+
).merge(:query => query)
|
10
|
+
end
|
11
|
+
|
12
|
+
def tags_instance(query)
|
13
|
+
wd = Driver.instance.send( "chrome" )
|
14
|
+
wd.get "https://www.instagram.com/explore/tags/#{query}/"
|
15
|
+
wd
|
16
|
+
end
|
17
|
+
|
18
|
+
private
|
19
|
+
|
20
|
+
def tag_injections
|
21
|
+
{
|
22
|
+
:post_count => "return document.getElementsByClassName('_fd86t')[0].innerHTML",
|
23
|
+
:images => "return function() { var urls = []; arr = document.getElementsByClassName('_4rbun'); for (var i=0; i< arr.length; i++) { urls.push({alt: arr[i].childNodes[0].alt, src: arr[i].childNodes[0].currentSrc}) }; return urls}()",
|
24
|
+
}
|
25
|
+
end
|
26
|
+
end
|
27
|
+
end
|
28
|
+
end
|
29
|
+
end
|
@@ -9,13 +9,19 @@ module RSocial
|
|
9
9
|
).merge(:handle => handle)
|
10
10
|
end
|
11
11
|
|
12
|
+
def users_instance(handle)
|
13
|
+
wd = Driver.instance.send( "chrome" )
|
14
|
+
wd.get "https://www.instagram.com/#{handle}/"
|
15
|
+
wd
|
16
|
+
end
|
17
|
+
|
12
18
|
private
|
13
19
|
|
14
20
|
def user_injections
|
15
21
|
{
|
16
|
-
:
|
17
|
-
:
|
18
|
-
:
|
22
|
+
:post_count => "return document.getElementsByClassName('_s53mj')[0].getElementsByClassName('_bkw5z')[0].innerHTML",
|
23
|
+
:follower_count => "return document.getElementsByClassName('_s53mj')[1].getElementsByClassName('_bkw5z')[0].innerHTML",
|
24
|
+
:following_count => "return document.getElementsByClassName('_s53mj')[2].getElementsByClassName('_bkw5z')[0].innerHTML"
|
19
25
|
}
|
20
26
|
end
|
21
27
|
end
|
data/lib/rsocial/runner.rb
CHANGED
@@ -1,5 +1,3 @@
|
|
1
|
-
require 'headless'
|
2
|
-
|
3
1
|
module RSocial
|
4
2
|
class Runner < Utils
|
5
3
|
def initialize(options={})
|
@@ -8,13 +6,10 @@ module RSocial
|
|
8
6
|
|
9
7
|
def run(url, injections)
|
10
8
|
begin
|
11
|
-
|
12
|
-
|
13
|
-
|
14
|
-
|
15
|
-
inject_each do
|
16
|
-
injections
|
17
|
-
end
|
9
|
+
@wd = Driver.instance.send( "chrome" )
|
10
|
+
@wd.get url
|
11
|
+
inject_each do
|
12
|
+
injections
|
18
13
|
end
|
19
14
|
rescue Net::ReadTimeout => e
|
20
15
|
{
|
@@ -28,19 +23,33 @@ module RSocial
|
|
28
23
|
def inject_each(&block)
|
29
24
|
results = {}
|
30
25
|
block.call.each do |key, script|
|
31
|
-
|
26
|
+
response = execute(script)
|
27
|
+
response = h2n(response) if keys.include? key
|
28
|
+
results[key.to_sym] = response
|
32
29
|
end
|
33
30
|
results
|
34
31
|
end
|
35
32
|
|
36
33
|
def execute(script)
|
37
34
|
begin
|
38
|
-
|
35
|
+
@wd.execute_script(script)
|
39
36
|
rescue Selenium::WebDriver::Error::JavascriptError
|
40
37
|
"Javascript Error"
|
41
38
|
rescue Selenium::WebDriver::Error::UnknownError
|
42
39
|
"Unknown Error"
|
43
40
|
end
|
44
41
|
end
|
42
|
+
|
43
|
+
def keys
|
44
|
+
[
|
45
|
+
:follower_count,
|
46
|
+
:following_count,
|
47
|
+
:track_count,
|
48
|
+
:tweet_count,
|
49
|
+
:like_count,
|
50
|
+
:subscriber_count,
|
51
|
+
:post_count
|
52
|
+
]
|
53
|
+
end
|
45
54
|
end
|
46
55
|
end
|
data/lib/rsocial/shazam.rb
CHANGED
@@ -9,11 +9,17 @@ module RSocial
|
|
9
9
|
).merge(:id => id)
|
10
10
|
end
|
11
11
|
|
12
|
+
def users_instance(id)
|
13
|
+
wd = Driver.instance.send( "chrome" )
|
14
|
+
wd.get "https://www.shazam.com/artist/#{id}"
|
15
|
+
wd
|
16
|
+
end
|
17
|
+
|
12
18
|
private
|
13
19
|
|
14
20
|
def user_injections
|
15
21
|
{
|
16
|
-
:
|
22
|
+
:follower_count => "return document.getElementsByClassName('js-followers')[0].textContent"
|
17
23
|
}
|
18
24
|
end
|
19
25
|
end
|
data/lib/rsocial/soundcloud.rb
CHANGED
@@ -9,12 +9,18 @@ module RSocial
|
|
9
9
|
).merge(:handle => handle)
|
10
10
|
end
|
11
11
|
|
12
|
+
def users_instance(handle)
|
13
|
+
wd = Driver.instance.send( "chrome" )
|
14
|
+
wd.get "https://soundcloud.com/#{handle}/"
|
15
|
+
wd
|
16
|
+
end
|
17
|
+
|
12
18
|
private
|
13
19
|
|
14
20
|
def user_injections
|
15
21
|
{
|
16
|
-
:
|
17
|
-
:
|
22
|
+
:follower_count => "return document.getElementsByClassName('infoStats__value')[0].textContent",
|
23
|
+
:track_count => "return document.getElementsByClassName('infoStats__value')[2].textContent"
|
18
24
|
}
|
19
25
|
end
|
20
26
|
end
|
data/lib/rsocial/twitter.rb
CHANGED
@@ -9,14 +9,20 @@ module RSocial
|
|
9
9
|
).merge(:handle => handle)
|
10
10
|
end
|
11
11
|
|
12
|
+
def users_instance(handle)
|
13
|
+
wd = Driver.instance.send( "chrome" )
|
14
|
+
wd.get "https://twitter.com/#{handle}/"
|
15
|
+
wd
|
16
|
+
end
|
17
|
+
|
12
18
|
private
|
13
19
|
|
14
20
|
def user_injections
|
15
21
|
{
|
16
|
-
:
|
17
|
-
:
|
18
|
-
:
|
19
|
-
:
|
22
|
+
:tweet_count => "return document.getElementsByClassName('ProfileNav-list')[0].childNodes[1].getElementsByClassName('ProfileNav-value')[0].textContent",
|
23
|
+
:following_count => "return document.getElementsByClassName('ProfileNav-list')[0].childNodes[2].getElementsByClassName('ProfileNav-value')[0].textContent",
|
24
|
+
:follower_count => "return document.getElementsByClassName('ProfileNav-list')[0].childNodes[3].getElementsByClassName('ProfileNav-value')[0].textContent",
|
25
|
+
:like_count => "return document.getElementsByClassName('ProfileNav-list')[0].childNodes[4].getElementsByClassName('ProfileNav-value')[0].textContent"
|
20
26
|
}
|
21
27
|
end
|
22
28
|
end
|
data/lib/rsocial/utils.rb
CHANGED
data/lib/rsocial/youtube.rb
CHANGED
@@ -9,11 +9,17 @@ module RSocial
|
|
9
9
|
).merge(:channel_id => channel_id)
|
10
10
|
end
|
11
11
|
|
12
|
+
def channels_instance(channel_id)
|
13
|
+
wd = Driver.instance.send( "chrome" )
|
14
|
+
wd.get "https://www.youtube.com/channel/#{channel_id}/"
|
15
|
+
wd
|
16
|
+
end
|
17
|
+
|
12
18
|
private
|
13
19
|
|
14
20
|
def channel_injections
|
15
21
|
{
|
16
|
-
:
|
22
|
+
:subscriber_count => "return document.getElementsByClassName('yt-subscription-button-subscriber-count-branded-horizontal')[0].textContent"
|
17
23
|
}
|
18
24
|
end
|
19
25
|
end
|
@@ -9,11 +9,17 @@ module RSocial
|
|
9
9
|
).merge(:handle => handle)
|
10
10
|
end
|
11
11
|
|
12
|
+
def users_instance(handle)
|
13
|
+
wd = Driver.instance.send( "chrome" )
|
14
|
+
wd.get "https://www.youtube.com/user/#{handle}/"
|
15
|
+
wd
|
16
|
+
end
|
17
|
+
|
12
18
|
private
|
13
19
|
|
14
20
|
def user_injections
|
15
21
|
{
|
16
|
-
:
|
22
|
+
:subscriber_count => "return document.getElementsByClassName('yt-subscription-button-subscriber-count-branded-horizontal')[0].textContent"
|
17
23
|
}
|
18
24
|
end
|
19
25
|
end
|
data/rsocial.gemspec
CHANGED
@@ -7,13 +7,9 @@ Gem::Specification.new do |s|
|
|
7
7
|
s.add_development_dependency "rake"
|
8
8
|
s.add_development_dependency "rspec"
|
9
9
|
s.add_development_dependency "rspec-nc"
|
10
|
-
s.add_development_dependency "
|
11
|
-
s.add_development_dependency
|
12
|
-
s.
|
13
|
-
s.add_development_dependency "pry-remote"
|
14
|
-
s.add_development_dependency "pry-nav"
|
15
|
-
s.add_runtime_dependency('selenium-webdriver', '~> 3.0.0.beta3.1', '>= 3.0.0.beta3.1')
|
16
|
-
s.add_runtime_dependency('headless', '~> 2.3', '>= 2.3.1')
|
10
|
+
s.add_development_dependency "json"
|
11
|
+
s.add_development_dependency('selenium-webdriver', '~> 3.6.0', '>= 3.6.0')
|
12
|
+
s.add_runtime_dependency('selenium-webdriver', '~> 3.6.0', '>= 3.6.0')
|
17
13
|
s.description = "A ruby social media stat crawler"
|
18
14
|
s.date = Time.now.utc.strftime("%Y-%m-%d")
|
19
15
|
s.name = 'rsocial'
|
@@ -8,7 +8,7 @@ describe RSocial::Facebook::Client::Pages do
|
|
8
8
|
|
9
9
|
#{:followers=>"149,207 likes", :handle=>"RyanBingham"}
|
10
10
|
it 'should find page stats' do
|
11
|
-
expect(@user[:
|
11
|
+
expect(@user[:follower_count]).to be_an Integer
|
12
12
|
expect(@user[:handle]).to be_an String
|
13
13
|
end
|
14
14
|
|
@@ -0,0 +1,16 @@
|
|
1
|
+
describe RSocial::Instagram::Client::Tags do
|
2
|
+
describe 'Instagram.client.tag()' do
|
3
|
+
|
4
|
+
before(:each) do
|
5
|
+
@client = RSocial::Instagram.client({})
|
6
|
+
@tag = @client.tag("offsite")
|
7
|
+
end
|
8
|
+
|
9
|
+
#
|
10
|
+
it 'should find user stats' do
|
11
|
+
expect(@tag[:post_count]).to be_an Integer
|
12
|
+
expect(@tag[:images]).to be_an Array
|
13
|
+
end
|
14
|
+
|
15
|
+
end
|
16
|
+
end
|
@@ -8,9 +8,9 @@ describe RSocial::Instagram::Client::Users do
|
|
8
8
|
|
9
9
|
#{:posts=>"1,458", :followers=>"43.8k", :following=>"171", :handle=>"ryanbingham_official"}
|
10
10
|
it 'should find user stats' do
|
11
|
-
expect(@user[:
|
12
|
-
expect(@user[:
|
13
|
-
expect(@user[:
|
11
|
+
expect(@user[:post_count]).to be_an Integer
|
12
|
+
expect(@user[:following_count]).to be_an Integer
|
13
|
+
expect(@user[:follower_count]).to be_an Integer
|
14
14
|
expect(@user[:handle]).to be_an String
|
15
15
|
end
|
16
16
|
|
@@ -8,8 +8,8 @@ describe RSocial::Soundcloud::Client::Users do
|
|
8
8
|
|
9
9
|
#{:followers=>"254,682", :tracks=>"5"}
|
10
10
|
it 'should find user stats' do
|
11
|
-
expect(@user[:
|
12
|
-
expect(@user[:
|
11
|
+
expect(@user[:follower_count]).to be_an Integer
|
12
|
+
expect(@user[:track_count]).to be_an Integer
|
13
13
|
end
|
14
14
|
|
15
15
|
end
|
@@ -8,10 +8,10 @@ describe RSocial::Twitter::Client::Users do
|
|
8
8
|
|
9
9
|
#{:tweets=>"5,668", :following=>"633", :followers=>"39.8K", :likes=>"14.8K", :handle=>"RyanBingham"}
|
10
10
|
it 'should find user stats' do
|
11
|
-
expect(@user[:
|
12
|
-
expect(@user[:
|
13
|
-
expect(@user[:
|
14
|
-
expect(@user[:
|
11
|
+
expect(@user[:tweet_count]).to be_an Integer
|
12
|
+
expect(@user[:following_count]).to be_an Integer
|
13
|
+
expect(@user[:follower_count]).to be_an Integer
|
14
|
+
expect(@user[:like_count]).to be_an Integer
|
15
15
|
expect(@user[:handle]).to be_an String
|
16
16
|
end
|
17
17
|
|
@@ -8,7 +8,7 @@ describe RSocial::Youtube::Client::Channels do
|
|
8
8
|
|
9
9
|
#{:subscribers=>"5,016", :channel_id=>"UCXScCWtV6cFkiIMRioSWMEA"}
|
10
10
|
it 'should find user stats' do
|
11
|
-
expect(@channel[:
|
11
|
+
expect(@channel[:subscriber_count]).to be_an Integer
|
12
12
|
expect(@channel[:channel_id]).to be_an String
|
13
13
|
end
|
14
14
|
|
@@ -8,7 +8,7 @@ describe RSocial::Youtube::Client::Users do
|
|
8
8
|
|
9
9
|
#{:subscribers=>"11,131", :handle=>"ryanbingham"}
|
10
10
|
it 'should find user stats' do
|
11
|
-
expect(@user[:
|
11
|
+
expect(@user[:subscriber_count]).to be_an Integer
|
12
12
|
expect(@user[:handle]).to be_an String
|
13
13
|
end
|
14
14
|
|
metadata
CHANGED
@@ -1,14 +1,14 @@
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
2
2
|
name: rsocial
|
3
3
|
version: !ruby/object:Gem::Version
|
4
|
-
version:
|
4
|
+
version: 3.6.0
|
5
5
|
platform: ruby
|
6
6
|
authors:
|
7
7
|
- Ed Richards
|
8
8
|
autorequire:
|
9
9
|
bindir: bin
|
10
10
|
cert_chain: []
|
11
|
-
date:
|
11
|
+
date: 2017-11-01 00:00:00.000000000 Z
|
12
12
|
dependencies:
|
13
13
|
- !ruby/object:Gem::Dependency
|
14
14
|
name: rake
|
@@ -53,63 +53,7 @@ dependencies:
|
|
53
53
|
- !ruby/object:Gem::Version
|
54
54
|
version: '0'
|
55
55
|
- !ruby/object:Gem::Dependency
|
56
|
-
name:
|
57
|
-
requirement: !ruby/object:Gem::Requirement
|
58
|
-
requirements:
|
59
|
-
- - ">="
|
60
|
-
- !ruby/object:Gem::Version
|
61
|
-
version: '0'
|
62
|
-
type: :development
|
63
|
-
prerelease: false
|
64
|
-
version_requirements: !ruby/object:Gem::Requirement
|
65
|
-
requirements:
|
66
|
-
- - ">="
|
67
|
-
- !ruby/object:Gem::Version
|
68
|
-
version: '0'
|
69
|
-
- !ruby/object:Gem::Dependency
|
70
|
-
name: guard-rspec
|
71
|
-
requirement: !ruby/object:Gem::Requirement
|
72
|
-
requirements:
|
73
|
-
- - ">="
|
74
|
-
- !ruby/object:Gem::Version
|
75
|
-
version: '0'
|
76
|
-
type: :development
|
77
|
-
prerelease: false
|
78
|
-
version_requirements: !ruby/object:Gem::Requirement
|
79
|
-
requirements:
|
80
|
-
- - ">="
|
81
|
-
- !ruby/object:Gem::Version
|
82
|
-
version: '0'
|
83
|
-
- !ruby/object:Gem::Dependency
|
84
|
-
name: pry
|
85
|
-
requirement: !ruby/object:Gem::Requirement
|
86
|
-
requirements:
|
87
|
-
- - ">="
|
88
|
-
- !ruby/object:Gem::Version
|
89
|
-
version: '0'
|
90
|
-
type: :development
|
91
|
-
prerelease: false
|
92
|
-
version_requirements: !ruby/object:Gem::Requirement
|
93
|
-
requirements:
|
94
|
-
- - ">="
|
95
|
-
- !ruby/object:Gem::Version
|
96
|
-
version: '0'
|
97
|
-
- !ruby/object:Gem::Dependency
|
98
|
-
name: pry-remote
|
99
|
-
requirement: !ruby/object:Gem::Requirement
|
100
|
-
requirements:
|
101
|
-
- - ">="
|
102
|
-
- !ruby/object:Gem::Version
|
103
|
-
version: '0'
|
104
|
-
type: :development
|
105
|
-
prerelease: false
|
106
|
-
version_requirements: !ruby/object:Gem::Requirement
|
107
|
-
requirements:
|
108
|
-
- - ">="
|
109
|
-
- !ruby/object:Gem::Version
|
110
|
-
version: '0'
|
111
|
-
- !ruby/object:Gem::Dependency
|
112
|
-
name: pry-nav
|
56
|
+
name: json
|
113
57
|
requirement: !ruby/object:Gem::Requirement
|
114
58
|
requirements:
|
115
59
|
- - ">="
|
@@ -128,40 +72,40 @@ dependencies:
|
|
128
72
|
requirements:
|
129
73
|
- - "~>"
|
130
74
|
- !ruby/object:Gem::Version
|
131
|
-
version: 3.
|
75
|
+
version: 3.6.0
|
132
76
|
- - ">="
|
133
77
|
- !ruby/object:Gem::Version
|
134
|
-
version: 3.
|
135
|
-
type: :
|
78
|
+
version: 3.6.0
|
79
|
+
type: :development
|
136
80
|
prerelease: false
|
137
81
|
version_requirements: !ruby/object:Gem::Requirement
|
138
82
|
requirements:
|
139
83
|
- - "~>"
|
140
84
|
- !ruby/object:Gem::Version
|
141
|
-
version: 3.
|
85
|
+
version: 3.6.0
|
142
86
|
- - ">="
|
143
87
|
- !ruby/object:Gem::Version
|
144
|
-
version: 3.
|
88
|
+
version: 3.6.0
|
145
89
|
- !ruby/object:Gem::Dependency
|
146
|
-
name:
|
90
|
+
name: selenium-webdriver
|
147
91
|
requirement: !ruby/object:Gem::Requirement
|
148
92
|
requirements:
|
149
93
|
- - "~>"
|
150
94
|
- !ruby/object:Gem::Version
|
151
|
-
version:
|
95
|
+
version: 3.6.0
|
152
96
|
- - ">="
|
153
97
|
- !ruby/object:Gem::Version
|
154
|
-
version:
|
98
|
+
version: 3.6.0
|
155
99
|
type: :runtime
|
156
100
|
prerelease: false
|
157
101
|
version_requirements: !ruby/object:Gem::Requirement
|
158
102
|
requirements:
|
159
103
|
- - "~>"
|
160
104
|
- !ruby/object:Gem::Version
|
161
|
-
version:
|
105
|
+
version: 3.6.0
|
162
106
|
- - ">="
|
163
107
|
- !ruby/object:Gem::Version
|
164
|
-
version:
|
108
|
+
version: 3.6.0
|
165
109
|
description: A ruby social media stat crawler
|
166
110
|
email: er@advect.us
|
167
111
|
executables: []
|
@@ -177,8 +121,10 @@ files:
|
|
177
121
|
- lib/rsocial/facebook.rb
|
178
122
|
- lib/rsocial/facebook/client.rb
|
179
123
|
- lib/rsocial/facebook/client/pages.rb
|
124
|
+
- lib/rsocial/facebook/client/posts.rb
|
180
125
|
- lib/rsocial/instagram.rb
|
181
126
|
- lib/rsocial/instagram/client.rb
|
127
|
+
- lib/rsocial/instagram/client/tags.rb
|
182
128
|
- lib/rsocial/instagram/client/users.rb
|
183
129
|
- lib/rsocial/runner.rb
|
184
130
|
- lib/rsocial/shazam.rb
|
@@ -197,6 +143,8 @@ files:
|
|
197
143
|
- lib/rsocial/youtube/client/users.rb
|
198
144
|
- rsocial.gemspec
|
199
145
|
- spec/rsocial/facebook/client/pages_spec.rb
|
146
|
+
- spec/rsocial/facebook/client/posts_spec.rb
|
147
|
+
- spec/rsocial/instagram/client/tags_spec.rb
|
200
148
|
- spec/rsocial/instagram/client/users_spec.rb
|
201
149
|
- spec/rsocial/shazam/client/users_spec.rb
|
202
150
|
- spec/rsocial/soundcloud/client/users_spec.rb
|
@@ -225,12 +173,14 @@ required_rubygems_version: !ruby/object:Gem::Requirement
|
|
225
173
|
version: '0'
|
226
174
|
requirements: []
|
227
175
|
rubyforge_project:
|
228
|
-
rubygems_version: 2.
|
176
|
+
rubygems_version: 2.6.12
|
229
177
|
signing_key:
|
230
178
|
specification_version: 4
|
231
179
|
summary: A ruby social media stat crawler
|
232
180
|
test_files:
|
233
181
|
- spec/rsocial/facebook/client/pages_spec.rb
|
182
|
+
- spec/rsocial/facebook/client/posts_spec.rb
|
183
|
+
- spec/rsocial/instagram/client/tags_spec.rb
|
234
184
|
- spec/rsocial/instagram/client/users_spec.rb
|
235
185
|
- spec/rsocial/shazam/client/users_spec.rb
|
236
186
|
- spec/rsocial/soundcloud/client/users_spec.rb
|