LinkedIn API orqali post e'lon qilish
LinkedIn'ga a'zo nomidan API orqali post joylash uchun ilovaga ikkita ochiq mahsulotni qo'shing — Sign In with LinkedIn using OpenID Connect va Share on LinkedIn — openid profile email w_member_social scope'larini so'rang, /v2/userinfo dan a'zoning sub qiymatini oling va /rest/posts ga muallif urn:li:person:{sub} hamda LinkedIn-Version sarlavhasi bilan POST yuboring. Kompaniya sahifasi uchun tekshiruvli Community Management API kerak.
Yangilangan:
LinkedIn'ga API orqali post joylash uchun nima kerak?
Ikkita ochiq mahsulot ulangan LinkedIn developer ilovasi, w_member_social scope'li a'zo access tokeni va a'zoning person URN'i. Share on LinkedIn w_member_social ni maxsus tasdiqsiz beradi; Sign In with LinkedIn using OpenID Connect esa a'zoni aniqlash uchun openid, profile va email ni beradi. Kompaniya sahifasi nomidan post — boshqa, tekshiruvli dastur.
LinkedIn Open Permissions'ni barcha dasturchilarga maxsus tasdiqsiz beriladigan yagona ruxsatlar deb ta'riflaydi. Post uchun bular profile, email va w_member_social. Qolgan hamma narsa — tashkilot nomidan post joylashdan tortib a'zo faoliyatini o'qishgacha — LinkedIn tasdig'ini talab qiladi.
Ochiq identifikatsiya scope'lari — OpenID Connect'dagi openid, profile va email; a'zo ma'lumotlari /v2/userinfo endpoint'idan olinadi.
Post uchun LinkedIn mahsulotlari va ruxsatlari
| Mahsulot yoki dastur | Ruxsatlar | Kirish | Nima beradi |
|---|---|---|---|
| Sign In with LinkedIn using OpenID Connect | openid, profile, email | Ochiq, Products bo'limida o'zingiz qo'shasiz | A'zo identifikatsiyasi: sub, ism, rasm, email |
| Share on LinkedIn | w_member_social | Ochiq, Products bo'limida o'zingiz qo'shasiz | A'zo nomidan post, izoh va layk |
| Community Management API | w_organization_social, r_organization_social va boshqalar | Tekshiruvli: avval Development tier, keyin Standard tier | Kompaniya sahifasi postlari, izohlar, analitika |
| A'zo postlarini o'qish | r_member_social | Yopiq — LinkedIn hozir ariza qabul qilmaydi | A'zoning post, izoh va layklarini olish |
| Messages API | yo'q | Faqat tasdiqlangan hamkorlar uchun | A'zolararo xabarlar |
boryo'qJadvalni yon tomonga suring
Lead Sync (LinkedIn lead gen formalari) — o'z arizasi bo'lgan alohida dastur. Socialift LinkedIn xabarlari yoki lead formalarini taqdim etmaydi.
LinkedIn'da API orqali birinchi postni qanday e'lon qilish kerak
Ilova yarating va mahsulot qo'shing
LinkedIn Developer Portal'da My Apps bo'limida ilova yarating, keyin Products bo'limida Sign In with LinkedIn using OpenID Connect va Share on LinkedIn'ni qo'shing.
Redirect URL'ni sozlang
Auth bo'limidan Client ID va Client Secret'ni oling va to'liq HTTPS redirect URL qo'shing. LinkedIn undagi query parametrlarni e'tiborsiz qoldiradi va
#bor URL'ni qabul qilmaydi.A'zoni avtorizatsiyaga yuboring
https://www.linkedin.com/oauth/v2/authorizationgaresponse_type=code,client_id,redirect_uri,stateva probel bilan ajratilganscopebilan yo'naltiring, masalanopenid profile email w_member_social.Kodni 30 daqiqa ichida almashtiring
stateni tekshiring, keyinhttps://www.linkedin.com/oauth/v2/accessTokenga form ko'rinishidagrant_type=authorization_code,code,client_id,client_secretvaredirect_uriyuboring. Kod 30 daqiqa amal qiladi.Person URN'ni oling
Token bilan
GET https://api.linkedin.com/v2/userinfoni chaqiring.submaydoni — a'zo identifikatori; post muallifiurn:li:person:{sub}ko'rinishida bo'ladi.Postni yarating
https://api.linkedin.com/rest/postsgaLinkedIn-Version: YYYYMMvaX-Restli-Protocol-Version: 2.0.0sarlavhalari bilan POST yuboring.201javobida post ID'six-restli-idsarlavhasida keladi.
Python'da kirish va post e'lon qilish
api_version ni qo'llab-quvvatlanadigan YYYYMM relizga aniq o'rnating — LinkedIn eng so'nggi versiyani avtomatik qo'llamaydi.
import os
from socialift import LinkedIn
REDIRECT_URI = "https://app.example.com/oauth/linkedin/callback"
def client() -> LinkedIn:
return LinkedIn(
client_id=os.environ["LINKEDIN_CLIENT_ID"],
client_secret=os.environ["LINKEDIN_CLIENT_SECRET"],
api_version=os.environ.get("LINKEDIN_API_VERSION", "202609"),
)
async def authorize_url(state: str) -> str:
async with client() as li: # standart scope'lar: openid profile email w_member_social
return li.login_url(redirect_uri=REDIRECT_URI, state=state)
async def publish(code: str) -> str:
async with client() as li:
bundle = await li.exchange_code(code, redirect_uri=REDIRECT_URI)
me = await li.me(bundle.access_token)
post = await li.create_post(
bundle.access_token,
author=li.person_urn(me.id),
text="Sentabr uchun API o'zgarishlar jurnalini e'lon qildik.",
visibility="PUBLIC",
)
return post["id"] # urn:li:share:… yoki urn:li:ugcPost:…create_post visibility uchun PUBLIC yoki CONNECTIONS ni qabul qiladi va yangi post URN'ini x-restli-id javob sarlavhasidan o'qiydi — javob tanasida u bo'lmaydi.
article_url= va article_title= postga maqola havolasini biriktiradi. Posts API URL'larni skanerlamaydi, ya'ni post faqat siz yuborgan narsani ko'rsatadi: bu metod havola va sarlavhani o'rnatadi, thumbnail'siz.
Posts API va eski ugcPosts
| Jihat | Posts API | ugcPosts (eski) |
|---|---|---|
| Endpoint | POST /rest/posts | POST /v2/ugcPosts |
| Holati | Joriy; LinkedIn uni ugcPosts o'rnini bosuvchi deb ko'rsatadi | Share on LinkedIn qo'llanmasida hali ham ko'rsatilgan |
| Versiya sarlavhasi | LinkedIn-Version: YYYYMM majburiy | Versiyalanmagan |
| Protokol sarlavhasi | X-Restli-Protocol-Version: 2.0.0 | X-Restli-Protocol-Version: 2.0.0 |
| Post matni | commentary | specificContent → com.linkedin.ugc.ShareContent → shareCommentary |
| Media | Images, Videos va Documents API'laridan olingan URN'lar; MultiImage va Poll postlari | /v2/assets?action=registerUpload orqali ro'yxatdan o'tgan asset'lar |
| Yaratilgan post ID'si | x-restli-id sarlavhasi, 201 | X-RestLi-Id sarlavhasi, 201 |
Yangi integratsiya uchun /rest/posts ni tanlang: LinkedIn ugcPosts'dan Posts API'ga o'tish uchun alohida migratsiya qo'llanmasini beradi.
LinkedIn-Version sarlavhasi qanday ishlaydi
Versiyalangan LinkedIn API'lari https://api.linkedin.com/rest/ ostida joylashgan va har bir so'rovda YYYYMM formatidagi LinkedIn-Version bo'lishi shart. LinkedIn versiyalarni har oy chiqaradi va har birini kamida bir yil qo'llab-quvvatlaydi. Maqola yozilgan paytdagi eng so'nggi versiya — 202609 (2026-yil sentabr).
LinkedIn eng yangi versiyaga o'zi o'tkazmaydi: sarlavha bo'lmasa yoki versiya muddati tugagan bo'lsa, xato javob qaytadi. Hujjatlar hozir 202510 versiyasi 2026-yil 15-oktabrda o'chirilishini ogohlantiradi; undan eski versiyalar qo'llab-quvvatlanadiganlar ro'yxatida yo'q.
/v2/userinfo kabi /v2/ endpoint'lari versiyalanmagan. Socialift SDK'da versiya klient uchun bir marta api_version= orqali (yoki LinkedIn.from_env() bilan LINKEDIN_API_VERSION orqali) beriladi va har bir /rest/ so'roviga X-Restli-Protocol-Version: 2.0.0 bilan birga qo'shiladi. Uni kamida yiliga bir marta yangilang.
LinkedIn tokenlari: muddat va yangilash
| Element | LinkedIn xatti-harakati | Socialift SDK |
|---|---|---|
| Avtorizatsiya kodi | 30 daqiqa amal qiladi; darhol ishlating | exchange_code |
| Access token | 60 kun (expires_in = 5184000); taxminan 500 belgi, saqlashni 1000+ belgiga rejalang | exchange_code natijasi |
| Dasturiy refresh token | Faqat tasdiqlangan hamkorlarga (Marketing Developer Platform); 365 kun amal qiladi, yangilashda muddati qayta boshlanmaydi | refresh |
| Refresh token yo'q | Avtorizatsiyani qayta o'tkazing; a'zo LinkedIn'ga kirgan va token hali tugamagan bo'lsa, rozilik oynasi o'tkazib yuboriladi | login_url |
| Scope o'zgarishi | Boshqa scope so'ralsa, avval berilgan access token'lar bekor bo'ladi | yo'q |
| Token holati | POST /oauth/v2/introspectToken active, status, expires_at, scope ni qaytaradi | introspect |
boryo'q
Tokenni tekshirish, qayta avtorizatsiya va postni o'chirish
# client() va REDIRECT_URI — linkedin_post.py dan
async def ensure_active(token: str, state: str) -> str | None:
async with client() as li:
info = await li.introspect(token)
if info.get("active"):
return None
return li.login_url(redirect_uri=REDIRECT_URI, state=state) # a'zoni qayta yuboramiz
async def remove_post(token: str, post_urn: str) -> None:
async with client() as li:
await li.delete_post(token, post_urn)delete_post URN'ni yo'l qismida LinkedIn talab qilganidek URL-kodlaydi. O'chirish idempotent: allaqachon o'chirilgan postni o'chirish yana 204 qaytaradi.
Kompaniya sahifasi nomidan post: Community Management API
Tashkilot nomidan post joylashda muallif urn:li:organization:{id} bo'ladi va tokenga w_organization_social kerak. Bu ruxsat sahifada ADMINISTRATOR, DIRECT_SPONSORED_CONTENT_POSTER yoki CONTENT_ADMIN roliga ega a'zolar bilan cheklangan va faqat Community Management API orqali beriladi.
Community Management API'ga kirish tekshiriladi. LinkedIn uni hozircha faqat tijoriy maqsaddagi ro'yxatdan o'tgan yuridik tashkilotlarga beradi: biznes email tasdiqlanadi, tashkilotning yuridik nomi, manzili, sayti va maxfiylik siyosati so'raladi, LinkedIn sahifangizning super admini esa ilovani tasdiqlaydi. Avval cheklangan so'rov hajmli Development tier beriladi; Standard tier uchun har bir foydalanish holatining ekran yozuvi kerak. Development tier arizasi boshqa API mahsulotlari ulanmagan yangi ilovada beriladi.
Ruxsat olingach, o'sha create_post chaqiruvi author sifatida tashkilot URN'i bilan ishlaydi, posts(token, author=...) esa r_organization_social bilan tashkilot postlarini ro'yxatlaydi.
Bu API'lar orqali olingan a'zo ma'lumotlari LinkedIn Marketing API shartlariga bo'ysunadi: ularni savdo, ishga yollash yoki CRM ma'lumotlarini boyitish uchun ishlatib bo'lmaydi, a'zo faoliyati ma'lumotlari esa 48 soatdan ortiq saqlanmaydi.
LinkedIn API nimani bermaydi
A'zoning o'z postlarini o'qish r_member_social ni talab qiladi, LinkedIn esa uni yopiq ruxsat deb belgilagan va ariza qabul qilmayapti. Amalda aksariyat ilovalar uchun person URN bilan li.posts() 403 qaytaradi; SDK buni tushuntirishli PermissionError ga aylantiradi.
Xabar yuborish faqat tasdiqlangan hamkorlarga ochiq, bunda ham xabar a'zoning aniq harakatiga bog'liq bo'lishi kerak — avtomatik yoki rejalashtirilgan yuborish mumkin emas. Lead gen forma ma'lumotlari alohida Lead Sync dasturiga tegishli. Socialift LinkedIn xabarlari va lead formalarini taqdim etmaydi.
Limitlar kunlik: Share on LinkedIn hujjatida a'zo uchun kuniga 150 so'rov va ilova uchun 100 000 so'rov ko'rsatilgan, kunlar UTC bo'yicha hisoblanadi.
Ko'p so'raladigan savollar
Share on LinkedIn bilan kompaniya sahifasiga post joylasa bo'ladimi?
Yo'q. Share on LinkedIn faqat a'zo nomidan post uchun w_member_social beradi. Kompaniya sahifasi uchun w_organization_social kerak: u Community Management API orqali va sahifada admin yoki kontent roli bo'lgan a'zolarga beriladi.
LinkedIn access token qancha amal qiladi?
Hozir barcha access token'lar 60 kunlik muddat bilan beriladi. Dasturiy refresh token faqat tasdiqlangan hamkorlarga beriladi; qolganlar a'zoni avtorizatsiyadan qayta o'tkazadi, a'zo LinkedIn'ga kirgan va token hali amal qilayotgan bo'lsa, rozilik oynasi o'tkazib yuboriladi.
LinkedIn ugcPosts API eskirganmi?
LinkedIn Posts API ugcPosts API o'rnini bosishini aytadi va o'tish uchun migratsiya qo'llanmasini beradi. Yangi integratsiyalar LinkedIn-Version sarlavhasi bilan /rest/posts dan foydalanishi kerak.
Nega LinkedIn so'rovimni versiya sababli rad etyapti?
/rest/ so'rovlarida LinkedIn-Version sarlavhasi yo'q yoki versiyaning muddati tugagan. Har bir versiya kamida bir yil qo'llab-quvvatlanadi; sarlavhani qo'llab-quvvatlanadigan YYYYMM qiymatga yangilang.
O'z LinkedIn postlarim yoki statistikamni API orqali o'qisam bo'ladimi?
A'zo postlarini o'qish uchun r_member_social kerak, u esa yopiq ruxsat. A'zo postlari statistikasi tekshiruvli Community Management API'ning foydalanish holatlariga kiradi.
LinkedIn xabarlarini API orqali yuborish mumkinmi?
Messages API faqat tasdiqlangan hamkorlarga ochiq va har bir xabar a'zoning aniq harakatidan kelib chiqishi shart. Socialift LinkedIn xabarlari bilan ishlamaydi.