linkedin について
curl と jq で LinkedIn API を呼び出し、メンバーのフィードにテキストやリンクを投稿するスキルです。メンバーの識別、API バージョン、投稿確認、成功結果の記録を扱います。
主な機能
- 01OpenID userinfo からメンバー URN を取得
- 02テキストやインラインリンクの投稿
- 03バージョン付き Posts API と旧 API の代替
- 04成功した投稿を成果物として記録
活用シーン
- 01確認済みの更新をメンバーのフィードに投稿
- 02LinkedIn の投稿で記事リンクを共有
インストール
コマンドをコピーしてターミナルで実行します。
npx skills add https:/ / github.com/ acedatacloud/ skills --skill linkedinインストール後、Claude Code で/linkedinを入力して読み込まれたか確認します。
詳細
curl + jq を使ってLinkedIn APIを呼び出します。ユーザーのベアラートークンは
$LINKEDIN_TOKEN にあります。すべての呼び出しで
Authorization: Bearer $LINKEDIN_TOKEN が必要です。
LinkedIn の投稿は、メンバーの URN を作成者として指定する必要があります。OpenID の userinfo エンドポイントからメンバー ID を取得し、
urn:li:person:{sub} を組み立てます。
SUB=$(curl -sS -H "Authorization: Bearer $LINKEDIN_TOKEN" \
"https://api.linkedin.com/v2/userinfo" | jq -r .sub)
AUTHOR="urn:li:person:$SUB"
echo "$AUTHOR"
エラーは message / serviceErrorCode を含む JSON です。内容をそのまま表示してください。
401 → トークンの有効期限切れです(トークンの有効期間は約 60 日です)。LinkedIn コネクターに再接続してください。
投稿を公開する(Posts API)
まずユーザーにテキストを確認してください。 バージョン指定の Posts API を使い、
LinkedIn-Version ヘッダーに最近の YYYYMM を設定します(LinkedIn では有効な最新バージョンが必要です。426 やバージョンエラーが返された場合は、当月の値に更新してください)。
jq -n --arg a "$AUTHOR" --arg t "My update text. Check out https://studio.acedata.cloud" \
'{author:$a, commentary:$t, visibility:"PUBLIC",
distribution:{feedDistribution:"MAIN_FEED", targetEntities:[], thirdPartyDistributionChannels:[]},
lifecycleState:"PUBLISHED", isReshareDisabledByAuthor:false}' \
| curl -sS -X POST "https://api.linkedin.com/rest/posts" \
-H "Authorization: Bearer $LINKEDIN_TOKEN" \
-H "Content-Type: application/json" \
-H "LinkedIn-Version: 202401" \
-H "X-Restli-Protocol-Version: 2.0.0" \
-d @- -D - -o /dev/null | tr -d '\r' | awk '/^[Xx]-[Rr]estli-[Ii]d:|^[Ll]ocation:/{print}'
作成が成功すると 201 が返され、投稿の URN はレスポンスヘッダーの x-restli-id
(または Location)に含まれます。その URN または生成された投稿 URL を報告してください。
リンク付き投稿:URL を
commentaryに直接記載してください(LinkedIn が自動的にプレビューを表示します)。 リッチな記事の添付には assets/images API が必要です。シンプルなテキスト/リンクの共有では対象外のため、リンクは本文に直接記載してください。
フォールバック:旧式の ugcPosts
アプリでバージョン指定のエンドポイントを利用できない場合、w_member_social を使った
POST https://api.linkedin.com/v2/ugcPosts と
"specificContent."com.linkedin.ugc.ShareContent" ボディも機能します。上記の /rest/posts を優先してください。
注意点
- 作成者の URN はトークンのメンバーと一致している必要があります(
urn:li:person:{sub})。他の人として投稿することはできません。 w_member_socialで投稿できるのはメンバー自身のフィードのみです。会社の Page への投稿にはw_organization_socialと管理者ロールが必要です(このコネクターでは対象外です)。/rest/*ではLinkedIn-Versionヘッダーが必須です。古い値を指定するとバージョンエラーが返されるため、現在のYYYYMMに更新してください。
出力を記録する
投稿の公開が成功し、実際の結果 URL を取得したら、ユーザーがこの成果物を My Outputs で追跡できるよう、組み込みの
publish_artifact ツールを一度だけ呼び出してください。
publish_artifact(kind="article", channel="linkedin", title="<title>", url="<the REAL returned URL>", status="delivered")
実際に返された URL を使用してください。決して URL を捏造しないでください。公開した項目ごとに一度だけ、配信が確認された後に呼び出してください。公開に失敗した場合は呼び出さないか、status="failed" を使用してください。
_shared/artifacts.md を参照してください。