2011-12-09 28 views
8

Tôi đang tìm một cách để xác nhận một liên kết để đảm bảo rằng nó trỏ đến một trang hồ sơ công khai LinkedIn trong PHP.Làm thế nào để xác nhận một url hồ sơ công khai LinkedIn

Tôi có một trang web và tôi muốn người dùng của mình có thể chia sẻ hồ sơ LinkedIn của họ trong tiểu sử của họ trên trang web của tôi.

+0

tôi tạo ra các lớp để [xác nhận url linkedin] (https://github.com/gchokeen/linkedinURLValidator). – Gowri

Trả lời

4

Hãy thử một cái gì đó như thế này nơi $username là tên người dùng được liên kết trong. Bạn cũng có thể đặt $ profileurl trực tiếp đến liên kết nhất định và xác minh với str_pos đó là bắt đầu với http://www.linkedin.com/in/

$profileurl = "http://www.linkedin.com/in/".$username; 

$fp = curl_init($profileurl); 
$response = curl_exec($fp); 
$response_code = curl_getinfo($fp, CURLINFO_HTTP_CODE); 
$validprofile = ($response_code == 200); 

$validprofile sẽ là một boolean chỉ ra nếu hồ sơ cá nhân là hợp lệ.

+7

đừng quên '/ in/username' chỉ khi người dùng đã chọn url tùy chỉnh. Nếu không, nó trông giống như '/ pub/fname-lname-etc/4/72/8a0' – codercake

0

Sử dụng regex để đảm bảo rằng liên kết khớp với biểu mẫu được liên kết trong hồ sơ công khai được liên kết.

5

Tôi đã tìm thấy một số cách url hồ sơ có thể trông giống như:

http://uk.linkedin.com/pub/some-name/1/1b3/b45/ 
http://nl.linkedin.com/pub/other-name/11/223/544 
http://www.linkedin.com/in/aname/ 
http://www.linkedin.com/in/another-name 
http://linkedin.com/in/name 
http://nl.linkedin.com/in/name 
http://nl.linkedin.com/in/name/ 

Tôi đã sử dụng regex này để mô tả nó:

^https?://((www|\w\w)\.)?linkedin.com/((in/[^/]+/?)|(pub/[^/]+/((\w|\d)+/?){3}))$ 

Nó không phải là nghiêm ngặt-nghiêm ngặt nhưng nó đưa tôi về nhà.

chỉnh sửa
- Thêm https hỗ trợ

+0

Tôi thấy một biểu mẫu có dạng' https: //www.linkedin.com/profile/view? Id = 12345678' hiện nay. –

+0

nó regex làm việc cho tôi. –

2

này được kiểm tra biểu thức chính quy mà tôi sử dụng trên trang web của tôi. Tôi phù hợp với tất cả các biến thể hiện đang tồn tại.

var linkedin=/(https?)?:?(\/\/)?(([w]{3}||\w\w)\.)?linkedin.com(\w+:{0,1}\w*@)?(\S+)(:([0-9])+)?(\/|\/([\w#!:.?+=&%@!\-\/]))?/; 
+0

Làm cách nào để bạn có thể thực hiện giao thức http/https/ftp trong tùy chọn này? điều gì sẽ xảy ra nếu ai đó vừa vào www.linkedin.com/their-profile-name, mà không cần http. Ngoài ra, nó hoạt động. –

+0

@NalinAgrawal Bạn có thể sử dụng bất kỳ kết hợp URL nào và bạn sẽ nhận được kết quả đúng. Tôi thay đổi một mã bit nhưng mẫu là như nhau. Nếu bạn hiểu regex, bạn sẽ nhận được rằng công việc có hoặc không có http, https và www –

3

tôi sử dụng một biểu thức chính quy permisive hơn:

^(http(s)?:\/\/)?([\w]+\.)?linkedin\.com\/(pub|in|profile)

Nó bao gồm các URL mà không squeme và tất cả các mẫu từ câu trả lời khác. Bạn có thể thực hiện bất kỳ sự thay đổi ở đây http://regex101.com/r/vE8tV7

+0

Điều này vi phạm các url tìm kiếm như http://www.linkedin.com/pub/dir/+/semnani/us-49-greater-los -angeles-area –

3

Tiếp theo biểu hiện sẽ giúp bạn với tất cả các mẫu:

((https?:\/\/)?((www|\w\w)\.)?linkedin\.com\/)((([\w]{2,3})?)|([^\/]+\/(([\w|\d-&#?=])+\/?){1,}))$ 

Demo

https://regex101.com/r/oT7iM2/5

+0

Cảm ơn bạn đã thêm Demo. – Prasanna

0

Tôi chỉ đơn giản là sử dụng regex sau:

http(s)?:\/\/([w]{3}\.)?linkedin\.com\/in\/([a-zA-Z0-9-]{5,30})\/? 

Theo url hồ sơ tùy chỉnh mới nhất của tài liệu Linkedin có thể có 5-30 chữ cái hoặc số.

Nó hoạt động cho danh sách sau đây của url:

https://www.linkedin.com/in/your-profile-5-30-length/ 
https://linkedin.com/in/your-profile-5-30-length/ 
http://www.linkedin.com/in/your-profile-5-30-length/ 
http://linkedin.com/in/your-profile-5-30-length/ 
Các vấn đề liên quan