rsocial 0.1.0 → 0.2.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: 9f0466589b828be6e2d447db318ef7acf5d46d63
4
- data.tar.gz: ff521364755db6cac833afa9708a68a3ee5598bb
3
+ metadata.gz: 1773257ff57bf2425e956b8e968fd25c89775f33
4
+ data.tar.gz: e8d9ad93e62f0733eef3bf61ee45144b155248f5
5
5
  SHA512:
6
- metadata.gz: 05a269d0a0a067de34b26c9cbe891cf3d9f36cc3b53e9ddec5daabee0d845bb3efd3fae4289f7e5607f4edcdfec2a5575d5f6e113a73ddfcb0458fdecc59592b
7
- data.tar.gz: f395c23b11c01ee7fb7946799f5863854e06186d400972de86e550176213d01f32e849ed530e70c9973a60c4db8680e0beb1c3e2cc72b481a4519fc58c9c4c68
6
+ metadata.gz: d8fa79d5275ddd3f0070c5ddc07fa8ef9cc447a7c83d34fd43e0fadc151a8ead2516034496870ab453e45c511c4859de954c9308c15f3be4b451b76f6ab59fbf
7
+ data.tar.gz: 4b649e8ae2eb7a4f2e8081bfee8c584e17111faebbe0ccf3e9c8664b9459dcda11dbb4a93146a25ae1840b6e5386bd86cbc310150d29bfc72648698f4241c568
data/.gitignore CHANGED
@@ -1 +1,2 @@
1
1
  Gemfile.lock
2
+ *.gem
data/README.md CHANGED
@@ -35,7 +35,7 @@ require 'rsocial'
35
35
 
36
36
  client = RSocial::Facebook.client(:requesting_handle => "my_handle")
37
37
 
38
- client.user("TransWorldSkate") #=> {:handle => "TransWorldSkate", :followers => "1,667,861 likes"}
38
+ client.page("TransWorldSkate") #=> {:handle => "TransWorldSkate", :followers => "1,667,861 likes"}
39
39
  ```
40
40
 
41
41
  ## Contributing
@@ -1,9 +1,10 @@
1
1
  require 'rsocial/driver'
2
+ require 'rsocial/runner'
2
3
  require 'rsocial/instagram'
3
4
  require 'rsocial/instagram/client'
4
5
  require 'rsocial/facebook'
5
6
  require 'rsocial/facebook/client'
6
7
 
7
8
  module RSocial
8
- VERSION = '0.1.0'
9
+ VERSION = '0.2.0'
9
10
  end
@@ -1,49 +1,14 @@
1
- require 'headless'
1
+ require 'singleton'
2
2
  require 'selenium-webdriver'
3
3
 
4
4
  module RSocial
5
5
  class Driver
6
- def initialize(options={})
7
- @options = options
8
- @wd = Selenium::WebDriver.for :firefox
6
+ include Singleton
7
+ def firefox
8
+ @firefox ||= Selenium::WebDriver.for :firefox
9
9
  end
10
-
11
- def run(url, executables)
12
- while_headless do
13
- @wd.navigate.to url
14
- execute_each do
15
- executables
16
- end
17
- end
18
- end
19
-
20
- private
21
-
22
- def while_headless
23
- headless = Headless.new
24
- headless.start
25
- yield
26
- ensure
27
- puts "destroy"
28
- headless.destroy
29
- end
30
-
31
- def execute_each(&block)
32
- results = {}
33
- block.call.each do |key, script|
34
- results[key.to_sym] = execute(script)
35
- end
36
- results
37
- end
38
-
39
- def execute(script)
40
- begin
41
- @wd.execute_script(script)
42
- rescue Selenium::WebDriver::Error::JavascriptError
43
- "Javascript Error"
44
- rescue Selenium::WebDriver::Error::UnknownError
45
- "UnknownError"
46
- end
10
+ def chrome
11
+ @chrome ||= Selenium::WebDriver.for :chrome
47
12
  end
48
13
  end
49
14
  end
@@ -1,6 +1,6 @@
1
1
  module RSocial
2
2
  module Facebook
3
- class Client < Driver
3
+ class Client < Runner
4
4
  Dir[File.expand_path('../client/*.rb', __FILE__)].each{|f| require f}
5
5
  include Facebook::Client::Pages
6
6
  end
@@ -5,16 +5,29 @@ module RSocial
5
5
  def page(handle)
6
6
  run(
7
7
  "https://www.facebook.com/#{handle}/",
8
- user_executables
8
+ page_injections
9
+ ).merge(:handle => handle)
10
+ end
11
+
12
+ def posts(handle)
13
+ run(
14
+ "https://www.facebook.com/#{handle}/posts",
15
+ posts_injections
9
16
  ).merge(:handle => handle)
10
17
  end
11
18
 
12
19
  private
13
20
 
14
- def user_executables
15
- executables = {}
16
- executables[:followers] = "return document.getElementById('PagesLikesCountDOMID').childNodes[0].textContent"
17
- executables
21
+ def page_injections
22
+ {
23
+ :followers => "return document.getElementById('PagesLikesCountDOMID').childNodes[0].textContent"
24
+ }
25
+ end
26
+
27
+ def posts_injections
28
+ {
29
+ :last_post_reactions => "return document.getElementsByClassName('_4arz')[0].textContent"
30
+ }
18
31
  end
19
32
  end
20
33
  end
@@ -1,6 +1,6 @@
1
1
  module RSocial
2
2
  module Instagram
3
- class Client < Driver
3
+ class Client < Runner
4
4
  Dir[File.expand_path('../client/*.rb', __FILE__)].each{|f| require f}
5
5
  include Instagram::Client::Users
6
6
  end
@@ -5,18 +5,18 @@ module RSocial
5
5
  def user(handle)
6
6
  run(
7
7
  "https://www.instagram.com/#{handle}/",
8
- user_executables
8
+ user_injections
9
9
  ).merge(:handle => handle)
10
10
  end
11
11
 
12
12
  private
13
13
 
14
- def user_executables
15
- executables = {}
16
- executables[:posts] = "return document.getElementsByClassName('_s53mj')[0].getElementsByClassName('_bkw5z')[0].innerHTML"
17
- executables[:followers] = "return document.getElementsByClassName('_s53mj')[1].getElementsByClassName('_bkw5z')[0].innerHTML"
18
- executables[:following] = "return document.getElementsByClassName('_s53mj')[2].getElementsByClassName('_bkw5z')[0].innerHTML"
19
- executables
14
+ def user_injections
15
+ {
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"
19
+ }
20
20
  end
21
21
  end
22
22
  end
@@ -0,0 +1,46 @@
1
+ require 'headless'
2
+
3
+ module RSocial
4
+ class Runner
5
+ def initialize(options={})
6
+ @options = options
7
+ end
8
+
9
+ def run(url, injections)
10
+ while_headless do
11
+ Driver.instance.firefox.navigate.to url
12
+ inject_each do
13
+ injections
14
+ end
15
+ end
16
+ end
17
+
18
+ private
19
+
20
+ def while_headless
21
+ headless = Headless.new
22
+ headless.start
23
+ yield
24
+ ensure
25
+ headless.destroy
26
+ end
27
+
28
+ def inject_each(&block)
29
+ results = {}
30
+ block.call.each do |key, script|
31
+ results[key.to_sym] = execute(script)
32
+ end
33
+ results
34
+ end
35
+
36
+ def execute(script)
37
+ begin
38
+ Driver.instance.firefox.execute_script(script)
39
+ rescue Selenium::WebDriver::Error::JavascriptError
40
+ "Javascript Error"
41
+ rescue Selenium::WebDriver::Error::UnknownError
42
+ "Unknown Error"
43
+ end
44
+ end
45
+ end
46
+ end
metadata CHANGED
@@ -1,7 +1,7 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: rsocial
3
3
  version: !ruby/object:Gem::Version
4
- version: 0.1.0
4
+ version: 0.2.0
5
5
  platform: ruby
6
6
  authors:
7
7
  - Ed Richards
@@ -95,6 +95,7 @@ files:
95
95
  - lib/rsocial/instagram.rb
96
96
  - lib/rsocial/instagram/client.rb
97
97
  - lib/rsocial/instagram/client/users.rb
98
+ - lib/rsocial/runner.rb
98
99
  - rsocial.gemspec
99
100
  homepage: http://www.github.com/advectus/rsocial
100
101
  licenses: