วิธีใช้ LinkedIn API ฉบับสมบูรณ์ เจาะลึกการเชื่อมต่อเครือข่ายมืออาชีพ (2026)

Ashley Innocent

Ashley Innocent

25 March 2026

วิธีใช้ LinkedIn API ฉบับสมบูรณ์ เจาะลึกการเชื่อมต่อเครือข่ายมืออาชีพ (2026)

Apidog สำหรับองค์กร

การติดตั้งแบบ On-Premises

SSO & RBAC

รองรับมาตรฐาน SOC 2

สำรวจ Apidog Enterprise

สรุป (TL;DR)

LinkedIn API ช่วยให้นักพัฒนาสามารถผสานรวมกับเครือข่ายมืออาชีพของ LinkedIn โดยใช้โปรแกรมได้ โดยใช้การตรวจสอบสิทธิ์ OAuth 2.0, จุดเชื่อมต่อ RESTful และ GraphQL สำหรับโปรไฟล์, โพสต์, ความคิดเห็น, เพจบริษัท และโฆษณา พร้อมจำกัดอัตรา 100-500 คำขอต่อวันต่อแอปพลิเคชัน คู่มือนี้ครอบคลุมการตั้งค่าการตรวจสอบสิทธิ์, การเข้าถึงโปรไฟล์, การโพสต์เนื้อหา, การจัดการเพจบริษัท, API โฆษณา และกลยุทธ์การผสานรวมสำหรับการใช้งานจริง

บทนำ

LinkedIn มีผู้ใช้งานมืออาชีพมากกว่า 900 ล้านคนในกว่า 200 ประเทศ สำหรับนักพัฒนาที่สร้างเครื่องมือสรรหาบุคลากร, แพลตฟอร์มการตลาด หรือแอปพลิเคชัน B2B การผสานรวม LinkedIn API เป็นสิ่งสำคัญสำหรับการเข้าถึงกลุ่มเป้าหมายมืออาชีพนี้

นี่คือความเป็นจริง: นักการตลาด B2B ที่จัดการการแสดงตนบน LinkedIn ด้วยตนเองต้องเสียเวลา 15-20 ชั่วโมงต่อสัปดาห์ในการโพสต์, ติดตามการมีส่วนร่วม และการสร้างโอกาสในการขาย การผสานรวม LinkedIn API ที่แข็งแกร่งจะช่วยให้การกระจายเนื้อหา, การรวบรวมลูกค้าเป้าหมาย, การวิเคราะห์การมีส่วนร่วม และกระบวนการสรรหาบุคลากรเป็นไปโดยอัตโนมัติ

คู่มือนี้จะนำเสนอขั้นตอนการผสานรวม LinkedIn API อย่างสมบูรณ์ คุณจะได้เรียนรู้การตรวจสอบสิทธิ์ OAuth 2.0, การเข้าถึงโปรไฟล์, การโพสต์เนื้อหา, การจัดการเพจบริษัท, การผสานรวมโฆษณา, Webhooks และกลยุทธ์การปรับใช้ในการใช้งานจริง เมื่ออ่านจบ คุณจะมีความรู้ในการผสานรวม LinkedIn ที่พร้อมใช้งานจริง

💡
Apidog ทำให้การทดสอบการผสานรวม API เป็นเรื่องง่าย ทดสอบจุดเชื่อมต่อ LinkedIn ของคุณ, ตรวจสอบความถูกต้องของ OAuth flows, ตรวจสอบการตอบสนองของ API และแก้ไขข้อผิดพลาดเกี่ยวกับการอนุญาตทั้งหมดในที่เดียว นำเข้าข้อมูลจำเพาะของ API, จำลองการตอบสนอง และแบ่งปันสถานการณ์การทดสอบกับทีมของคุณ
button

LinkedIn API คืออะไร?

LinkedIn มี API แบบ RESTful และ GraphQL สำหรับเข้าถึงข้อมูลเครือข่ายมืออาชีพ API จัดการ:

คุณสมบัติหลัก

คุณสมบัติ คำอธิบาย
RESTful + GraphQL สไตล์ API หลากหลาย
OAuth 2.0 ต้องได้รับการอนุญาตจากผู้ใช้
การจำกัดอัตรา 100-500 คำขอ/วัน ต่อแอป
เพจบริษัท การดำเนินการ CRUD เต็มรูปแบบ
Ads API การจัดการแคมเปญ
Webhooks การแจ้งเตือนแบบเรียลไทม์
การอัปโหลดสื่อ รูปภาพและวิดีโอ

ผลิตภัณฑ์ API

API ระดับการเข้าถึง กรณีการใช้งาน
ลงชื่อเข้าใช้ด้วย LinkedIn เปิด การตรวจสอบสิทธิ์ผู้ใช้
Profile API พาร์ทเนอร์ อ่านโปรไฟล์ผู้ใช้
Company Admin API พาร์ทเนอร์ จัดการเพจบริษัท
Ads API พาร์ทเนอร์ การจัดการแคมเปญโฆษณา
Job Posting API พาร์ทเนอร์ โพสต์และจัดการงาน
Marketing Developer Platform พาร์ทเนอร์ การเข้าถึง API เต็มรูปแบบ

เวอร์ชัน API

เวอร์ชัน สถานะ วันสิ้นสุด
v2 ปัจจุบัน ใช้งานอยู่
v1 เลิกใช้แล้ว ธันวาคม 2023

เริ่มต้นใช้งาน: การตั้งค่าการตรวจสอบสิทธิ์

ขั้นตอนที่ 1: สร้างบัญชีนักพัฒนา LinkedIn

ก่อนเข้าถึง API:

  1. เยี่ยมชม พอร์ทัลนักพัฒนา LinkedIn
  2. ลงชื่อเข้าใช้ด้วยบัญชี LinkedIn
  3. คลิก สร้างแอป (Create App) ในแดชบอร์ด My Apps
  4. กรอกรายละเอียดแอป (ชื่อ, โลโก้, คำอธิบาย)

ขั้นตอนที่ 2: กำหนดการตั้งค่าแอป

ตั้งค่าการตรวจสอบสิทธิ์แอป:

const LINKEDIN_CLIENT_ID = process.env.LINKEDIN_CLIENT_ID;
const LINKEDIN_CLIENT_SECRET = process.env.LINKEDIN_CLIENT_SECRET;
const LINKEDIN_REDIRECT_URI = process.env.LINKEDIN_REDIRECT_URI;

// รับค่าเหล่านี้จากแดชบอร์ดแอปของคุณ
// https://www.linkedin.com/developers/apps/{appId}/auth

ขั้นตอนที่ 3: ขอสิทธิ์ที่จำเป็น

LinkedIn กำหนดให้ต้องมีการอนุมัติสิทธิ์:

สิทธิ์ คำอธิบาย ต้องได้รับการอนุมัติ
r_liteprofile โปรไฟล์พื้นฐาน (ชื่อ, รูปภาพ) อนุมัติอัตโนมัติ
r_emailaddress ที่อยู่อีเมล อนุมัติอัตโนมัติ
w_member_social โพสต์ในนามผู้ใช้ การยืนยันพาร์ทเนอร์
r_basicprofile โปรไฟล์เต็ม การยืนยันพาร์ทเนอร์
r_organization_social การเข้าถึงเพจบริษัท การยืนยันพาร์ทเนอร์
w_organization_social โพสต์ไปที่เพจบริษัท การยืนยันพาร์ทเนอร์
rw_ads การจัดการโฆษณา การยืนยันพาร์ทเนอร์
r_ads_reporting การวิเคราะห์โฆษณา การยืนยันพาร์ทเนอร์

ขั้นตอนที่ 4: สร้าง URL การอนุญาต

ใช้ OAuth 2.0 flow:

const getAuthUrl = (state, scopes = ['r_liteprofile', 'r_emailaddress']) => {
  const params = new URLSearchParams({
    response_type: 'code',
    client_id: LINKEDIN_CLIENT_ID,
    redirect_uri: LINKEDIN_REDIRECT_URI,
    scope: scopes.join(' '),
    state: state
  });

  return `https://www.linkedin.com/oauth/v2/authorization?${params.toString()}`;
};

// การใช้งาน
const state = require('crypto').randomBytes(16).toString('hex');
const authUrl = getAuthUrl(state, ['r_liteprofile', 'r_emailaddress', 'w_member_social']);
console.log(`เปลี่ยนเส้นทางผู้ใช้ไปยัง: ${authUrl}`);

ขั้นตอนที่ 5: แลกเปลี่ยนรหัสสำหรับโทเค็นการเข้าถึง

จัดการการเรียกกลับ OAuth:

const exchangeCodeForToken = async (code) => {
  const response = await fetch('https://www.linkedin.com/oauth/v2/accessToken', {
    method: 'POST',
    headers: {
      'Content-Type': 'application/x-www-form-urlencoded'
    },
    body: new URLSearchParams({
      grant_type: 'authorization_code',
      code: code,
      client_id: LINKEDIN_CLIENT_ID,
      client_secret: LINKEDIN_CLIENT_SECRET,
      redirect_uri: LINKEDIN_REDIRECT_URI
    })
  });

  const data = await response.json();

  return {
    accessToken: data.access_token,
    expiresIn: data.expires_in // 60 วัน
  };
};

// จัดการการเรียกกลับ
app.get('/oauth/callback', async (req, res) => {
  const { code, state } = req.query;

  try {
    const tokens = await exchangeCodeForToken(code);

    // จัดเก็บโทเค็นอย่างปลอดภัย
    await db.users.update(req.session.userId, {
      linkedin_access_token: tokens.accessToken,
      linkedin_token_expires: Date.now() + (tokens.expiresIn * 1000)
    });

    res.redirect('/success');
  } catch (error) {
    console.error('ข้อผิดพลาด OAuth:', error);
    res.status(500).send('การตรวจสอบสิทธิ์ล้มเหลว');
  }
});

ขั้นตอนที่ 6: รีเฟรชโทเค็นการเข้าถึง

โทเค็นการเข้าถึงจะหมดอายุหลังจาก 60 วัน:

const refreshAccessToken = async (refreshToken) => {
  // หมายเหตุ: LinkedIn ไม่มีโทเค็นรีเฟรชให้
  // ผู้ใช้ต้องตรวจสอบสิทธิ์ใหม่หลังจาก 60 วัน
  // ใช้งานการแจ้งเตือนเมื่อหมดอายุ
};

// ตรวจสอบการหมดอายุของโทเค็นก่อนเรียกใช้ API
const ensureValidToken = async (userId) => {
  const user = await db.users.findById(userId);

  if (user.linkedin_token_expires < Date.now() + 86400000) { // 24 ชั่วโมง
    // แจ้งผู้ใช้ให้ตรวจสอบสิทธิ์ใหม่
    await notifyUserToReauth(user.id);
    throw new Error('โทเค็นหมดอายุ โปรดตรวจสอบสิทธิ์ใหม่');
  }

  return user.linkedin_access_token;
};

ขั้นตอนที่ 7: ทำการเรียก API ที่ได้รับการตรวจสอบสิทธิ์

สร้างไคลเอนต์ API ที่นำกลับมาใช้ใหม่ได้:

const LINKEDIN_BASE_URL = 'https://api.linkedin.com/v2';

const linkedinRequest = async (endpoint, options = {}) => {
  const accessToken = await ensureValidToken(options.userId);

  const response = await fetch(`${LINKEDIN_BASE_URL}${endpoint}`, {
    ...options,
    headers: {
      'Authorization': `Bearer ${accessToken}`,
      'Content-Type': 'application/json',
      'X-Restli-Protocol-Version': '2.0.0',
      ...options.headers
    }
  });

  if (!response.ok) {
    const error = await response.json();
    throw new Error(`ข้อผิดพลาด LinkedIn API: ${error.message}`);
  }

  return response.json();
};

// การใช้งาน
const profile = await linkedinRequest('/me');
console.log(`สวัสดี, ${profile.localizedFirstName} ${profile.localizedLastName}`);

การเข้าถึงโปรไฟล์

การรับโปรไฟล์ผู้ใช้

ดึงโปรไฟล์ของผู้ใช้ที่ได้รับการตรวจสอบสิทธิ์:

const getUserProfile = async () => {
  const response = await linkedinRequest('/me?projection=(id,firstName,lastName,profilePicture(displayImage~:playableStreams))');
  return response;
};

// การใช้งาน
const profile = await getUserProfile();

console.log(`ชื่อ: ${profile.localizedFirstName} ${profile.localizedLastName}`);
console.log(`ID: ${profile.id}`);
console.log(`รูปภาพ: ${profile.profilePicture?.['displayImage~']?.elements?.[0]?.identifiers?.[0]?.identifier}`);

การรับที่อยู่อีเมล

ดึงอีเมลของผู้ใช้:

const getUserEmail = async () => {
  const response = await linkedinRequest('/emailAddress?q=members&projection=(emailAddress*)');
  return response;
};

// การใช้งาน
const email = await getUserEmail();
console.log(`อีเมล: ${email.elements?.[0]?.emailAddress}`);

ฟิลด์โปรไฟล์ที่ใช้งานได้

ฟิลด์ สิทธิ์ คำอธิบาย
id r_liteprofile ID สมาชิก LinkedIn
firstName r_liteprofile ชื่อ
lastName r_liteprofile นามสกุล
profilePicture r_liteprofile URL รูปภาพโปรไฟล์
headline r_basicprofile หัวข้ออาชีพ
summary r_basicprofile ส่วนเกี่ยวกับ
positions r_basicprofile ประวัติการทำงาน
educations r_basicprofile ประวัติการศึกษา
emailAddress r_emailaddress อีเมลหลัก

การโพสต์เนื้อหา

การสร้างโพสต์

แชร์โพสต์ข้อความไปยังฟีดของผู้ใช้:

const createPost = async (authorUrn, postContent) => {
  const response = await linkedinRequest('/ugcPosts', {
    method: 'POST',
    body: JSON.stringify({
      author: authorUrn,
      lifecycleState: 'PUBLISHED',
      specificContent: {
        'com.linkedin.ugc.ShareContent': {
          shareCommentary: {
            text: postContent.text
          },
          shareMediaCategory: 'NONE'
        }
      },
      visibility: {
        'com.linkedin.ugc.MemberNetworkVisibility': 'PUBLIC'
      }
    })
  });

  return response;
};

// การใช้งาน
const post = await createPost('urn:li:person:ABC123', {
  text: 'ตื่นเต้นที่จะประกาศเปิดตัวผลิตภัณฑ์ใหม่ของเรา! 🚀 #นวัตกรรม #สตาร์ทอัพ'
});

console.log(`สร้างโพสต์แล้ว: ${post.id}`);

การสร้างโพสต์พร้อมรูปภาพ

แชร์โพสต์พร้อมสื่อ:

const createPostWithImage = async (authorUrn, postData) => {
  // ขั้นตอนที่ 1: ลงทะเบียนการอัปโหลดสื่อ
  const uploadRegistration = await linkedinRequest('/assets?action=registerUpload', {
    method: 'POST',
    body: JSON.stringify({
      registerUploadRequest: {
        recipes: ['urn:li:digitalmediaRecipe:feedshare-image'],
        owner: authorUrn,
        serviceRelationships: [
          {
            relationshipType: 'OWNER',
            identifier: 'urn:li:userGeneratedContent'
          }
        ]
      }
    })
  });

  const uploadUrl = uploadRegistration.value.uploadMechanism['com.linkedin.digitalmedia.uploading.MediaUploadHttpRequest'].uploadUrl;
  const assetUrn = uploadRegistration.value.asset;

  // ขั้นตอนที่ 2: อัปโหลดรูปภาพไปยัง URL ที่ให้มา
  await fetch(uploadUrl, {
    method: 'POST',
    headers: {
      'Authorization': 'Bearer ' + await getAccessToken(),
      'Content-Type': 'application/octet-stream'
    },
    body: postData.imageBuffer
  });

  // ขั้นตอนที่ 3: สร้างโพสต์พร้อมรูปภาพที่อัปโหลด
  const post = await linkedinRequest('/ugcPosts', {
    method: 'POST',
    body: JSON.stringify({
      author: authorUrn,
      lifecycleState: 'PUBLISHED',
      specificContent: {
        'com.linkedin.ugc.ShareContent': {
          shareCommentary: {
            text: postData.text
          },
          shareMediaCategory: 'IMAGE',
          media: [
            {
              status: 'READY',
              description: {
                text: postData.imageDescription || ''
              },
              media: assetUrn,
              title: {
                text: postData.title || ''
              }
            }
          ]
        }
      },
      visibility: {
        'com.linkedin.ugc.MemberNetworkVisibility': 'PUBLIC'
      }
    })
  });

  return post;
};

การสร้างโพสต์พร้อมวิดีโอ

แชร์เนื้อหาวิดีโอ:

const createPostWithVideo = async (authorUrn, postData) => {
  // ลงทะเบียนการอัปโหลดวิดีโอ
  const uploadRegistration = await linkedinRequest('/assets?action=registerUpload', {
    method: 'POST',
    body: JSON.stringify({
      registerUploadRequest: {
        recipes: ['urn:li:digitalmediaRecipe:feedshare-video'],
        owner: authorUrn,
        serviceRelationships: [
          {
            relationshipType: 'OWNER',
            identifier: 'urn:li:userGeneratedContent'
          }
        ]
      }
    })
  });

  const assetUrn = uploadRegistration.value.asset;

  // อัปโหลดวิดีโอ (ใช้ URL อัปโหลดที่ลงชื่อไว้ล่วงหน้าจากการตอบกลับ)
  // ... ลอจิกการอัปโหลด ...

  // สร้างโพสต์
  const post = await linkedinRequest('/ugcPosts', {
    method: 'POST',
    body: JSON.stringify({
      author: authorUrn,
      lifecycleState: 'PUBLISHED',
      specificContent: {
        'com.linkedin.ugc.ShareContent': {
          shareCommentary: { text: postData.text },
          shareMediaCategory: 'VIDEO',
          media: [{ status: 'READY', media: assetUrn }]
        }
      },
      visibility: { 'com.linkedin.ugc.MemberNetworkVisibility': 'PUBLIC' }
    })
  });

  return post;
};

ข้อมูลจำเพาะของสื่อ

ประเภทสื่อ รูปแบบ ขนาดสูงสุด ระยะเวลา
รูปภาพ JPG, PNG, GIF 8MB N/A
วิดีโอ MP4, MOV 5GB สูงสุด 15 นาที
เอกสาร PDF, PPT, DOC 100MB N/A

การจัดการเพจบริษัท

การรับข้อมูลบริษัท

ดึงรายละเอียดเพจบริษัท:

const getCompanyInfo = async (companyId) => {
  const response = await linkedinRequest(
    `/organizations/${companyId}?projection=(id,localizedName,vanityName,tagline,description,universalName,logoV2(original~:playableStreams),companyType,companyPageUrl,confirmedLocations,industries,followerCount,staffCountRange,website, specialties)`
  );
  return response;
};

// การใช้งาน
const company = await getCompanyInfo('1234567');
console.log(`บริษัท: ${company.localizedName}`);
console.log(`ผู้ติดตาม: ${company.followerCount}`);
console.log(`เว็บไซต์: ${company.website}`);

การโพสต์ไปที่เพจบริษัท

แชร์การอัปเดตไปที่เพจบริษัท:

const createCompanyPost = async (organizationUrn, postContent) => {
  const response = await linkedinRequest('/ugcPosts', {
    method: 'POST',
    body: JSON.stringify({
      author: organizationUrn,
      lifecycleState: 'PUBLISHED',
      specificContent: {
        'com.linkedin.ugc.ShareContent': {
          shareCommentary: {
            text: postContent.text
          },
          shareMediaCategory: postContent.media ? 'IMAGE' : 'NONE',
          media: postContent.media ? [
            {
              status: 'READY',
              media: postContent.media.assetUrn
            }
          ] : []
        }
      },
      visibility: {
        'com.linkedin.ugc.MemberNetworkVisibility': 'PUBLIC'
      }
    })
  });

  return response;
};

// การใช้งาน
const post = await createCompanyPost('urn:li:organization:1234567', {
  text: 'เรากำลังรับสมัคร! มาร่วมทีมที่กำลังเติบโตของเรา #อาชีพ #รับสมัคร'
});

การรับผู้ติดตามบริษัท

ดึงจำนวนผู้ติดตาม:

const getFollowerCount = async (organizationId) => {
  const response = await linkedinRequest(
    `/organizationalEntityFollowerStatistics?q=organizationalEntity&organizationalEntity=urn:li:organization:${organizationId}`
  );
  return response;
};

การจำกัดอัตรา

การทำความเข้าใจการจำกัดอัตรา

LinkedIn บังคับใช้การจำกัดอัตราต่อแอปพลิเคชัน:

API จำกัด ช่วงเวลา
Profile API 100 คำขอ ต่อวัน
UGC Posts 50 โพสต์ ต่อวัน
Company Admin 500 คำขอ ต่อวัน
Ads API 100 คำขอ ต่อนาที

ส่วนหัวการจำกัดอัตรา

ส่วนหัว คำอธิบาย
X-Restli-Quota-Remaining คำขอที่เหลืออยู่
X-Restli-Quota-Reset เวลาเป็นวินาทีจนกว่าจะรีเซ็ต

การแก้ไขปัญหาทั่วไป

ปัญหา: 401 Unauthorized

วิธีแก้ไข:

  1. ตรวจสอบว่าโทเค็นการเข้าถึงยังไม่หมดอายุ (60 วัน)
  2. ตรวจสอบว่าขอบเขตโทเค็นรวมทรัพยากรที่ร้องขอ
  3. ตรวจสอบว่ามีส่วนหัว Authorization: Bearer {token} อยู่

ปัญหา: 403 Forbidden

วิธีแก้ไข:

  1. ตรวจสอบว่าแอปมีสิทธิ์ที่จำเป็น
  2. ตรวจสอบว่าผู้ใช้อนุมัติขอบเขตที่ร้องขอ
  3. อาจจำเป็นต้องมีการยืนยันพาร์ทเนอร์

ปัญหา: 429 Rate Limited

วิธีแก้ไข:

  1. ใช้งานการจัดคิวคำขอ
  2. แคชการตอบกลับเพื่อลดการเรียกใช้
  3. ใช้ webhooks แทนการสำรวจ (polling)

รายการตรวจสอบการปรับใช้ในการใช้งานจริง

ก่อนที่จะเปิดใช้งานจริง:

กรณีการใช้งานจริง

แพลตฟอร์มการสรรหาบุคลากร

เครื่องมือการสรรหาบุคลากรที่ประกาศรับสมัครงานโดยอัตโนมัติ:

ระบบอัตโนมัติทางการตลาด B2B

แพลตฟอร์มการตลาดที่กำหนดเวลาเนื้อหา LinkedIn:

บทสรุป

LinkedIn API ให้การเข้าถึงคุณสมบัติเครือข่ายมืออาชีพที่ครอบคลุม ประเด็นสำคัญ:

button

ส่วนคำถามที่พบบ่อย (FAQ)

ฉันจะเข้าถึง LinkedIn API ได้อย่างไร?

สร้างบัญชีนักพัฒนา LinkedIn, สร้างแอปพลิเคชัน และดำเนินการยืนยันพาร์ทเนอร์เพื่อเข้าถึง API ขั้นสูง

ฉันสามารถโพสต์ไปยัง LinkedIn โดยอัตโนมัติได้หรือไม่?

ได้ ใช้ UGC (User Generated Content) API พร้อมสิทธิ์ w_member_social สำหรับโพสต์ส่วนตัว หรือ w_organization_social สำหรับโพสต์ของบริษัท

การจำกัดอัตราของ LinkedIn คืออะไร?

การจำกัดอัตรามีตั้งแต่ 100-500 คำขอต่อวันขึ้นอยู่กับ API ส่วน Ads API อนุญาต 100 คำขอต่อนาที

โทเค็น LinkedIn มีอายุการใช้งานนานเท่าใด?

โทเค็นการเข้าถึงจะหมดอายุหลังจาก 60 วัน ผู้ใช้ต้องตรวจสอบสิทธิ์ใหม่เพื่อเข้าถึง API ต่อไป

ฉันสามารถเข้าถึงการเชื่อมต่อของผู้ใช้ได้หรือไม่?

ไม่ได้ LinkedIn ได้นำการเข้าถึง API การเชื่อมต่อสำหรับแอปส่วนใหญ่ออกไป เนื่องจากการเปลี่ยนแปลงด้านความเป็นส่วนตัว

ฝึกการออกแบบ API แบบ Design-first ใน Apidog

ค้นพบวิธีที่ง่ายขึ้นในการสร้างและใช้ API