linkedin-v2 0.1.3
Sign up to get free protection for your applications and to get access to all the features.
- checksums.yaml +7 -0
- data/CHANGELOG.md +10 -0
- data/CONTRIBUTING.md +1 -0
- data/Gemfile +8 -0
- data/LICENSE +22 -0
- data/README.md +224 -0
- data/Rakefile +19 -0
- data/lib/linked_in/access_token.rb +24 -0
- data/lib/linked_in/api.rb +108 -0
- data/lib/linked_in/api_resource.rb +180 -0
- data/lib/linked_in/communications.rb +40 -0
- data/lib/linked_in/configuration.rb +41 -0
- data/lib/linked_in/connection.rb +35 -0
- data/lib/linked_in/errors.rb +73 -0
- data/lib/linked_in/jobs.rb +11 -0
- data/lib/linked_in/mash.rb +68 -0
- data/lib/linked_in/media.rb +13 -0
- data/lib/linked_in/oauth2.rb +223 -0
- data/lib/linked_in/organizations.rb +217 -0
- data/lib/linked_in/people.rb +151 -0
- data/lib/linked_in/raise_error.rb +28 -0
- data/lib/linked_in/search.rb +70 -0
- data/lib/linked_in/share_and_social_stream.rb +143 -0
- data/lib/linked_in/version.rb +3 -0
- data/lib/linkedin-v2.rb +52 -0
- data/linkedin-v2.gemspec +39 -0
- data/pkg/linkedin-oauth2-2.0.0.gem +0 -0
- data/spec/linked_in/api/api_spec.rb +41 -0
- data/spec/linked_in/api/communications_spec.rb +13 -0
- data/spec/linked_in/api/jobs_spec.rb +33 -0
- data/spec/linked_in/api/organizations_spec.rb +54 -0
- data/spec/linked_in/api/people_spec.rb +191 -0
- data/spec/linked_in/api/search_spec.rb +71 -0
- data/spec/linked_in/api/share_and_social_stream_spec.rb +87 -0
- data/spec/linked_in/configuration_spec.rb +46 -0
- data/spec/linked_in/connection_spec.rb +10 -0
- data/spec/linked_in/module_loading_spec.rb +23 -0
- data/spec/linked_in/oauth/access_token_spec.rb +27 -0
- data/spec/linked_in/oauth/auth_code_spec.rb +86 -0
- data/spec/linked_in/oauth/credentials_spec.rb +96 -0
- data/spec/linked_in/oauth/get_access_token_spec.rb +108 -0
- data/spec/spec_helper.rb +16 -0
- data/spec/vcr_cassettes/access_token_success.yml +99 -0
- data/spec/vcr_cassettes/bad_code.yml +99 -0
- data/spec/vcr_cassettes/organization_data.yml +51 -0
- data/spec/vcr_cassettes/people_picture_urls.yml +52 -0
- data/spec/vcr_cassettes/people_profile_connections_fields.yml +52 -0
- data/spec/vcr_cassettes/people_profile_connections_other.yml +52 -0
- data/spec/vcr_cassettes/people_profile_connections_self.yml +52 -0
- data/spec/vcr_cassettes/people_profile_fields_complex.yml +52 -0
- data/spec/vcr_cassettes/people_profile_fields_simple.yml +52 -0
- data/spec/vcr_cassettes/people_profile_lang_spanish.yml +53 -0
- data/spec/vcr_cassettes/people_profile_multiple_fields.yml +52 -0
- data/spec/vcr_cassettes/people_profile_multiple_uids.yml +52 -0
- data/spec/vcr_cassettes/people_profile_multiple_uids_and_urls.yml +52 -0
- data/spec/vcr_cassettes/people_profile_multiple_urls.yml +52 -0
- data/spec/vcr_cassettes/people_profile_new_connections_fields.yml +52 -0
- data/spec/vcr_cassettes/people_profile_new_connections_other.yml +52 -0
- data/spec/vcr_cassettes/people_profile_new_connections_self.yml +52 -0
- data/spec/vcr_cassettes/people_profile_other_uid.yml +57 -0
- data/spec/vcr_cassettes/people_profile_other_url.yml +54 -0
- data/spec/vcr_cassettes/people_profile_own.yml +57 -0
- data/spec/vcr_cassettes/people_profile_own_secure.yml +53 -0
- data/spec/vcr_cassettes/people_profile_skills.yml +52 -0
- data/spec/vcr_cassettes/unavailable.yml +99 -0
- 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
|
data/spec/spec_helper.rb
ADDED
@@ -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
|