linkedin-v2 0.1.3 → 0.1.8
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 +5 -5
- data/README.md +4 -4
- data/lib/linked_in/api.rb +14 -8
- data/lib/linked_in/api_resource.rb +1 -1
- data/lib/linked_in/media.rb +47 -0
- data/lib/linked_in/organizations.rb +9 -0
- data/lib/linked_in/raise_error.rb +1 -2
- data/lib/linked_in/share_and_social_stream.rb +34 -4
- data/lib/linked_in/version.rb +1 -1
- data/linkedin-v2.gemspec +2 -1
- data/spec/linked_in/api/media_spec.rb +19 -0
- data/spec/vcr_cassettes/access_token_success.yml +19 -19
- data/spec/vcr_cassettes/bad_code.yml +18 -18
- data/spec/vcr_cassettes/organization_data.yml +7 -7
- data/spec/vcr_cassettes/people_picture_urls.yml +8 -8
- data/spec/vcr_cassettes/people_profile_connections_fields.yml +7 -7
- data/spec/vcr_cassettes/people_profile_connections_other.yml +8 -8
- data/spec/vcr_cassettes/people_profile_connections_self.yml +7 -7
- data/spec/vcr_cassettes/people_profile_fields_complex.yml +7 -7
- data/spec/vcr_cassettes/people_profile_fields_simple.yml +8 -8
- data/spec/vcr_cassettes/people_profile_lang_spanish.yml +7 -7
- data/spec/vcr_cassettes/people_profile_multiple_fields.yml +7 -7
- data/spec/vcr_cassettes/people_profile_multiple_uids.yml +8 -8
- data/spec/vcr_cassettes/people_profile_multiple_uids_and_urls.yml +7 -7
- data/spec/vcr_cassettes/people_profile_multiple_urls.yml +7 -7
- data/spec/vcr_cassettes/people_profile_new_connections_fields.yml +7 -7
- data/spec/vcr_cassettes/people_profile_new_connections_other.yml +8 -8
- data/spec/vcr_cassettes/people_profile_new_connections_self.yml +8 -8
- data/spec/vcr_cassettes/people_profile_other_uid.yml +8 -8
- data/spec/vcr_cassettes/people_profile_other_url.yml +7 -7
- data/spec/vcr_cassettes/people_profile_own.yml +8 -8
- data/spec/vcr_cassettes/people_profile_own_secure.yml +7 -7
- data/spec/vcr_cassettes/people_profile_skills.yml +7 -7
- data/spec/vcr_cassettes/unavailable.yml +19 -19
- metadata +24 -10
- data/pkg/linkedin-oauth2-2.0.0.gem +0 -0
checksums.yaml
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
---
|
2
|
-
|
3
|
-
metadata.gz:
|
4
|
-
data.tar.gz:
|
2
|
+
SHA256:
|
3
|
+
metadata.gz: 42b4c574ad2d2ee7cc50f9a32e6c6f4a629af4b6e142e80381c63741d82e442a
|
4
|
+
data.tar.gz: 1e88833b29d4cc2fc1a3abf5d683b7c0eb162dfeb4d920769791e358573f53b1
|
5
5
|
SHA512:
|
6
|
-
metadata.gz:
|
7
|
-
data.tar.gz:
|
6
|
+
metadata.gz: 6a51bcf6c85c15d1f0ec293643bdf787cb9178af14677c5226bba05142197177533c90c396f2883c09e7a25fac60a4d626e804795a542a9b8e8e4f2c7388edfe
|
7
|
+
data.tar.gz: 2caec4518eeacb780d167dfb90dc8c051aaf91964f4e6665af85ca12618c1ff430e92f6b39438669af87240798069b61f88e7ba16640f5eb5b855b09cb1a1cc6
|
data/README.md
CHANGED
@@ -2,10 +2,10 @@
|
|
2
2
|
|
3
3
|
## WARNING: DANGER WILL ROBINSON
|
4
4
|
|
5
|
-
This is very much a work in progress. Currently only the shares/social stream
|
6
|
-
and
|
7
|
-
those endpoints are using this gem in a production application,
|
8
|
-
reliable enough. :)
|
5
|
+
This is very much a work in progress. Currently only the shares/social stream,
|
6
|
+
organization, and media upload related endpoints have been verified to work.
|
7
|
+
Having said that, those endpoints are using this gem in a production application,
|
8
|
+
so they're reliable enough. :)
|
9
9
|
|
10
10
|
Many endpoints still need to be written, and as I don't have the requisite partner
|
11
11
|
status w/ LinkedIn, I can't develop against the jobs API. Many of the specs still
|
data/lib/linked_in/api.rb
CHANGED
@@ -8,8 +8,11 @@ module LinkedIn
|
|
8
8
|
verify_access_token!(access_token)
|
9
9
|
@access_token = access_token
|
10
10
|
|
11
|
-
@connection =
|
12
|
-
|
11
|
+
@connection =
|
12
|
+
LinkedIn::Connection.new params: default_params, headers: default_headers do |conn|
|
13
|
+
conn.request :multipart
|
14
|
+
conn.adapter Faraday.default_adapter
|
15
|
+
end
|
13
16
|
|
14
17
|
initialize_endpoints
|
15
18
|
end
|
@@ -45,7 +48,8 @@ module LinkedIn
|
|
45
48
|
:organization_search,
|
46
49
|
:organization_page_statistics,
|
47
50
|
:organization_follower_statistics,
|
48
|
-
:organization_share_statistics
|
51
|
+
:organization_share_statistics,
|
52
|
+
:organization_follower_count
|
49
53
|
|
50
54
|
def_delegators :@communications, :send_message
|
51
55
|
|
@@ -55,11 +59,13 @@ module LinkedIn
|
|
55
59
|
:like,
|
56
60
|
:unlike,
|
57
61
|
:comments,
|
58
|
-
:comment
|
59
|
-
|
60
|
-
|
62
|
+
:comment,
|
63
|
+
:get_share,
|
64
|
+
:get_social_actions,
|
65
|
+
:migrate_update_keys
|
61
66
|
|
62
|
-
def_delegators :@media, :summary
|
67
|
+
def_delegators :@media, :summary,
|
68
|
+
:upload
|
63
69
|
|
64
70
|
private ##############################################################
|
65
71
|
|
@@ -67,11 +73,11 @@ module LinkedIn
|
|
67
73
|
@jobs = LinkedIn::Jobs.new(@connection)
|
68
74
|
@people = LinkedIn::People.new(@connection)
|
69
75
|
@search = LinkedIn::Search.new(@connection)
|
70
|
-
# @groups = LinkedIn::Groups.new(@connection) not supported by v2 API?
|
71
76
|
@organizations = LinkedIn::Organizations.new(@connection)
|
72
77
|
@communications = LinkedIn::Communications.new(@connection)
|
73
78
|
@share_and_social_stream = LinkedIn::ShareAndSocialStream.new(@connection)
|
74
79
|
@media = LinkedIn::Media.new(@connection)
|
80
|
+
# @groups = LinkedIn::Groups.new(@connection) not supported by v2 API?
|
75
81
|
end
|
76
82
|
|
77
83
|
def default_params
|
@@ -72,7 +72,7 @@ module LinkedIn
|
|
72
72
|
def delete(path=nil, body=nil, headers=nil, &block)
|
73
73
|
# @connection.delete(prepend_prefix(path), params, headers, &block)
|
74
74
|
# To be able to DELETE with a body:
|
75
|
-
|
75
|
+
response = @connection.run_request(:delete, prepend_prefix(path), body, headers, &block)
|
76
76
|
|
77
77
|
Mash.from_json(response.body)
|
78
78
|
end
|
data/lib/linked_in/media.rb
CHANGED
@@ -1,4 +1,8 @@
|
|
1
|
+
require 'mime/types'
|
2
|
+
|
1
3
|
module LinkedIn
|
4
|
+
DEFAULT_TIMEOUT_SECONDS = 300
|
5
|
+
|
2
6
|
# Rich Media APIs
|
3
7
|
#
|
4
8
|
# @see https://developer.linkedin.com/docs/guide/v2/shares/rich-media-shares
|
@@ -9,5 +13,48 @@ module LinkedIn
|
|
9
13
|
path = "/richMediaSummariesV2/#{options.delete(:id)}"
|
10
14
|
get(path, options)
|
11
15
|
end
|
16
|
+
|
17
|
+
# Uploads rich media content to LinkedIn from a supplied URL.
|
18
|
+
#
|
19
|
+
# @see https://developer.linkedin.com/docs/guide/v2/shares/rich-media-shares#upload
|
20
|
+
#
|
21
|
+
# @options options [String] :source_url, the URL to the content to be uploaded.
|
22
|
+
# @options options [Numeric] :timeout, optional timeout value in seconds, defaults to 300.
|
23
|
+
# @options options [String] :disposition_filename, the name of the file to be uploaded. Defaults to the basename of the URL filename.
|
24
|
+
# @return [LinkedIn::Mash]
|
25
|
+
#
|
26
|
+
def upload(options = {})
|
27
|
+
source_url = options.delete(:source_url)
|
28
|
+
timeout = options.delete(:timeout) || DEFAULT_TIMEOUT_SECONDS
|
29
|
+
media_upload_endpoint = LinkedIn.config.api + '/media/upload'
|
30
|
+
response =
|
31
|
+
@connection.post(media_upload_endpoint, file: file(source_url, options)) do |req|
|
32
|
+
req.headers['Accept'] = 'application/json'
|
33
|
+
req.options.timeout = timeout
|
34
|
+
req.options.open_timeout = timeout
|
35
|
+
end
|
36
|
+
Mash.from_json(response.body)
|
37
|
+
end
|
38
|
+
|
39
|
+
private
|
40
|
+
|
41
|
+
def upload_filename(media)
|
42
|
+
File.basename(media.base_uri.request_uri)
|
43
|
+
end
|
44
|
+
|
45
|
+
def extension(media)
|
46
|
+
upload_filename(media).split('.').last
|
47
|
+
end
|
48
|
+
|
49
|
+
def content_type(media)
|
50
|
+
::MIME::Types.type_for(extension(media)).first.content_type
|
51
|
+
end
|
52
|
+
|
53
|
+
def file(source_url, options)
|
54
|
+
media = open(source_url, 'rb')
|
55
|
+
io = StringIO.new(media.read)
|
56
|
+
filename = options.delete(:disposition_filename) || upload_filename(media)
|
57
|
+
Faraday::UploadIO.new(io, content_type(media), filename)
|
58
|
+
end
|
12
59
|
end
|
13
60
|
end
|
@@ -113,6 +113,15 @@ module LinkedIn
|
|
113
113
|
get(path, options)
|
114
114
|
end
|
115
115
|
|
116
|
+
# Retrieve Organization Follower Count
|
117
|
+
#
|
118
|
+
# https://docs.microsoft.com/en-us/linkedin/marketing/integrations/community-management/organizations/organization-lookup-api#retrieve-organization-follower-count
|
119
|
+
#
|
120
|
+
def organization_follower_count organization_urn
|
121
|
+
path = "/networkSizes/#{organization_urn}?edgeType=CompanyFollowedByMember"
|
122
|
+
get(path)
|
123
|
+
end
|
124
|
+
|
116
125
|
# TODO MOVE TO SOCIAL ACTIONS.
|
117
126
|
#
|
118
127
|
# # Retrieve comments on a particular company update:
|
@@ -14,8 +14,7 @@ module LinkedIn
|
|
14
14
|
when 404
|
15
15
|
raise LinkedIn::NotFoundError.new(data), "(#{data.status}): #{data.message}"
|
16
16
|
when 500
|
17
|
-
raise LinkedIn::InformLinkedInError.new(data),
|
18
|
-
"LinkedIn had an internal error. Please let them know in the forum. (#{data.status}): #{data.message}"
|
17
|
+
raise LinkedIn::InformLinkedInError.new(data), "LinkedIn had an internal error. (#{data.status}): #{data.message}"
|
19
18
|
when 502..504
|
20
19
|
raise LinkedIn::UnavailableError.new(data), "(#{data.status}): #{data.message}"
|
21
20
|
else
|
@@ -36,6 +36,16 @@ module LinkedIn
|
|
36
36
|
get(path, options)
|
37
37
|
end
|
38
38
|
|
39
|
+
# Retrieve Share by ID
|
40
|
+
#
|
41
|
+
# https://docs.microsoft.com/en-us/linkedin/marketing/integrations/community-management/shares/share-api#look-up-share-by-id
|
42
|
+
#
|
43
|
+
def get_share(options = {})
|
44
|
+
id = options.delete(:id)
|
45
|
+
path = "/shares/#{id}"
|
46
|
+
get(path, options)
|
47
|
+
end
|
48
|
+
|
39
49
|
# Create one share from a person, organization, or organizationBrand.
|
40
50
|
#
|
41
51
|
# Permissions:
|
@@ -60,6 +70,15 @@ module LinkedIn
|
|
60
70
|
post(path, MultiJson.dump(defaults.merge(options)), 'Content-Type' => 'application/json')
|
61
71
|
end
|
62
72
|
|
73
|
+
# Retrieve a Summary of Social Actions
|
74
|
+
#
|
75
|
+
# https://docs.microsoft.com/en-us/linkedin/marketing/integrations/community-management/shares/network-update-social-actions#retrieve-a-summary-of-social-actions
|
76
|
+
#
|
77
|
+
def get_social_actions share_urns
|
78
|
+
path = '/socialActions'
|
79
|
+
get(path, ids: share_urns)
|
80
|
+
end
|
81
|
+
|
63
82
|
# Retrieves the likes for a specific post.
|
64
83
|
#
|
65
84
|
# @see https://developer.linkedin.com/docs/guide/v2/shares/network-update-social-actions#retrieve
|
@@ -122,6 +141,7 @@ module LinkedIn
|
|
122
141
|
#
|
123
142
|
# @option options [String] :urn, specifies activity queried for comments (e.g.,
|
124
143
|
# urn:li:article:123)
|
144
|
+
# @option options [String] :parent_comment, specifies the urn of the parent comment
|
125
145
|
# @option options [String] :actor, specifies the entity performing the action. It should b # represented by a urn:li:person:{id} or urn:li:organization:{id} URN.
|
126
146
|
# @option options [String] :message, the text content of the comment.
|
127
147
|
#
|
@@ -129,15 +149,25 @@ module LinkedIn
|
|
129
149
|
urn = options.delete(:urn)
|
130
150
|
actor = options.delete(:actor)
|
131
151
|
message = options.delete(:message)
|
152
|
+
parent_comment = options.delete(:parent_comment)
|
153
|
+
|
132
154
|
body = {
|
133
155
|
actor: actor,
|
134
|
-
message: {
|
135
|
-
attributes: [],
|
136
|
-
text: message
|
137
|
-
}
|
156
|
+
message: { text: message }
|
138
157
|
}
|
158
|
+
body.merge!(parentComment: parent_comment) if parent_comment
|
159
|
+
|
139
160
|
path = "/socialActions/#{urn}/comments"
|
140
161
|
post(path, MultiJson.dump(body), 'Content-Type' => 'application/json')
|
141
162
|
end
|
163
|
+
|
164
|
+
# Migrate from Update Keys to Share URNs
|
165
|
+
#
|
166
|
+
# https://docs.microsoft.com/en-us/linkedin/marketing/integrations/community-management/shares/share-api#migrate-from-update-keys-to-share-urns
|
167
|
+
#
|
168
|
+
def migrate_update_keys update_keys
|
169
|
+
path = '/activities'
|
170
|
+
get(path, ids: update_keys)
|
171
|
+
end
|
142
172
|
end
|
143
173
|
end
|
data/lib/linked_in/version.rb
CHANGED
data/linkedin-v2.gemspec
CHANGED
@@ -22,7 +22,8 @@ Gem::Specification.new do |gem|
|
|
22
22
|
|
23
23
|
gem.add_dependency "oauth2", "~> 1.0"
|
24
24
|
gem.add_dependency "hashie", "~> 3.2"
|
25
|
-
gem.add_dependency "faraday", "~> 0
|
25
|
+
gem.add_dependency "faraday", "~> 1.0"
|
26
|
+
gem.add_dependency 'mime-types', '>= 1.16'
|
26
27
|
|
27
28
|
gem.add_development_dependency "rake"
|
28
29
|
gem.add_development_dependency "rspec", "~> 3.0"
|
@@ -0,0 +1,19 @@
|
|
1
|
+
require 'spec_helper'
|
2
|
+
|
3
|
+
describe LinkedIn::Media do
|
4
|
+
let(:access_token) { 'dummy_access_token' }
|
5
|
+
let(:api) { LinkedIn::API.new(access_token) }
|
6
|
+
let(:base_uri) { double('uri', request_uri: 'http://example.org/elvis.png') }
|
7
|
+
let(:media) { double('media', size: 2048, base_uri: base_uri).as_null_object }
|
8
|
+
|
9
|
+
before do
|
10
|
+
allow_any_instance_of(LinkedIn::Media).to receive(:open).and_return(media)
|
11
|
+
end
|
12
|
+
|
13
|
+
it "should be able to upload media" do
|
14
|
+
result = '{"location": "urn:li:richMediaSummary:PNG-IMG-54f022ae8b3f4d479e925b4df68e19"}'
|
15
|
+
stub_request(:post, 'https://api.linkedin.com/media/upload').to_return(body: result)
|
16
|
+
expect(api.upload(source_url: "#{File.dirname(__FILE__)}/../../fixtures/elvis.jpg"))
|
17
|
+
.to eq("location" => "urn:li:richMediaSummary:PNG-IMG-54f022ae8b3f4d479e925b4df68e19")
|
18
|
+
end
|
19
|
+
end
|
@@ -8,7 +8,7 @@ http_interactions:
|
|
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
9
|
headers:
|
10
10
|
User-Agent:
|
11
|
-
- Faraday v0.
|
11
|
+
- Faraday v0.12.2
|
12
12
|
Content-Type:
|
13
13
|
- application/x-www-form-urlencoded
|
14
14
|
Accept-Encoding:
|
@@ -31,11 +31,11 @@ http_interactions:
|
|
31
31
|
Content-Language:
|
32
32
|
- en-US
|
33
33
|
Content-Length:
|
34
|
-
- '
|
34
|
+
- '250'
|
35
35
|
Date:
|
36
|
-
-
|
36
|
+
- Mon, 21 May 2018 18:34:12 GMT
|
37
37
|
X-Fs-Uuid:
|
38
|
-
-
|
38
|
+
- b3043c399cbc3015206fa4ea4e2b0000
|
39
39
|
Strict-Transport-Security:
|
40
40
|
- max-age=2592000
|
41
41
|
X-Content-Type-Options:
|
@@ -55,23 +55,23 @@ http_interactions:
|
|
55
55
|
- prod-lva1
|
56
56
|
Set-Cookie:
|
57
57
|
- _lipt=deleteMe; Expires=Thu, 01-Jan-1970 00:00:10 GMT; Path=/
|
58
|
-
- bcookie="v=2&
|
59
|
-
Path=/; Expires=
|
60
|
-
- bscookie="v=1&
|
61
|
-
domain=.www.linkedin.com; Path=/; Secure; Expires=
|
58
|
+
- bcookie="v=2&d345bb0e-f6ab-4db4-8542-b2d8828d9ef7"; domain=.linkedin.com;
|
59
|
+
Path=/; Expires=Thu, 21-May-2020 06:11:44 GMT
|
60
|
+
- bscookie="v=1&20180521183412b52aae88-48da-4286-8db2-061da5448518AQGWqF-B9sPcwFJhUavo9sVoIjQyDp85";
|
61
|
+
domain=.www.linkedin.com; Path=/; Secure; Expires=Thu, 21-May-2020 06:11:44
|
62
62
|
GMT; HttpOnly
|
63
63
|
- lang="v=2&lang=en-us"; Version=1; Domain=linkedin.com; Path=/
|
64
|
-
- leo_auth_token="GST:
|
65
|
-
Version=1; Max-Age=1799; Expires=
|
66
|
-
- lidc="b=
|
67
|
-
Expires=
|
64
|
+
- leo_auth_token="GST:UyjqklGyV7ZhRm4cfodqmZVJMh81RSaxFvjAKiPYm_ZPjmJQ8751kl:1526927652:fea5cbfed9b9ee17e26498280dfcb52f7bf0da84";
|
65
|
+
Version=1; Max-Age=1799; Expires=Mon, 21-May-2018 19:04:11 GMT; Path=/
|
66
|
+
- lidc="b=VB31:g=1614:u=1:i=1526927652:t=1527014052:s=AQEyvgLLWsw0KAkIo0IRU0oyq8wudtmV";
|
67
|
+
Expires=Tue, 22 May 2018 18:34:12 GMT; domain=.linkedin.com; Path=/
|
68
68
|
- s_leo_auth_token="delete me"; Version=1; Max-Age=0; Expires=Thu, 01-Jan-1970
|
69
69
|
00:00:10 GMT; Path=/
|
70
70
|
- sl="delete me"; Version=1; Domain=.www.linkedin.com; Max-Age=0; Expires=Thu,
|
71
71
|
01-Jan-1970 00:00:10 GMT; Path=/
|
72
72
|
- sl="delete me"; Version=1; Max-Age=0; Expires=Thu, 01-Jan-1970 00:00:10 GMT;
|
73
73
|
Path=/
|
74
|
-
- visit="v=1&G"; Version=1; Max-Age=63072000; Expires=
|
74
|
+
- visit="v=1&G"; Version=1; Max-Age=63072000; Expires=Wed, 20-May-2020 18:34:12
|
75
75
|
GMT; Path=/
|
76
76
|
X-Li-Proto:
|
77
77
|
- http/1.1
|
@@ -85,15 +85,15 @@ http_interactions:
|
|
85
85
|
Connection:
|
86
86
|
- keep-alive
|
87
87
|
X-Li-Pop:
|
88
|
-
- prod-
|
88
|
+
- prod-edc2
|
89
89
|
X-Li-Uuid:
|
90
|
-
-
|
90
|
+
- JZAgOZy8MBWAld5MTisAAA==
|
91
91
|
body:
|
92
92
|
encoding: ASCII-8BIT
|
93
93
|
string: '{"error_description":"the authorization server is currently unable
|
94
|
-
to handle the request : RestException{_response=RestResponse[headers={Content-Length=
|
95
|
-
Content-Type=application/json, X-RestLi-Error-Response=true, X-RestLi-Protocol-Version=2.0.0}cookies=[],status=404,entityLength=
|
94
|
+
to handle the request : RestException{_response=RestResponse[headers={Content-Length=10592,
|
95
|
+
Content-Type=application/json, X-RestLi-Error-Response=true, X-RestLi-Protocol-Version=2.0.0}cookies=[],status=404,entityLength=10592]}
|
96
96
|
","error":"temporarily_unavailable"}'
|
97
97
|
http_version:
|
98
|
-
recorded_at:
|
99
|
-
recorded_with: VCR
|
98
|
+
recorded_at: Mon, 21 May 2018 18:34:12 GMT
|
99
|
+
recorded_with: VCR 4.0.0
|
@@ -8,7 +8,7 @@ http_interactions:
|
|
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
9
|
headers:
|
10
10
|
User-Agent:
|
11
|
-
- Faraday v0.
|
11
|
+
- Faraday v0.12.2
|
12
12
|
Content-Type:
|
13
13
|
- application/x-www-form-urlencoded
|
14
14
|
Accept-Encoding:
|
@@ -31,11 +31,11 @@ http_interactions:
|
|
31
31
|
Content-Language:
|
32
32
|
- en-US
|
33
33
|
Content-Length:
|
34
|
-
- '
|
34
|
+
- '250'
|
35
35
|
Date:
|
36
|
-
-
|
36
|
+
- Mon, 21 May 2018 18:34:12 GMT
|
37
37
|
X-Fs-Uuid:
|
38
|
-
-
|
38
|
+
- 6d8653659cbc30159005132abd2a0000
|
39
39
|
Strict-Transport-Security:
|
40
40
|
- max-age=2592000
|
41
41
|
X-Content-Type-Options:
|
@@ -55,23 +55,23 @@ http_interactions:
|
|
55
55
|
- prod-lva1
|
56
56
|
Set-Cookie:
|
57
57
|
- _lipt=deleteMe; Expires=Thu, 01-Jan-1970 00:00:10 GMT; Path=/
|
58
|
-
- bcookie="v=2&
|
59
|
-
Path=/; Expires=
|
60
|
-
- bscookie="v=1&
|
61
|
-
domain=.www.linkedin.com; Path=/; Secure; Expires=
|
58
|
+
- bcookie="v=2&194b1ecd-b9fc-450b-8c07-4d9d87477e8a"; domain=.linkedin.com;
|
59
|
+
Path=/; Expires=Thu, 21-May-2020 06:11:45 GMT
|
60
|
+
- bscookie="v=1&20180521183413f795f5c8-2e10-42c2-8920-87be0a432323AQHoo1a_vqsKuqO5L7wGUimNKySXziY3";
|
61
|
+
domain=.www.linkedin.com; Path=/; Secure; Expires=Thu, 21-May-2020 06:11:45
|
62
62
|
GMT; HttpOnly
|
63
63
|
- lang="v=2&lang=en-us"; Version=1; Domain=linkedin.com; Path=/
|
64
|
-
- leo_auth_token="GST:
|
65
|
-
Version=1; Max-Age=1799; Expires=
|
66
|
-
- lidc="b=
|
67
|
-
Expires=
|
64
|
+
- leo_auth_token="GST:8eDGGaOuhyg9eGhMv7uXIk5tRvg95HyY8YPO25OPWVgje-HYbkZWkW:1526927653:4024b0fcbfe318f0617efa5b3593f5a943a7f3fb";
|
65
|
+
Version=1; Max-Age=1799; Expires=Mon, 21-May-2018 19:04:12 GMT; Path=/
|
66
|
+
- lidc="b=VB06:g=1762:u=1:i=1526927653:t=1527014053:s=AQFKD5x8ekiW_QXLNA92mRNPixdfT6N3";
|
67
|
+
Expires=Tue, 22 May 2018 18:34:13 GMT; domain=.linkedin.com; Path=/
|
68
68
|
- s_leo_auth_token="delete me"; Version=1; Max-Age=0; Expires=Thu, 01-Jan-1970
|
69
69
|
00:00:10 GMT; Path=/
|
70
70
|
- sl="delete me"; Version=1; Domain=.www.linkedin.com; Max-Age=0; Expires=Thu,
|
71
71
|
01-Jan-1970 00:00:10 GMT; Path=/
|
72
72
|
- sl="delete me"; Version=1; Max-Age=0; Expires=Thu, 01-Jan-1970 00:00:10 GMT;
|
73
73
|
Path=/
|
74
|
-
- visit="v=1&G"; Version=1; Max-Age=63072000; Expires=
|
74
|
+
- visit="v=1&G"; Version=1; Max-Age=63072000; Expires=Wed, 20-May-2020 18:34:13
|
75
75
|
GMT; Path=/
|
76
76
|
X-Li-Proto:
|
77
77
|
- http/1.1
|
@@ -87,13 +87,13 @@ http_interactions:
|
|
87
87
|
X-Li-Pop:
|
88
88
|
- prod-edc2
|
89
89
|
X-Li-Uuid:
|
90
|
-
-
|
90
|
+
- PFuuY5y8MBWg+osFvSoAAA==
|
91
91
|
body:
|
92
92
|
encoding: ASCII-8BIT
|
93
93
|
string: '{"error_description":"the authorization server is currently unable
|
94
|
-
to handle the request : RestException{_response=RestResponse[headers={Content-Length=
|
95
|
-
Content-Type=application/json, X-RestLi-Error-Response=true, X-RestLi-Protocol-Version=2.0.0}cookies=[],status=404,entityLength=
|
94
|
+
to handle the request : RestException{_response=RestResponse[headers={Content-Length=10592,
|
95
|
+
Content-Type=application/json, X-RestLi-Error-Response=true, X-RestLi-Protocol-Version=2.0.0}cookies=[],status=404,entityLength=10592]}
|
96
96
|
","error":"temporarily_unavailable"}'
|
97
97
|
http_version:
|
98
|
-
recorded_at:
|
99
|
-
recorded_with: VCR
|
98
|
+
recorded_at: Mon, 21 May 2018 18:34:13 GMT
|
99
|
+
recorded_with: VCR 4.0.0
|
@@ -12,7 +12,7 @@ http_interactions:
|
|
12
12
|
Authorization:
|
13
13
|
- Bearer dummy access token
|
14
14
|
User-Agent:
|
15
|
-
- Faraday v0.
|
15
|
+
- Faraday v0.12.2
|
16
16
|
Accept-Encoding:
|
17
17
|
- gzip;q=1.0,deflate;q=0.6,identity;q=0.3
|
18
18
|
Accept:
|
@@ -27,7 +27,7 @@ http_interactions:
|
|
27
27
|
Content-Type:
|
28
28
|
- application/json
|
29
29
|
Date:
|
30
|
-
-
|
30
|
+
- Mon, 21 May 2018 18:33:58 GMT
|
31
31
|
X-Li-Fabric:
|
32
32
|
- prod-lva1
|
33
33
|
Transfer-Encoding:
|
@@ -39,13 +39,13 @@ http_interactions:
|
|
39
39
|
X-Li-Proto:
|
40
40
|
- http/1.1
|
41
41
|
X-Li-Uuid:
|
42
|
-
-
|
42
|
+
- 4gmX75i8MBXwaQZpdSsAAA==
|
43
43
|
Set-Cookie:
|
44
|
-
- lidc="b=
|
45
|
-
Expires=
|
44
|
+
- lidc="b=VB90:g=1300:u=1:i=1526927638:t=1527014038:s=AQG3FreU8caYTQ4iqgrhldrSZfnYJyGm";
|
45
|
+
Expires=Tue, 22 May 2018 18:33:58 GMT; domain=.linkedin.com; Path=/
|
46
46
|
body:
|
47
47
|
encoding: UTF-8
|
48
48
|
string: '{"serviceErrorCode":65600,"message":"Invalid access token","status":401}'
|
49
49
|
http_version:
|
50
|
-
recorded_at:
|
51
|
-
recorded_with: VCR
|
50
|
+
recorded_at: Mon, 21 May 2018 18:33:58 GMT
|
51
|
+
recorded_with: VCR 4.0.0
|