2011-08-05 33 views

Trả lời

29

Không dễ dàng ... Bạn cần phải đi qua OAuth, sau đó thay mặt cho các thành viên, bạn yêu cầu:

http://api.linkedin.com/v1/people/{user-id}/picture-url

+10

Thật đáng tiếc, đã hy vọng có một cơ chế dễ dàng hơn. –

+0

vì vậy chúng tôi cần phải thực hiện hai cuộc gọi, cuộc gọi đầu tiên để nhận url hình ảnh và địa chỉ thứ hai để có được hình ảnh thực tế? – saintmac

+2

saintmac. Không, nếu bạn chỉ muốn hình ảnh hte chỉ cần gọi url này. {user-id} là một biến và "url hình ảnh" là văn bản thực tế bạn đưa vào url để tải hình ảnh. Tuy nhiên trong thử nghiệm của tôi, điều này trả về ảnh nhỏ hơn không phải là ảnh gốc. Tôi khuyên bạn nên trả lời dưới đây bằng cách sử dụng hình ảnh-url:: (ban đầu) – danielson317

49

Bạn có thể lấy kích thước ảnh gốc với cuộc gọi này:

http://api.linkedin.com/v1/people/~/picture-urls::(original)

Lưu ý rằng đây có thể là bất kỳ kích thước nào, vì vậy bạn sẽ cần phải mở rộng quy mô ở bên cạnh bạn, nhưng hình ảnh là hình ảnh gốc do người dùng tải lên.

+1

Cảm ơn. Nó hoạt động tốt! –

+1

Bạn có thể giải thích điều này một cách dễ dàng hơn không. – JgdGuy

+13

một điểm nhỏ để thực hiện - hình ảnh là 'ảnh gốc được tải lên bởi người dùng' ... với việc thêm biểu tượng linkedIn ở góc :) –

2

Khi bạn đăng nhập vào linkedin, bạn sẽ bị truy tố. Sử dụng truy cập vào thẻ và bạn có thể lấy dữ liệu người dùng

LinkedInApiClient client = factory.createLinkedInApiClient(accessToken); 
         com.google.code.linkedinapi.schema.Person person = client.getProfileForCurrentUser(EnumSet.of(
           ProfileField.ID, ProfileField.FIRST_NAME, ProfileField.LAST_NAME, ProfileField.HEADLINE, 
           ProfileField.INDUSTRY, ProfileField.PICTURE_URL, ProfileField.DATE_OF_BIRTH, 
           ProfileField.LOCATION_NAME, ProfileField.MAIN_ADDRESS, ProfileField.LOCATION_COUNTRY)); 
    String imgageUrl=person.getPictureUrl(); 
0

Đối với tôi điều này làm việc

image = auth.extra.raw_info.pictureUrls.values.last.first

với đá quý omniauth-linkedin

6

Tôi đang sử dụng OWIN trong giải pháp của mình để sau khi người dùng cho phép ứng dụng của bạn sử dụng thông tin LinkedIn một yêu cầu GET đơn giản và đơn giản tới URL https://api.linkedin.com/v1/people/~:(picture-url)?format=json như đã giải thích trước đó.

Startup.Auth.cs My nộp

var linkedInOptions = new LinkedInAuthenticationOptions() 
{ 
    ClientId = [ClientID], 
    ClientSecret = [ClientSecret], 
    Provider = new LinkedInAuthenticationProvider() 
    { 
     OnAuthenticated = (context) => 
     { 
      // This is the access token received by your application after user allows use LinkedIn credentials 
      context.Identity.AddClaim(new Claim(
       "urn:linkedin:accesstoken", context.AccessToken)); 
      context.Identity.AddClaim(new Claim(
       "urn:linkedin:name", context.Name)); 
      context.Identity.AddClaim(new Claim(
       "urn:linkedin:username", context.UserName)); 
      context.Identity.AddClaim(new Claim(
       "urn:linkedin:email", context.Email)); 
      context.Identity.AddClaim(new Claim(
       "urn:linkedin:id", context.Id)); 

      return Task.FromResult(0); 
     } 
    } 
}; 

app.UseLinkedInAuthentication(linkedInOptions); 

Phương pháp của tôi để có được hình ảnh cá nhân của người dùng trong LinkedIn:

public string GetUserPhotoUrl(string accessToken) 
{ 
    string result = string.Empty; 
    var apiRequestUri = new Uri("https://api.linkedin.com/v1/people/~:(picture-url)?format=json"); 
    using (var webClient = new WebClient()) 
    { 
     webClient.Headers.Add(HttpRequestHeader.Authorization, "Bearer " + accessToken); 
     var json = webClient.DownloadString(apiRequestUri); 
     dynamic x = JsonConvert.DeserializeObject(json); 
     string userPicture = x.pictureUrl; 
     result = userPicture; 
    } 
    return result; 
} 

Và cuối cùng là một đoạn hành động của tôi mà tiêu thụ các phương pháp trên:

public async Task<ActionResult> ExternalLoginCallback(string returnUrl) 
{ 
    ... 
    var externalIdentity = HttpContext.GetOwinContext().Authentication.GetExternalIdentityAsync(DefaultAuthenticationTypes.ExternalCookie); 
    string accessToken = 
       externalIdentity.Result.Claims.FirstOrDefault(c => c.Type == "urn:linkedin:accesstoken").Value; 
    model.PhotoUrl = GetUserPhotoUrl(accessToken); 
    ... 
} 

Tôi hy vọng điều đó có thể hữu ích. Trân trọng

1

Nếu mục tiêu của bạn chỉ đơn giản là hiển thị ảnh trên trang web của bạn thì LinkedIn Member Profile Plugin có thể phù hợp với bạn. Nó sẽ hiển thị hình ảnh, một số thông tin bổ sung, cùng với xây dựng thương hiệu LinkedIn.

Vì API LinkedIn được thiết kế để chỉ được sử dụng thay mặt cho current logged in user, nó không cung cấp chức năng tương tự như api biểu đồ facebook.

7

Sau khi Linkedin xác thực người dùng sử dụng OAuth 2.x được thực hiện, hãy gửi yêu cầu tới URL của mọi người.

https://api.linkedin.com/v1/people/~:(id,email-address,first-name,last-name,formatted-name,picture-url)?format=json

đâu ~ đứng cho người dùng xác thực hiện. Câu trả lời sẽ như thế này ...

{ 
    "id": "KPxRFxLxuX", 
    "emailAddress": "[email protected]", 
    "firstName": "John", 
    "lastName": "Doe", 
    "formattedName": "John Doe", 
    "pictureUrl": "https://media.licdn.com/mpr/mprx/0_0QblxThAqcTCt8rrncxxO5JAr...cjSsn6gRQ2b" 
} 

Hy vọng điều này sẽ hữu ích!

+1

Làm thế nào để bạn có được hình ảnh trong một kích thước lớn hơn một chút? Cái tôi đang nhận được là siêu nhỏ:/ – dietbacon

+0

@dietbacon bạn đã tìm ra giải pháp nào cho bạn chưa? –

+0

@VitorOliveira no: ( – dietbacon

0

Đây có thể không hoàn toàn là những gì bạn đang yêu cầu, nhưng nó hữu ích cho các cuộc điều tra riêng lẻ.

Gọi trang trong Firefox, nhấp chuột trái vào menu trên hình nền. Chọn Kiểm tra phần tử (Q).

tìm kiếm -target-image" Đó sẽ là sự kết thúc của các thuộc tính id trong một yếu tố img. Các src thuộc tính của yếu tố đó img, sẽ là URL của hình ảnh nền.

1

Đây là ! giải pháp của tôi và nó hoạt động rất rất tốt:

def callback(self): 
    self.validate_oauth2callback() 
    oauth_session = self.service.get_auth_session(
     data={'code': request.args['code'], 
       'grant_type': 'authorization_code', 
       'redirect_uri': self.get_callback_url()}, 
     decoder=jsondecoder 
    ) 
    me = oauth_session.get('people/~:(id,first-name,last-name,public-profile-url,email-address,picture-url,picture-urls::(original))?format=json&oauth2_access_token='+str(oauth_session.access_token), data={'x-li-format': 'json'}, bearer_auth=False).json() 
    social_id = me['id'] 
    name = me['firstName'] 
    surname = me['lastName'] 
    email = me['emailAddress'] 
    url = me['publicProfileUrl'] 
    image_small = me.get('pictureUrl', None) 
    image_large = me.get('pictureUrls', {}).get('values', [])[0] 
    return social_id, name, surname, email, url, image_small, image_large, me 
2

này hoạt động tốt đối với tôi

giải thích -

Đây là một hình ảnh thu nhỏ với tất cả các đĩa dữ liệu khác

https://api.linkedin.com/v1/people/~:(id,location,picture-urls::(original),specialties,public-profile-url,email-address,formatted-name)?format=json 

này là dành cho ảnh gốc với tất cả các dữ liệu khác -

https://api.linkedin.com/v1/people/~:(id,location,picture-url,specialties,public-profile-url,email-address,formatted-name)?format=json 

Chỉ cần sử dụng picture-urls::(original) thay vì picture-url!

Điều này hiện đang được sử dụng trong Gradbee

+0

nhận được định dạng-name (null) (null) với url cho bản gốc hình ảnh với tất cả các dữ liệu khác - bất kỳ ý tưởng nào? –

+0

@KrutikaSonawala có thể có một số vấn đề với tài khoản được liên kết mà bạn đang ủy quyền. – Siddharth

Các vấn đề liên quan