linkedin-topcompanies 0.0.2 → 0.0.3

Sign up to get free protection for your applications and to get access to all the features.
@@ -0,0 +1,27 @@
1
+ #!/usr/bin/env ruby
2
+ require "yaml"
3
+ require "linkedin-topcompanies"
4
+
5
+ if ARGV.length < 3
6
+ puts "usage: linkedin-top-search keywords postalcode industry"
7
+ exit
8
+ end
9
+
10
+ config = {}
11
+ if File.exists?("#{ENV['HOME']}/.linkedinrc")
12
+ config = YAML.load_file("#{ENV['HOME']}/.linkedinrc")
13
+ end
14
+
15
+ scraper = Linkedin::Topcompanies::LinkedInScraper.new(
16
+ :keywords => ARGV[0],
17
+ :postalcode => ARGV[1],
18
+ :industry => ARGV[2],
19
+ :linkedin_user => config["linkedin_user"],
20
+ :linkedin_password => config["linkedin_password"],
21
+ :debug => config["debug"]
22
+ )
23
+
24
+ result = scraper.run
25
+ result.each do |r|
26
+ puts "#{r["title"]} (#{r["count"]})"
27
+ end
@@ -38,6 +38,11 @@ if (debug) {
38
38
  console.info('LinkedIn user', linkedin_user);
39
39
  }
40
40
 
41
+ casper.dieWithError = function(error, exitCode) {
42
+ exitCode = exitCode || 1;
43
+ this.die(JSON.stringify(error), exitCode);
44
+ }
45
+
41
46
  casper.options.clientScripts = [jsPath + "/jquery.min.js"];
42
47
 
43
48
  // performs login on LinkedIn page
@@ -52,6 +57,12 @@ casper.start('http://www.linkedin.com', function() {
52
57
  // clicks Advanced people search
53
58
  casper.then(function() {
54
59
  if (debug) { console.info("Clicking advanced link..."); }
60
+ if (!this.getCurrentUrl().match("http://www.linkedin.com/home")) {
61
+ this.dieWithError({
62
+ message: "Login failed for user " + linkedin_user,
63
+ url: this.getCurrentUrl()
64
+ });
65
+ }
55
66
  this.clickLabel('Advanced', 'a');
56
67
  });
57
68
 
@@ -59,6 +70,18 @@ casper.then(function() {
59
70
  // forms with proper attributes
60
71
  casper.then(function() {
61
72
  if (debug) { console.info("Submitting search..."); }
73
+ var count = this.evaluate(function(industry) {
74
+ return $("label:contains('" + industry + "')").length;
75
+ }, industry);
76
+
77
+ // when the industry is not found
78
+ if (count < 1) {
79
+ this.dieWithError({
80
+ message: "Industry '" + industry + "' not found",
81
+ url: this.getCurrentUrl()
82
+ });
83
+ }
84
+
62
85
  this.clickLabel(industry, 'label');
63
86
  this.fill('form[name=search]', {
64
87
  keywords: keywords,
@@ -23,13 +23,18 @@ module Linkedin
23
23
  credentials = "LINKEDIN_USER='#{linkedin_user}' LINKEDIN_PASSWORD='#{linkedin_password}'"
24
24
  parameters = "KEYWORDS='#{keywords}' POSTALCODE='#{postalcode}' INDUSTRY='#{industry}'"
25
25
 
26
- command = %Q(#{credentials} casperjs #{script} "#{path}")
26
+ command = %Q(#{credentials} #{parameters} casperjs #{script} "#{path}")
27
27
  result = `#{command}`
28
28
 
29
29
  if $?.exitstatus == 0
30
30
  JSON.parse(result)
31
31
  else
32
- raise "CasperJS exittend with nonsuccess: #{result}"
32
+ begin
33
+ error = JSON.parse(result.gsub(/\e\[[0-9]*(;[0-9]+)*m/, ""))
34
+ raise error["message"]
35
+ rescue JSON::ParserError
36
+ raise result
37
+ end
33
38
  end
34
39
  end
35
40
  end
@@ -1,5 +1,5 @@
1
1
  module Linkedin
2
2
  module Topcompanies
3
- VERSION = "0.0.2"
3
+ VERSION = "0.0.3"
4
4
  end
5
5
  end
metadata CHANGED
@@ -1,7 +1,7 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: linkedin-topcompanies
3
3
  version: !ruby/object:Gem::Version
4
- version: 0.0.2
4
+ version: 0.0.3
5
5
  prerelease:
6
6
  platform: ruby
7
7
  authors:
@@ -9,7 +9,7 @@ authors:
9
9
  autorequire:
10
10
  bindir: bin
11
11
  cert_chain: []
12
- date: 2013-02-03 00:00:00.000000000 Z
12
+ date: 2013-02-18 00:00:00.000000000 Z
13
13
  dependencies:
14
14
  - !ruby/object:Gem::Dependency
15
15
  name: casperjs
@@ -46,7 +46,8 @@ dependencies:
46
46
  description: Given a keyword, an industry and a zipcode, retrieves top companies
47
47
  email:
48
48
  - felipe.coury@gmail.com
49
- executables: []
49
+ executables:
50
+ - linkedin-top-search
50
51
  extensions: []
51
52
  extra_rdoc_files: []
52
53
  files:
@@ -55,6 +56,7 @@ files:
55
56
  - LICENSE.txt
56
57
  - README.md
57
58
  - Rakefile
59
+ - bin/linkedin-top-search
58
60
  - js/jquery.min.js
59
61
  - js/linkedin.js
60
62
  - lib/linkedin-topcompanies.rb