mcpField
L
linkedin

linkedin

github.com/acedatacloudマーケティング・グロース17206 回インストール今日更新
リポジトリ

linkedin について

curl と jq で LinkedIn API を呼び出し、メンバーのフィードにテキストやリンクを投稿するスキルです。メンバーの識別、API バージョン、投稿確認、成功結果の記録を扱います。

主な機能

  1. 01OpenID userinfo からメンバー URN を取得
  2. 02テキストやインラインリンクの投稿
  3. 03バージョン付き Posts API と旧 API の代替
  4. 04成功した投稿を成果物として記録

活用シーン

  1. 01確認済みの更新をメンバーのフィードに投稿
  2. 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 を参照してください。

コメント