linkedin 0.1.0 → 0.1.1

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.
@@ -1,9 +1,61 @@
1
- # linkedin
1
+ # LinkedIn
2
+
3
+ Ruby wrapper for the [LinkedIn API](http://developer.linkedin.com). Heavily inspired by [John Nunemaker's](http://github.com/jnunemaker) [Twitter gem](http://github.com/jnunemaker/twitter), the LinkedIn gem provides an easy-to-use wrapper for LinkedIn's Oauth/XML APIs.
4
+
5
+ ## Installation
6
+
7
+ sudo gem install gemcutter
8
+ gem tumble
9
+ sudo gem install linkedin
10
+
11
+ ## Usage
12
+
13
+ ### Authenticate
14
+
15
+ LinkedIn's API uses Oauth for authentication. Luckily, the LinkedIn gem hides most of the gory details from you.
16
+
17
+ require 'rubygems'
18
+ require 'linkedin'
19
+
20
+ # get your api keys at https://www.linkedin.com/secure/developer
21
+ client = LinkedIn::Client.new('your_consumer_key', 'your_consumer_secret')
22
+ rtoken = client.request_token.token
23
+ rsecret = client.request_token.secret
24
+
25
+ # to test from your desktop, open the following url in your browser
26
+ # and record the pin it gives you
27
+ client.request_token.authorize_url
28
+ => "https://api.linkedin.com/uas/oauth/authorize?oauth_token=<generated_token>"
29
+
30
+ # then fetch your access keys
31
+ client.authorize_from_request(rtoken, rsecret, pin)
32
+ => ["OU812", "8675309"] # <= save these for future requests
33
+
34
+ # or authorize from previously fetched access keys
35
+ c.authorize_from_access("OU812", "8675309")
36
+
37
+ # you're now free to move about the cabin, call any API method
38
+
39
+ ### Profile examples
40
+
41
+ # get the profile for the authenticated user
42
+ client.profile
43
+
44
+ # get a profile for someone found in network via ID
45
+ client.profile(:id => 'gNma67_AdI')
46
+
47
+ # get a profile for someone via their public profile url
48
+ client.profile(:url => 'http://www.linkedin.com/in/netherland')
49
+
50
+
51
+
52
+ More examples in the [examples folder](http://github.com/pengwynn/linkedin/blob/master/examples).
53
+
2
54
 
3
- Ruby wrapper for the [LinkedIn API](http://developer.linkedin.com)
4
55
 
5
56
  ## TODO
6
- * Implement Search, Status, Invitation APIs
57
+
58
+ * Implement Messaging APIs
7
59
 
8
60
  ## Note on Patches/Pull Requests
9
61
 
data/VERSION CHANGED
@@ -1 +1 @@
1
- 0.1.0
1
+ 0.1.1
@@ -0,0 +1,21 @@
1
+ require 'rubygems'
2
+ require 'linkedin'
3
+
4
+ # get your api keys at https://www.linkedin.com/secure/developer
5
+ client = LinkedIn::Client.new('your_consumer_key', 'your_consumer_secret')
6
+ rtoken = client.request_token.token
7
+ rsecret = client.request_token.secret
8
+
9
+ # to test from your desktop, open the following url in your browser
10
+ # and record the pin it gives you
11
+ client.request_token.authorize_url
12
+ => "https://api.linkedin.com/uas/oauth/authorize?oauth_token=<generated_token>"
13
+
14
+ # then fetch your access keys
15
+ client.authorize_from_request(rtoken, rsecret, pin)
16
+ => ["OU812", "8675309"] # <= save these for future requests
17
+
18
+ # or authorize from previously fetched access keys
19
+ c.authorize_from_access("OU812", "8675309")
20
+
21
+ # you're now free to move about the cabin, call any API method
@@ -0,0 +1,12 @@
1
+ # AUTHENTICATE FIRST found in examples/authenticate.rb
2
+
3
+ # client is a LinkedIn::Client
4
+
5
+ # get network updates for the authenticated user
6
+ client.network_updates
7
+
8
+ # get profile picture changes
9
+ client.network_updates(:type => 'PICT')
10
+
11
+ # view connections for the currently authenticated user
12
+ client.connections
@@ -0,0 +1,14 @@
1
+ # AUTHENTICATE FIRST found in examples/authenticate.rb
2
+
3
+ # client is a LinkedIn::Client
4
+
5
+ # get the profile for the authenticated user
6
+ client.profile
7
+
8
+ # get a profile for someone found in network via ID
9
+ client.profile(:id => 'gNma67_AdI')
10
+
11
+ # get a profile for someone via their public profile url
12
+ client.profile(:url => 'http://www.linkedin.com/in/netherland')
13
+
14
+
@@ -0,0 +1,9 @@
1
+ # AUTHENTICATE FIRST found in examples/authenticate.rb
2
+
3
+ # client is a LinkedIn::Client
4
+
5
+ # update status for the authenticated user
6
+ client.update_status('is playing with the LinkedIn Ruby gem')
7
+
8
+ # clear status for the currently logged in user
9
+ client.clear_status
@@ -0,0 +1,10 @@
1
+ require 'lib/linkedin'
2
+ c = LinkedIn::Client.new('shSB1C3K_Xq0xZ0U9w2VqSoKYhv2ISwFfNpdgrU4rGX3uiaNwbeCYifuGBlJvIc1', 'Xy8dprsITio46xj4jonNE27ZyNILSbHmMVDN1aEzRWVQk-eHJ2aXIkk8vwZUSgJd')
3
+ c.authorize_from_access("74f09d7b-3a41-4a01-8c6e-2b1072a046bc", "fcc8399e-3453-4328-9fe8-42021b73a110")
4
+
5
+ require 'lib/linkedin'
6
+ xml = File.open("test/fixtures/profile_full.xml", "r").read
7
+ p = LinkedIn::Profile.from_xml(xml)
8
+
9
+
10
+
@@ -29,7 +29,7 @@ module LinkedIn
29
29
  end
30
30
 
31
31
  # For web apps use params[:oauth_verifier], for desktop apps,
32
- # use the verifier is the pin that twitter gives users.
32
+ # use the verifier is the pin that LinkedIn gives users.
33
33
  def authorize_from_request(rtoken, rsecret, verifier_or_pin)
34
34
  request_token = ::OAuth::RequestToken.new(consumer, rtoken, rsecret)
35
35
  access_token = request_token.get_access_token(:oauth_verifier => verifier_or_pin)
@@ -88,7 +88,7 @@ module LinkedIn
88
88
  if options[:public]
89
89
  path +=":public"
90
90
  else
91
- path +=":(#{options[:fields].map{|f| f.to_s}.join(',')})"
91
+ path +=":(#{options[:fields].map{|f| f.to_s.gsub("_","-")}.join(',')})"
92
92
  end
93
93
  end
94
94
 
@@ -145,15 +145,25 @@ module LinkedIn
145
145
  end
146
146
 
147
147
  def raise_errors(response)
148
+ # Even if the XML answer contains the HTTP status code, LinkedIn also sets this code
149
+ # in the HTTP answer (thankfully).
148
150
  case response.code.to_i
151
+ when 400
152
+ data = LinkedIn::Error.from_xml(response.body)
153
+ raise RateLimitExceeded.new(data), "(#{response.code}): #{response.message} - #{data.code if data}"
154
+ when 401
155
+ data = LinkedIn::Error.from_xml(response.body)
156
+ raise Unauthorized.new(data), "(#{response.code}): #{response.message} - #{data.code if data}"
157
+ when 403
158
+ data = LinkedIn::Error.from_xml(response.body)
159
+ raise General.new(data), "(#{response.code}): #{response.message} - #{data.code if data}"
160
+ when 404
161
+ raise NotFound, "(#{response.code}): #{response.message}"
162
+ when 500
163
+ raise InformLinkedIn, "LinkedIn had an internal error. Please let them know in the forum. (#{response.code}): #{response.message}"
149
164
  when 502..503
150
165
  raise Unavailable, "(#{response.code}): #{response.message}"
151
166
  end
152
-
153
- if response.body && response.body.include?("<error>")
154
- error = LinkedIn::Error.from_xml(response.body)
155
- Raise LinkedInError, "(#{error.status}): #{error.code} - #{error.message}"
156
- end
157
167
  end
158
168
 
159
169
  def format_options_for_query(opts)
@@ -38,6 +38,7 @@ require File.join(directory, 'linked_in', 'url_resource')
38
38
  require File.join(directory, 'linked_in', 'company')
39
39
  require File.join(directory, 'linked_in', 'country')
40
40
  require File.join(directory, 'linked_in', 'education')
41
+ require File.join(directory, 'linked_in', 'error')
41
42
  require File.join(directory, 'linked_in', 'location')
42
43
  require File.join(directory, 'linked_in', 'position')
43
44
  require File.join(directory, 'linked_in', 'profile')
metadata CHANGED
@@ -1,7 +1,7 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: linkedin
3
3
  version: !ruby/object:Gem::Version
4
- version: 0.1.0
4
+ version: 0.1.1
5
5
  platform: ruby
6
6
  authors:
7
7
  - Wynn Netherland
@@ -9,7 +9,7 @@ autorequire:
9
9
  bindir: bin
10
10
  cert_chain: []
11
11
 
12
- date: 2009-11-25 00:00:00 -06:00
12
+ date: 2009-12-08 00:00:00 -06:00
13
13
  default_executable:
14
14
  dependencies:
15
15
  - !ruby/object:Gem::Dependency
@@ -96,6 +96,11 @@ files:
96
96
  - README.markdown
97
97
  - Rakefile
98
98
  - VERSION
99
+ - examples/authenticate.rb
100
+ - examples/network.rb
101
+ - examples/profile.rb
102
+ - examples/status.rb
103
+ - examples/wynn.rb
99
104
  - lib/linked_in/api_standard_profile_request.rb
100
105
  - lib/linked_in/client.rb
101
106
  - lib/linked_in/company.rb
@@ -156,3 +161,7 @@ test_files:
156
161
  - test/client_test.rb
157
162
  - test/oauth_test.rb
158
163
  - test/test_helper.rb
164
+ - examples/authenticate.rb
165
+ - examples/network.rb
166
+ - examples/profile.rb
167
+ - examples/status.rb