linkedin-v2 0.1.3
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.
- 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
|