linkedin-v2 0.1.3

Sign up to get free protection for your applications and to get access to all the features.
Files changed (66) hide show
  1. checksums.yaml +7 -0
  2. data/CHANGELOG.md +10 -0
  3. data/CONTRIBUTING.md +1 -0
  4. data/Gemfile +8 -0
  5. data/LICENSE +22 -0
  6. data/README.md +224 -0
  7. data/Rakefile +19 -0
  8. data/lib/linked_in/access_token.rb +24 -0
  9. data/lib/linked_in/api.rb +108 -0
  10. data/lib/linked_in/api_resource.rb +180 -0
  11. data/lib/linked_in/communications.rb +40 -0
  12. data/lib/linked_in/configuration.rb +41 -0
  13. data/lib/linked_in/connection.rb +35 -0
  14. data/lib/linked_in/errors.rb +73 -0
  15. data/lib/linked_in/jobs.rb +11 -0
  16. data/lib/linked_in/mash.rb +68 -0
  17. data/lib/linked_in/media.rb +13 -0
  18. data/lib/linked_in/oauth2.rb +223 -0
  19. data/lib/linked_in/organizations.rb +217 -0
  20. data/lib/linked_in/people.rb +151 -0
  21. data/lib/linked_in/raise_error.rb +28 -0
  22. data/lib/linked_in/search.rb +70 -0
  23. data/lib/linked_in/share_and_social_stream.rb +143 -0
  24. data/lib/linked_in/version.rb +3 -0
  25. data/lib/linkedin-v2.rb +52 -0
  26. data/linkedin-v2.gemspec +39 -0
  27. data/pkg/linkedin-oauth2-2.0.0.gem +0 -0
  28. data/spec/linked_in/api/api_spec.rb +41 -0
  29. data/spec/linked_in/api/communications_spec.rb +13 -0
  30. data/spec/linked_in/api/jobs_spec.rb +33 -0
  31. data/spec/linked_in/api/organizations_spec.rb +54 -0
  32. data/spec/linked_in/api/people_spec.rb +191 -0
  33. data/spec/linked_in/api/search_spec.rb +71 -0
  34. data/spec/linked_in/api/share_and_social_stream_spec.rb +87 -0
  35. data/spec/linked_in/configuration_spec.rb +46 -0
  36. data/spec/linked_in/connection_spec.rb +10 -0
  37. data/spec/linked_in/module_loading_spec.rb +23 -0
  38. data/spec/linked_in/oauth/access_token_spec.rb +27 -0
  39. data/spec/linked_in/oauth/auth_code_spec.rb +86 -0
  40. data/spec/linked_in/oauth/credentials_spec.rb +96 -0
  41. data/spec/linked_in/oauth/get_access_token_spec.rb +108 -0
  42. data/spec/spec_helper.rb +16 -0
  43. data/spec/vcr_cassettes/access_token_success.yml +99 -0
  44. data/spec/vcr_cassettes/bad_code.yml +99 -0
  45. data/spec/vcr_cassettes/organization_data.yml +51 -0
  46. data/spec/vcr_cassettes/people_picture_urls.yml +52 -0
  47. data/spec/vcr_cassettes/people_profile_connections_fields.yml +52 -0
  48. data/spec/vcr_cassettes/people_profile_connections_other.yml +52 -0
  49. data/spec/vcr_cassettes/people_profile_connections_self.yml +52 -0
  50. data/spec/vcr_cassettes/people_profile_fields_complex.yml +52 -0
  51. data/spec/vcr_cassettes/people_profile_fields_simple.yml +52 -0
  52. data/spec/vcr_cassettes/people_profile_lang_spanish.yml +53 -0
  53. data/spec/vcr_cassettes/people_profile_multiple_fields.yml +52 -0
  54. data/spec/vcr_cassettes/people_profile_multiple_uids.yml +52 -0
  55. data/spec/vcr_cassettes/people_profile_multiple_uids_and_urls.yml +52 -0
  56. data/spec/vcr_cassettes/people_profile_multiple_urls.yml +52 -0
  57. data/spec/vcr_cassettes/people_profile_new_connections_fields.yml +52 -0
  58. data/spec/vcr_cassettes/people_profile_new_connections_other.yml +52 -0
  59. data/spec/vcr_cassettes/people_profile_new_connections_self.yml +52 -0
  60. data/spec/vcr_cassettes/people_profile_other_uid.yml +57 -0
  61. data/spec/vcr_cassettes/people_profile_other_url.yml +54 -0
  62. data/spec/vcr_cassettes/people_profile_own.yml +57 -0
  63. data/spec/vcr_cassettes/people_profile_own_secure.yml +53 -0
  64. data/spec/vcr_cassettes/people_profile_skills.yml +52 -0
  65. data/spec/vcr_cassettes/unavailable.yml +99 -0
  66. metadata +285 -0
@@ -0,0 +1,108 @@
1
+ require "spec_helper"
2
+
3
+ describe "Get OAuth2 Access Token" do
4
+ code = "dummy_code"
5
+ client_id = "dummy_client_id"
6
+ client_secret = "dummy_client_secret"
7
+ redirect_uri = "http://lvh.me:5000"
8
+
9
+ before(:example) do
10
+ LinkedIn.configure do |config|
11
+ config.client_id = client_id
12
+ config.client_secret = client_secret
13
+ config.redirect_uri = redirect_uri
14
+ end
15
+ end
16
+ subject { LinkedIn::OAuth2.new }
17
+
18
+ shared_examples "Success Access Token Fetch" do |*args|
19
+ it "Returns an access token object" do
20
+ VCR.use_cassette("access token success") do
21
+ expect(subject.get_access_token(*args)).to be_kind_of LinkedIn::AccessToken
22
+ end
23
+ end
24
+
25
+ it "Sets the AcessToken object" do
26
+ VCR.use_cassette("access token success") do
27
+ subject.get_access_token(*args)
28
+ expect(subject.access_token).to be_kind_of LinkedIn::AccessToken
29
+ end
30
+ end
31
+
32
+ it "Generated an access token string" do
33
+ VCR.use_cassette("access token success") do
34
+ subject.get_access_token(*args)
35
+ expect(subject.access_token.token).to be_kind_of String
36
+ end
37
+ end
38
+ end
39
+
40
+ shared_examples "Raises InvalidRequest" do |*args|
41
+ it "Raises InvalidRequest" do
42
+ expect{subject.get_access_token(*args)}.to raise_error(LinkedIn::InvalidRequest, msg)
43
+ end
44
+
45
+ it "Has no AccessToken object set" do
46
+ expect(subject.access_token).to be_nil
47
+ end
48
+ end
49
+
50
+ context "When a auth_code is provided" do
51
+ include_examples "Success Access Token Fetch", code
52
+ end
53
+
54
+ context "When no code is given" do
55
+ let(:msg) {LinkedIn::ErrorMessages.no_auth_code}
56
+ include_examples "Raises InvalidRequest"
57
+ end
58
+
59
+ context "When redirect_uri is not configured and not passed in" do
60
+ before(:example) do
61
+ LinkedIn.configure { |config| config.redirect_uri = nil }
62
+ end
63
+ let(:msg) {LinkedIn::ErrorMessages.redirect_uri}
64
+ include_examples "Raises InvalidRequest", code
65
+ end
66
+
67
+ context "When redirect_uri is configured and not passed in" do
68
+ before(:example) do
69
+ LinkedIn.configure { |config| config.redirect_uri = redirect_uri }
70
+ end
71
+ include_examples "Success Access Token Fetch", code
72
+ end
73
+
74
+ context "When redirect_uri is passed in" do
75
+ include_examples "Success Access Token Fetch", code, {redirect_uri: redirect_uri}
76
+ end
77
+
78
+ context "When redirect_uri was previously set by auth_code_url" do
79
+ before(:example) do
80
+ LinkedIn.configure { |config| config.redirect_uri = nil }
81
+ subject.auth_code_url(redirect_uri: redirect_uri)
82
+ end
83
+ include_examples "Success Access Token Fetch", code
84
+ end
85
+
86
+ context "When redirect_uri does not match previous setting" do
87
+ let(:msg) {LinkedIn::ErrorMessages.redirect_uri_mismatch}
88
+ include_examples "Raises InvalidRequest", code, {redirect_uri: "different"}
89
+ end
90
+
91
+ context "When the service is unavailable" do
92
+ let(:msg) { /temporarily_unavailable/ }
93
+ it "raises an OAuthError" do
94
+ VCR.use_cassette("unavailable") do
95
+ expect {subject.get_access_token(code)}.to raise_error(LinkedIn::OAuthError, msg)
96
+ end
97
+ end
98
+ end
99
+
100
+ context "When the request is invalid" do
101
+ let(:msg) { /invalid_request/ }
102
+ it "raises an OAuthError" do
103
+ VCR.use_cassette("bad code") do
104
+ expect {subject.get_access_token(code)}.to raise_error(LinkedIn::OAuthError, msg)
105
+ end
106
+ end
107
+ end
108
+ end
@@ -0,0 +1,16 @@
1
+ # This file is required by all tests
2
+ require 'linkedin-v2'
3
+
4
+ # Record and playback LinkedIn API calls
5
+ require 'vcr'
6
+ VCR.configure do |config|
7
+ config.cassette_library_dir = "spec/vcr_cassettes"
8
+ config.hook_into :webmock
9
+ config.default_cassette_options = { :record => :all } # TODO WHILE WE'RE FIXING THINGS.
10
+ end
11
+
12
+ require 'webmock/rspec'
13
+
14
+ # https://coveralls.io/r/emorikawa/linkedin-oauth2
15
+ #require 'coveralls'
16
+ #Coveralls.wear!
@@ -0,0 +1,99 @@
1
+ ---
2
+ http_interactions:
3
+ - request:
4
+ method: post
5
+ uri: https://www.linkedin.com/uas/oauth2/accessToken
6
+ body:
7
+ encoding: UTF-8
8
+ string: client_id=dummy_client_id&client_secret=dummy_client_secret&code=dummy_code&grant_type=authorization_code&raise_errors=true&redirect_uri=http%3A%2F%2Flvh.me%3A5000
9
+ headers:
10
+ User-Agent:
11
+ - Faraday v0.10.1
12
+ Content-Type:
13
+ - application/x-www-form-urlencoded
14
+ Accept-Encoding:
15
+ - gzip;q=1.0,deflate;q=0.6,identity;q=0.3
16
+ Accept:
17
+ - "*/*"
18
+ response:
19
+ status:
20
+ code: 503
21
+ message: Service Unavailable
22
+ headers:
23
+ Server:
24
+ - Apache-Coyote/1.1
25
+ P3p:
26
+ - CP="CAO CUR ADM DEV PSA PSD OUR"
27
+ Vary:
28
+ - Accept-Encoding
29
+ Content-Type:
30
+ - application/json;charset=UTF-8
31
+ Content-Language:
32
+ - en-US
33
+ Content-Length:
34
+ - '249'
35
+ Date:
36
+ - Tue, 01 May 2018 14:17:43 GMT
37
+ X-Fs-Uuid:
38
+ - bf6c5d0f028b2a1590a6467fed2a0000
39
+ Strict-Transport-Security:
40
+ - max-age=2592000
41
+ X-Content-Type-Options:
42
+ - nosniff
43
+ X-Xss-Protection:
44
+ - 1; mode=block
45
+ Content-Security-Policy:
46
+ - 'default-src *; connect-src ''self'' static.licdn.com media.licdn.com static-exp1.licdn.com
47
+ static-exp2.licdn.com media-exp1.licdn.com media-exp2.licdn.com https://media-src.linkedin.com/media/
48
+ wss://www.linkedin.com s.c.lnkd.licdn.com m.c.lnkd.licdn.com; img-src data:
49
+ blob: *; font-src data: *; style-src ''unsafe-inline'' ''self'' static-src.linkedin.com
50
+ *.licdn.com; script-src ''report-sample'' ''unsafe-inline'' ''unsafe-eval''
51
+ ''self'' platform.linkedin.com spdy.linkedin.com static-src.linkedin.com *.ads.linkedin.com
52
+ *.licdn.com; object-src ''none''; media-src blob: *; frame-ancestors ''self'';
53
+ report-uri https://www.linkedin.com/lite/contentsecurity?f=lg'
54
+ X-Li-Fabric:
55
+ - prod-lva1
56
+ Set-Cookie:
57
+ - _lipt=deleteMe; Expires=Thu, 01-Jan-1970 00:00:10 GMT; Path=/
58
+ - bcookie="v=2&4205eb48-a5ea-4f29-8108-bdfdfa79cb24"; domain=.linkedin.com;
59
+ Path=/; Expires=Fri, 01-May-2020 01:55:16 GMT
60
+ - bscookie="v=1&2018050114174418ef52dd-1a5f-4006-8862-b07f2a68ddb5AQHI6jMgrQdgDs4at9XOvrB5TRYgPKiD";
61
+ domain=.www.linkedin.com; Path=/; Secure; Expires=Fri, 01-May-2020 01:55:16
62
+ GMT; HttpOnly
63
+ - lang="v=2&lang=en-us"; Version=1; Domain=linkedin.com; Path=/
64
+ - leo_auth_token="GST:9_uuYMY1IHLX3WGEWhw56CYD9pzSzwHlqgPFBfHnswzOSBPKGsvR-1:1525184264:70fd3e80ad474c238a910ff8c3bfc9cfcdddafac";
65
+ Version=1; Max-Age=1799; Expires=Tue, 01-May-2018 14:47:43 GMT; Path=/
66
+ - lidc="b=VB58:g=1209:u=1:i=1525184264:t=1525270664:s=AQHROYZbcdNtaKeDJC52E_vpC8G6Ta6l";
67
+ Expires=Wed, 02 May 2018 14:17:44 GMT; domain=.linkedin.com; Path=/
68
+ - s_leo_auth_token="delete me"; Version=1; Max-Age=0; Expires=Thu, 01-Jan-1970
69
+ 00:00:10 GMT; Path=/
70
+ - sl="delete me"; Version=1; Domain=.www.linkedin.com; Max-Age=0; Expires=Thu,
71
+ 01-Jan-1970 00:00:10 GMT; Path=/
72
+ - sl="delete me"; Version=1; Max-Age=0; Expires=Thu, 01-Jan-1970 00:00:10 GMT;
73
+ Path=/
74
+ - visit="v=1&G"; Version=1; Max-Age=63072000; Expires=Thu, 30-Apr-2020 14:17:44
75
+ GMT; Path=/
76
+ X-Li-Proto:
77
+ - http/1.1
78
+ - http/1.1
79
+ Pragma:
80
+ - no-cache
81
+ Expires:
82
+ - Thu, 01 Jan 1970 00:00:00 GMT
83
+ Cache-Control:
84
+ - no-cache, no-store
85
+ Connection:
86
+ - keep-alive
87
+ X-Li-Pop:
88
+ - prod-ech2
89
+ X-Li-Uuid:
90
+ - 4avgDgKLKhVAid+m7SoAAA==
91
+ body:
92
+ encoding: ASCII-8BIT
93
+ string: '{"error_description":"the authorization server is currently unable
94
+ to handle the request : RestException{_response=RestResponse[headers={Content-Length=9511,
95
+ Content-Type=application/json, X-RestLi-Error-Response=true, X-RestLi-Protocol-Version=2.0.0}cookies=[],status=404,entityLength=9511]}
96
+ ","error":"temporarily_unavailable"}'
97
+ http_version:
98
+ recorded_at: Tue, 01 May 2018 14:17:44 GMT
99
+ recorded_with: VCR 3.0.3
@@ -0,0 +1,99 @@
1
+ ---
2
+ http_interactions:
3
+ - request:
4
+ method: post
5
+ uri: https://www.linkedin.com/uas/oauth2/accessToken
6
+ body:
7
+ encoding: UTF-8
8
+ string: client_id=dummy_client_id&client_secret=dummy_client_secret&code=dummy_code&grant_type=authorization_code&raise_errors=true&redirect_uri=http%3A%2F%2Flvh.me%3A5000
9
+ headers:
10
+ User-Agent:
11
+ - Faraday v0.10.1
12
+ Content-Type:
13
+ - application/x-www-form-urlencoded
14
+ Accept-Encoding:
15
+ - gzip;q=1.0,deflate;q=0.6,identity;q=0.3
16
+ Accept:
17
+ - "*/*"
18
+ response:
19
+ status:
20
+ code: 503
21
+ message: Service Unavailable
22
+ headers:
23
+ Server:
24
+ - Apache-Coyote/1.1
25
+ P3p:
26
+ - CP="CAO CUR ADM DEV PSA PSD OUR"
27
+ Vary:
28
+ - Accept-Encoding
29
+ Content-Type:
30
+ - application/json;charset=UTF-8
31
+ Content-Language:
32
+ - en-US
33
+ Content-Length:
34
+ - '249'
35
+ Date:
36
+ - Tue, 01 May 2018 14:17:44 GMT
37
+ X-Fs-Uuid:
38
+ - 4ea6a43b028b2a1510635f10032b0000
39
+ Strict-Transport-Security:
40
+ - max-age=2592000
41
+ X-Content-Type-Options:
42
+ - nosniff
43
+ X-Xss-Protection:
44
+ - 1; mode=block
45
+ Content-Security-Policy:
46
+ - 'default-src *; connect-src ''self'' static.licdn.com media.licdn.com static-exp1.licdn.com
47
+ static-exp2.licdn.com media-exp1.licdn.com media-exp2.licdn.com https://media-src.linkedin.com/media/
48
+ wss://www.linkedin.com s.c.lnkd.licdn.com m.c.lnkd.licdn.com; img-src data:
49
+ blob: *; font-src data: *; style-src ''unsafe-inline'' ''self'' static-src.linkedin.com
50
+ *.licdn.com; script-src ''report-sample'' ''unsafe-inline'' ''unsafe-eval''
51
+ ''self'' platform.linkedin.com spdy.linkedin.com static-src.linkedin.com *.ads.linkedin.com
52
+ *.licdn.com; object-src ''none''; media-src blob: *; frame-ancestors ''self'';
53
+ report-uri https://www.linkedin.com/lite/contentsecurity?f=lg'
54
+ X-Li-Fabric:
55
+ - prod-lva1
56
+ Set-Cookie:
57
+ - _lipt=deleteMe; Expires=Thu, 01-Jan-1970 00:00:10 GMT; Path=/
58
+ - bcookie="v=2&cddc5842-8ac1-40be-8051-2e3e98f9c0c8"; domain=.linkedin.com;
59
+ Path=/; Expires=Fri, 01-May-2020 01:55:17 GMT
60
+ - bscookie="v=1&2018050114174590478047-e07b-4d00-8c27-982afedc45deAQEsbZz-cnu6aaApudE86HNqsbh-VKak";
61
+ domain=.www.linkedin.com; Path=/; Secure; Expires=Fri, 01-May-2020 01:55:17
62
+ GMT; HttpOnly
63
+ - lang="v=2&lang=en-us"; Version=1; Domain=linkedin.com; Path=/
64
+ - leo_auth_token="GST:UYc_4AhwNzUOeZKN5j6EoJHHo3lOXlfQnv_lliH-MQUO2zA0aOt1GP:1525184265:3b2083ec3dafeaa73166b385b5047fed69d4c376";
65
+ Version=1; Max-Age=1799; Expires=Tue, 01-May-2018 14:47:44 GMT; Path=/
66
+ - lidc="b=VB88:g=1230:u=1:i=1525184265:t=1525270665:s=AQG1hoFytmuJ4bX6yweMD8dsESg_j4id";
67
+ Expires=Wed, 02 May 2018 14:17:45 GMT; domain=.linkedin.com; Path=/
68
+ - s_leo_auth_token="delete me"; Version=1; Max-Age=0; Expires=Thu, 01-Jan-1970
69
+ 00:00:10 GMT; Path=/
70
+ - sl="delete me"; Version=1; Domain=.www.linkedin.com; Max-Age=0; Expires=Thu,
71
+ 01-Jan-1970 00:00:10 GMT; Path=/
72
+ - sl="delete me"; Version=1; Max-Age=0; Expires=Thu, 01-Jan-1970 00:00:10 GMT;
73
+ Path=/
74
+ - visit="v=1&G"; Version=1; Max-Age=63072000; Expires=Thu, 30-Apr-2020 14:17:45
75
+ GMT; Path=/
76
+ X-Li-Proto:
77
+ - http/1.1
78
+ - http/1.1
79
+ Pragma:
80
+ - no-cache
81
+ Expires:
82
+ - Thu, 01 Jan 1970 00:00:00 GMT
83
+ Cache-Control:
84
+ - no-cache, no-store
85
+ Connection:
86
+ - keep-alive
87
+ X-Li-Pop:
88
+ - prod-edc2
89
+ X-Li-Uuid:
90
+ - BYMxOwKLKhWAF4VFAysAAA==
91
+ body:
92
+ encoding: ASCII-8BIT
93
+ string: '{"error_description":"the authorization server is currently unable
94
+ to handle the request : RestException{_response=RestResponse[headers={Content-Length=9511,
95
+ Content-Type=application/json, X-RestLi-Error-Response=true, X-RestLi-Protocol-Version=2.0.0}cookies=[],status=404,entityLength=9511]}
96
+ ","error":"temporarily_unavailable"}'
97
+ http_version:
98
+ recorded_at: Tue, 01 May 2018 14:17:45 GMT
99
+ recorded_with: VCR 3.0.3
@@ -0,0 +1,51 @@
1
+ ---
2
+ http_interactions:
3
+ - request:
4
+ method: get
5
+ uri: https://api.linkedin.com/v2/organizations/11571530
6
+ body:
7
+ encoding: US-ASCII
8
+ string: ''
9
+ headers:
10
+ X-Li-Format:
11
+ - json
12
+ Authorization:
13
+ - Bearer dummy access token
14
+ User-Agent:
15
+ - Faraday v0.10.1
16
+ Accept-Encoding:
17
+ - gzip;q=1.0,deflate;q=0.6,identity;q=0.3
18
+ Accept:
19
+ - "*/*"
20
+ response:
21
+ status:
22
+ code: 401
23
+ message: Unauthorized
24
+ headers:
25
+ X-Restli-Gateway-Error:
26
+ - 'true'
27
+ Content-Type:
28
+ - application/json
29
+ Date:
30
+ - Tue, 01 May 2018 14:17:30 GMT
31
+ X-Li-Fabric:
32
+ - prod-lva1
33
+ Transfer-Encoding:
34
+ - chunked
35
+ Connection:
36
+ - keep-alive
37
+ X-Li-Pop:
38
+ - prod-edc2
39
+ X-Li-Proto:
40
+ - http/1.1
41
+ X-Li-Uuid:
42
+ - 2OAVov6KKhXAKU2piisAAA==
43
+ Set-Cookie:
44
+ - lidc="b=VB17:g=1697:u=1:i=1525184250:t=1525270650:s=AQG1i0-x5NI4UE0yKGSSlmGeQMDgyeoA";
45
+ Expires=Wed, 02 May 2018 14:17:30 GMT; domain=.linkedin.com; Path=/
46
+ body:
47
+ encoding: UTF-8
48
+ string: '{"serviceErrorCode":65600,"message":"Invalid access token","status":401}'
49
+ http_version:
50
+ recorded_at: Tue, 01 May 2018 14:17:30 GMT
51
+ recorded_with: VCR 3.0.3
@@ -0,0 +1,52 @@
1
+ ---
2
+ http_interactions:
3
+ - request:
4
+ method: get
5
+ uri: https://api.linkedin.com/v2/me/picture-urls::(original)
6
+ body:
7
+ encoding: US-ASCII
8
+ string: ''
9
+ headers:
10
+ X-Li-Format:
11
+ - json
12
+ Authorization:
13
+ - Bearer AQVM91zzF-bLiOfCsTi8ktxnq99l-tW9meri8F9ZEWAuHf5g1bO_Pa4p0nFwKvZ7VFdSERAnJZq3eNOq6BzDPFNIyGIy50s-7HkLq2hE5uy6HrAQrsMAQR_qZxnBrSD11g_M2sF5XB5fUHZOXEQFgFaXB0M19VUAsvsz3yg-7zMI7w9Zn_DYTLO1e2W9VEZrOgVmRNt1XBIT_pdQO7pQkKv4702yJTrIBOuhZWNLZRClPHd2RRhPf2SJeTkodbnL4xSvzcyEPpLaTPyZIVJnBcsAzYFiG_pJtyGs7x-iWbUZsYgnUVSy8Wg-5eqmvze5tuZdICIP0PJ0AVMNGOxRRiLOEh8MSg
14
+ User-Agent:
15
+ - Faraday v0.10.1
16
+ Accept-Encoding:
17
+ - gzip;q=1.0,deflate;q=0.6,identity;q=0.3
18
+ Accept:
19
+ - "*/*"
20
+ response:
21
+ status:
22
+ code: 404
23
+ message: Not Found
24
+ headers:
25
+ X-Restli-Gateway-Error:
26
+ - 'true'
27
+ Content-Type:
28
+ - application/json
29
+ Date:
30
+ - Tue, 01 May 2018 14:17:38 GMT
31
+ X-Li-Fabric:
32
+ - prod-lva1
33
+ Transfer-Encoding:
34
+ - chunked
35
+ Connection:
36
+ - keep-alive
37
+ X-Li-Pop:
38
+ - prod-ech2
39
+ X-Li-Proto:
40
+ - http/1.1
41
+ Set-Cookie:
42
+ - lidc="b=VB96:g=1148:u=15:i=1525184258:t=1525268970:s=AQEbKiX38Wd1TL5kfyYniOxQdy73nOc8"
43
+ X-Li-Route-Key:
44
+ - '"b=VB96:g=1148:u=15:i=1525184258:t=1525268970:s=AQEbKiX38Wd1TL5kfyYniOxQdy73nOc8"'
45
+ X-Li-Uuid:
46
+ - r1RXpgCLKhWQOpqF2CoAAA==
47
+ body:
48
+ encoding: UTF-8
49
+ string: '{"serviceErrorCode":0,"message":"Resource me does not exist","status":404}'
50
+ http_version:
51
+ recorded_at: Tue, 01 May 2018 14:17:38 GMT
52
+ recorded_with: VCR 3.0.3
@@ -0,0 +1,52 @@
1
+ ---
2
+ http_interactions:
3
+ - request:
4
+ method: get
5
+ uri: https://api.linkedin.com/v2/me/connections?projection=(%5B%22id%22,%20%22industry%22%5D)
6
+ body:
7
+ encoding: US-ASCII
8
+ string: ''
9
+ headers:
10
+ X-Li-Format:
11
+ - json
12
+ Authorization:
13
+ - Bearer AQVM91zzF-bLiOfCsTi8ktxnq99l-tW9meri8F9ZEWAuHf5g1bO_Pa4p0nFwKvZ7VFdSERAnJZq3eNOq6BzDPFNIyGIy50s-7HkLq2hE5uy6HrAQrsMAQR_qZxnBrSD11g_M2sF5XB5fUHZOXEQFgFaXB0M19VUAsvsz3yg-7zMI7w9Zn_DYTLO1e2W9VEZrOgVmRNt1XBIT_pdQO7pQkKv4702yJTrIBOuhZWNLZRClPHd2RRhPf2SJeTkodbnL4xSvzcyEPpLaTPyZIVJnBcsAzYFiG_pJtyGs7x-iWbUZsYgnUVSy8Wg-5eqmvze5tuZdICIP0PJ0AVMNGOxRRiLOEh8MSg
14
+ User-Agent:
15
+ - Faraday v0.10.1
16
+ Accept-Encoding:
17
+ - gzip;q=1.0,deflate;q=0.6,identity;q=0.3
18
+ Accept:
19
+ - "*/*"
20
+ response:
21
+ status:
22
+ code: 404
23
+ message: Not Found
24
+ headers:
25
+ X-Restli-Gateway-Error:
26
+ - 'true'
27
+ Content-Type:
28
+ - application/json
29
+ Date:
30
+ - Tue, 01 May 2018 14:17:36 GMT
31
+ X-Li-Fabric:
32
+ - prod-lva1
33
+ Transfer-Encoding:
34
+ - chunked
35
+ Connection:
36
+ - keep-alive
37
+ X-Li-Pop:
38
+ - prod-edc2
39
+ X-Li-Proto:
40
+ - http/1.1
41
+ Set-Cookie:
42
+ - lidc="b=VB96:g=1148:u=15:i=1525184256:t=1525268970:s=AQGuzPOyk54isP6qZQ6uB-89hgh9VWud"
43
+ X-Li-Route-Key:
44
+ - '"b=VB96:g=1148:u=15:i=1525184256:t=1525268970:s=AQGuzPOyk54isP6qZQ6uB-89hgh9VWud"'
45
+ X-Li-Uuid:
46
+ - 84sWIQCLKhWQ3EKPiisAAA==
47
+ body:
48
+ encoding: UTF-8
49
+ string: '{"serviceErrorCode":0,"message":"Resource me does not exist","status":404}'
50
+ http_version:
51
+ recorded_at: Tue, 01 May 2018 14:17:36 GMT
52
+ recorded_with: VCR 3.0.3