Python调用LinkedIn API批量获取帖子分享统计数据的问题排查
方案选型建议
- 优先选择一次性批量传入所有ID的方案:LinkedIn API有严格的请求速率限制,批量查询多个帖子仅消耗1次请求配额,远优于遍历单条查询的方案,执行效率也更高。
- 若你的ID列表长度超过接口单批次上限(该接口通常单批支持最多100个UGC Post URN),可以将列表拆分为多个小批次,按批次批量请求即可,仍不需要单条遍历。
现有代码的核心问题
你运行后没有任何输出,是因为存在多个基础语法和逻辑错误:
- 缩进错误导致主逻辑完全不执行
if __name__ == '__main__'块被错误缩进写在了share_stats函数内部,且位于return语句之后,程序启动时不会执行该段的任何逻辑,自然没有输出。 - URN拼接格式错误
拼接URN时多了多余的&符号,生成的参数格式完全不符合LinkedIn API要求,就算请求发出去也会返回参数错误。 - 不必要的
eval调用,存在安全和格式风险eval完全不需要使用,且headers是字典对象,转为字符串放入eval解析大概率会出现格式错误,导致请求无法正常发起。 - 参数传递缺失
share_stats函数定义要求传入headers和shids两个参数,你调用时仅传入了headers,就算执行也会直接报参数缺失错误。 - 全局变量缩进错误
link变量定义前有多余缩进,会被判定为局部未定义变量,运行时会抛NameError。
修正后的可运行代码
import requests # 固定接口前缀 BASE_URL = "https://api.linkedin.com/v2/organizationalEntityShareStatistics?q=organizationalEntity&organizationalEntity=urn%3Ali%3Aorganization%3A77487" def share_stats(headers, shids): # 批量拼接符合要求的URN列表 urn_list = [f"urn%3Ali%3AugcPost%3A{shid}" for shid in shids] ugc_posts_param = f"&ugcPosts=List({','.join(urn_list)})" # 拼接完整请求URL request_url = BASE_URL + ugc_posts_param # 发起请求,增加错误处理方便排查问题 response = requests.get(request_url, headers=headers) # 请求失败时主动抛出异常 response.raise_for_status() return response.json() if __name__ == '__main__': # 这里替换为你自己的帖子ID列表 shids = ["你的帖子ID1", "你的帖子ID2", "你的帖子IDx"] credentials = 'credentials.json' access_token = auth(credentials) # 你的鉴权逻辑保持不变 headers = headers(access_token) # 你的请求头生成逻辑保持不变 # 调用函数获取统计数据 stats_result = share_stats(headers, shids) print(stats_result) # 如果需要保存到JSON文件,可以加以下代码 # import json # with open("linkedin_share_stats.json", "w", encoding="utf-8") as f: # json.dump(stats_result, f, ensure_ascii=False, indent=2)
补充说明
如果你的ID数量超过接口单批次上限,可以将shids列表拆分为多个长度为50-100的子列表,遍历子列表批量请求,再将所有返回结果合并即可。
内容的提问来源于stack exchange,提问作者Piotr Chmurzynski
相关产品推荐
相关产品推荐

