调用LinkedIn API获取个人帖子时出现‘Member permissions must be used when using member as author’错误的求助
问题分析
这个错误的核心原因是缺少读取个人社交内容的必要权限,同时请求参数的上下文设置不符合访问自身帖子的要求:
- 你的应用当前未配置
r_member_social权限——这是读取自己个人帖子的必备权限; 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
相关产品推荐
相关产品推荐

