You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

调用LinkedIn API获取个人帖子时出现‘Member permissions must be used when using member as author’错误的求助

调用LinkedIn API获取个人帖子时出现‘Member permissions must be used when using member as author’错误的求助

问题分析

这个错误的核心原因是缺少读取个人社交内容的必要权限,同时请求参数的上下文设置不符合访问自身帖子的要求:

  1. 你的应用当前未配置r_member_social权限——这是读取自己个人帖子的必备权限;
  2. viewContext设置为READER仅适用于访问公开内容,访问自身帖子需要切换为MEMBER上下文。

解决步骤

1. 补充申请必要权限

登录LinkedIn开发者平台,找到你的应用并完成以下操作:

  • 进入「Products」页面,确认已添加「Community Management API」产品(你已完成此步骤);
  • 切换到「Auth」→「Scopes」,添加r_member_social权限(描述为:Access your posts, comments, and likes);
  • 保存更改后,必须重新生成访问令牌——旧令牌不会自动包含新添加的权限。

2. 调整请求参数与代码

修改get_your_personal_posts函数的两个关键部分,并优化代码细节:

  • 将viewContext从"READER"改为"MEMBER";
  • 建议使用稳定的LinkedIn API版本(如202409),避免使用未来预览版(如202602)带来的未知问题。

修正后的完整代码

import requests

ACCESS_TOKEN = "..."  # 替换为包含r_member_social权限的新令牌
BASE_URL = 'https://api.linkedin.com/rest'

def get_your_person_id():
    """获取个人ID用于帖子API调用"""
    response = requests.get(
        'https://api.linkedin.com/v2/me',
        headers={
            'Authorization': f'Bearer {ACCESS_TOKEN}'
        }
    )
    if response.status_code == 200:
        person_id = response.json()['id']
        print(f"你的个人ID: {person_id}")
        return person_id
    else:
        print(f"错误: {response.text}")
        return None

# 全局请求头,复用避免重复定义
common_headers = {
    'Authorization': f'Bearer {ACCESS_TOKEN}',
    'X-Restli-Protocol-Version': '2.0.0',
    'Linkedin-Version': '202409'  # 使用稳定版API
}

def get_your_personal_posts(person_id, limit=10):
    author_urn = f"urn:li:person:{person_id}"

    params = {
        'q': 'author',
        'viewContext': "MEMBER",  # 切换为个人上下文
        'author': author_urn,
        'count': str(limit),
        'sortBy': 'LAST_MODIFIED',
    }

    response = requests.get(f'{BASE_URL}/posts', params=params, headers=common_headers)

    if response.status_code == 200:
        data = response.json()
        posts = data.get('elements', [])
        print(f"找到 {len(posts)} 条帖子:\n")

        for i, post in enumerate(posts, 1):
            post_id = post['id'].split(':')[-1]
            print(f"{i}. 帖子ID: {post_id}")
            print(f"   帖子URN: {post['id']}")
            # 可选:打印帖子文本内容
            # post_content = post.get('commentary', {}).get('text', '无文本内容')
            # print(f"   内容摘要: {post_content[:50]}...")
            print()
        return posts
    else:
        print(f"错误 {response.status_code}: {response.text}")
        print(f"请求URL: {response.url}")
        return None

# 执行逻辑
if __name__ == "__main__":
    person_id = get_your_person_id()
    if person_id:
        get_your_personal_posts(person_id, 5)

额外注意事项

  • 可以通过调用https://api.linkedin.com/v2/me?projection=(permissions)验证新令牌是否包含r_member_social权限;
  • 若仍报错,检查令牌是否过期,或确认应用的权限审核状态(需确保权限已被批准)。

备注:内容来源于stack exchange,提问作者VariantAbdulaziz

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.04.13 17:53:03