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 CHANGED
@@ -1,7 +1,7 @@
1
1
  ---
2
2
  SHA1:
3
- metadata.gz: 74fa551e5ed8e6ae7e21b0a8c3acd9ca63ef5e19
4
- data.tar.gz: ee0292c47c123323322d6d725dc66dae281172f9
3
+ metadata.gz: e3eedba515854389b26c77e190e8d3c231ded0fa
4
+ data.tar.gz: 4fc9e36e7f238177a1690901fcd246716aeebfd1
5
5
  SHA512:
6
- metadata.gz: 09a10d4381172c2f214577762906ed8c145660f5d85aa5f6e7d43f6835c1408b5322911d9640e32440c2add7a4a89e4a957c468e07eff60b94354fb6e2000ffd
7
- data.tar.gz: 5b776ee6a18066ff8ddc898a18eda122b9d93b28029bb0f0a6356fdd3fb7c5387f0b750c3e86d29c40b1e5f75350e2ed999b2a3058ff1211dc8b29ddda4142e8
6
+ metadata.gz: 3d17038135a9c5d34622de17b053bff67a448fcf05578e52805fd8ad76a8e21704753b1d7076cf7f3857baea086182a9520f88acd3e9ed85d83b496b67a0b486
7
+ data.tar.gz: 71b69cf303b8ce253500df122c973d38c6424e3382c0f9388c8df6c05449fed08401f812e99db8493e09e9b83b6d7a39d91b0b8a100d591f1ce67219494ef5fc
data/README.md CHANGED
@@ -1,6 +1,11 @@
1
1
  ## RSocial
2
2
 
3
- A gem for crawling social media stats on various web entities
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("the_skatenerd") #=> {:posts=>1149, :followers=>604000, :following=>921, :handle=>"the_skatenerd"}
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("TransWorldSkate") #=> {:followers=>1669313, :handle=>"TransWorldSkate"}
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.page("TransWorldSKATE") #=> {:tweets=>7360, :following=>299, :followers=>189000, :likes=>90, :handle=>"TransWorldSKATE"}
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.user("TransworldSKATEmag") #=> {:subscribers=>195811, :handle=>"TransworldSKATEmag"}
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.page("40229308") #=> {:followers=>189000, :id=>"40229308"}
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.page("ryan-bingham") #=> {:followers=>189000, :tracks=>5, :handle=>"ryan-bingham"}
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
@@ -15,5 +15,5 @@ require 'rsocial/soundcloud'
15
15
  require 'rsocial/soundcloud/client'
16
16
 
17
17
  module RSocial
18
- VERSION = '0.7.0'
18
+ VERSION = '3.6.0'
19
19
  end
@@ -1,6 +1,6 @@
1
1
  module RSocial
2
2
  module Facebook
3
- def self.client(options={browser:"firefox"})
3
+ def self.client(options={browser:"chrome"})
4
4
  Facebook::Client.new(options)
5
5
  end
6
6
  end
@@ -3,6 +3,7 @@ module RSocial
3
3
  class Client < Runner
4
4
  Dir[File.expand_path('../client/*.rb', __FILE__)].each{|f| require f}
5
5
  include Facebook::Client::Pages
6
+ include Facebook::Client::Posts
6
7
  end
7
8
  end
8
9
  end
@@ -9,26 +9,20 @@ module RSocial
9
9
  ).merge(:handle => handle)
10
10
  end
11
11
 
12
- def posts(handle)
13
- run(
14
- "https://www.facebook.com/#{handle}/posts",
15
- posts_injections
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
- :followers => "return document.getElementById('PagesLikesCountDOMID').childNodes[0].textContent"
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
@@ -1,6 +1,6 @@
1
1
  module RSocial
2
2
  module Instagram
3
- def self.client(options={browser:"firefox"})
3
+ def self.client(options={browser:"chrome"})
4
4
  Instagram::Client.new(options)
5
5
  end
6
6
  end
@@ -3,6 +3,7 @@ module RSocial
3
3
  class Client < Runner
4
4
  Dir[File.expand_path('../client/*.rb', __FILE__)].each{|f| require f}
5
5
  include Instagram::Client::Users
6
+ include Instagram::Client::Tags
6
7
  end
7
8
  end
8
9
  end
@@ -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
- :posts => "return document.getElementsByClassName('_s53mj')[0].getElementsByClassName('_bkw5z')[0].innerHTML",
17
- :followers => "return document.getElementsByClassName('_s53mj')[1].getElementsByClassName('_bkw5z')[0].innerHTML",
18
- :following => "return document.getElementsByClassName('_s53mj')[2].getElementsByClassName('_bkw5z')[0].innerHTML"
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
@@ -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
- #Headless::Exception: Xvfb not found on your system
12
- Headless.ly do
13
- @wd = Driver.instance.send( "firefox" ) #@options[:browser]
14
- @wd.navigate.to url
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
- results[key.to_sym] = execute(script)
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
- h2n(@wd.execute_script(script))
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
@@ -1,6 +1,6 @@
1
1
  module RSocial
2
2
  module Shazam
3
- def self.client(options={browser:"firefox"})
3
+ def self.client(options={browser:"chrome"})
4
4
  Shazam::Client.new(options)
5
5
  end
6
6
  end
@@ -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
- :followers => "return document.getElementsByClassName('js-followers')[0].textContent"
22
+ :follower_count => "return document.getElementsByClassName('js-followers')[0].textContent"
17
23
  }
18
24
  end
19
25
  end
@@ -1,6 +1,6 @@
1
1
  module RSocial
2
2
  module Soundcloud
3
- def self.client(options={browser:"firefox"})
3
+ def self.client(options={browser:"chrome"})
4
4
  Soundcloud::Client.new(options)
5
5
  end
6
6
  end
@@ -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
- :followers => "return document.getElementsByClassName('infoStats__value')[0].textContent",
17
- :tracks => "return document.getElementsByClassName('infoStats__value')[2].textContent"
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
@@ -1,6 +1,6 @@
1
1
  module RSocial
2
2
  module Twitter
3
- def self.client(options={browser:"firefox"})
3
+ def self.client(options={browser:"chrome"})
4
4
  Twitter::Client.new(options)
5
5
  end
6
6
  end
@@ -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
- :tweets => "return document.getElementsByClassName('ProfileNav-list')[0].childNodes[1].getElementsByClassName('ProfileNav-value')[0].textContent",
17
- :following => "return document.getElementsByClassName('ProfileNav-list')[0].childNodes[2].getElementsByClassName('ProfileNav-value')[0].textContent",
18
- :followers => "return document.getElementsByClassName('ProfileNav-list')[0].childNodes[3].getElementsByClassName('ProfileNav-value')[0].textContent",
19
- :likes => "return document.getElementsByClassName('ProfileNav-list')[0].childNodes[4].getElementsByClassName('ProfileNav-value')[0].textContent"
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
@@ -1,5 +1,3 @@
1
- require 'headless'
2
-
3
1
  module RSocial
4
2
  class Utils
5
3
  def human_to_number(human)
@@ -1,6 +1,6 @@
1
1
  module RSocial
2
2
  module Youtube
3
- def self.client(options={browser:"firefox"})
3
+ def self.client(options={browser:"chrome"})
4
4
  Youtube::Client.new(options)
5
5
  end
6
6
  end
@@ -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
- :subscribers => "return document.getElementsByClassName('yt-subscription-button-subscriber-count-branded-horizontal')[0].textContent"
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
- :subscribers => "return document.getElementsByClassName('yt-subscription-button-subscriber-count-branded-horizontal')[0].textContent"
22
+ :subscriber_count => "return document.getElementsByClassName('yt-subscription-button-subscriber-count-branded-horizontal')[0].textContent"
17
23
  }
18
24
  end
19
25
  end
@@ -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 "guard"
11
- s.add_development_dependency "guard-rspec"
12
- s.add_development_dependency "pry"
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[:followers]).to be_an Integer
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,13 @@
1
+ describe RSocial::Facebook::Client::Posts do
2
+ describe 'Facebook.client.post()' do
3
+
4
+ before(:each) do
5
+ @client = RSocial::Facebook.client({})
6
+ @user = @client.page("RyanBingham")
7
+ end
8
+
9
+ it 'should find post stats' do
10
+ end
11
+
12
+ end
13
+ end
@@ -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[:posts]).to be_an Integer
12
- expect(@user[:following]).to be_an Integer
13
- expect(@user[:followers]).to be_an Integer
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,7 +8,7 @@ describe RSocial::Shazam::Client::Users do
8
8
 
9
9
  #{:followers=>"254,682"}
10
10
  it 'should find user stats' do
11
- expect(@user[:followers]).to be_an Integer
11
+ expect(@user[:follower_count]).to be_an Integer
12
12
  end
13
13
 
14
14
  end
@@ -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[:followers]).to be_an Integer
12
- expect(@user[:tracks]).to be_an Integer
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[:tweets]).to be_an Integer
12
- expect(@user[:following]).to be_an Integer
13
- expect(@user[:followers]).to be_an Integer
14
- expect(@user[:likes]).to be_an Integer
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,6 +8,6 @@ describe RSocial::Twitter do
8
8
  it 'should handle client' do
9
9
  expect(@client.class.to_s).to eq "RSocial::Twitter::Client"
10
10
  end
11
-
11
+
12
12
  end
13
13
  end
@@ -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[:subscribers]).to be_an Integer
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[:subscribers]).to be_an Integer
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: 0.7.0
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: 2016-10-22 00:00:00.000000000 Z
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: guard
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.0.0.beta3.1
75
+ version: 3.6.0
132
76
  - - ">="
133
77
  - !ruby/object:Gem::Version
134
- version: 3.0.0.beta3.1
135
- type: :runtime
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.0.0.beta3.1
85
+ version: 3.6.0
142
86
  - - ">="
143
87
  - !ruby/object:Gem::Version
144
- version: 3.0.0.beta3.1
88
+ version: 3.6.0
145
89
  - !ruby/object:Gem::Dependency
146
- name: headless
90
+ name: selenium-webdriver
147
91
  requirement: !ruby/object:Gem::Requirement
148
92
  requirements:
149
93
  - - "~>"
150
94
  - !ruby/object:Gem::Version
151
- version: '2.3'
95
+ version: 3.6.0
152
96
  - - ">="
153
97
  - !ruby/object:Gem::Version
154
- version: 2.3.1
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: '2.3'
105
+ version: 3.6.0
162
106
  - - ">="
163
107
  - !ruby/object:Gem::Version
164
- version: 2.3.1
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.5.1
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