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

循环中调用LinkedIn API报'dict对象不可调用'错误如何解决

问题排查与解决

错误根因

  • 你遇到的TypeError: 'dict' object is not callable属于典型的变量名重复覆盖问题,和是否放入循环没有直接关系:
    • 初始状态下headers是一个用于生成请求头的函数,因此第一次执行headers(access_token)可以正常调用,返回字典格式的请求头
    • 你将函数返回的字典结果直接赋值给了同名变量headers,执行完这一步后,原本的headers函数就被覆盖成了字典对象
    • 进入循环后第二次执行headers(access_token)时,实际是尝试将字典当成函数调用,自然抛出类型错误
  • 你后续修改的headers.get(access_token)、headers[access_token]都不符合逻辑:你的需求是用access_token生成请求头,不是从请求头字典中读取access_token,自然无法解决问题
  • 你贴出的调整后代码还存在另一个变量名错误:你将生成的请求头存储在headers变量中,但发请求时传入的是未定义的auth_headers,运行会触发NameError

修正方案

方案1:单ID遍历请求(适配你现有写法,改动最小)

请求头只需要生成一次,无需放入循环,同时注意不要用函数名作为存储结果的变量名,避免覆盖:

import requests
import json

shlink = "https://api.linkedin.com/v2/organizationalEntityShareStatistics?q=organizationalEntity&organizationalEntity=urn%3Ali%3Aorganization%3A77487&shares=List(urn%3Ali%3Ashare%3A{})"
shares = []
token = auth(credentials) 
# 用不同名的变量存储生成的请求头,避免覆盖原函数
auth_headers = fheaders(token) 
for shid in shids:
    r = shlink.format(shid)
    res = requests.get(r, headers=auth_headers)
    # 增加响应状态判断,避免接口报错导致逻辑中断
    if res.status_code == 200:
        share_stats = res.json()
        shares.extend(share_stats["elements"])
    else:
        print(f"ID {shid} 请求失败,状态码:{res.status_code}")

# 导出为JSON文件
with open("linkedin_share_stats.json", "w", encoding="utf-8") as f:
    json.dump(shares, f, ensure_ascii=False, indent=2)

方案2:批量ID请求(更高效,降低触发接口限流概率)

LinkedIn接口支持传入多个ID批量查询,可将ID拆分批次请求,大幅减少请求次数:

import requests
import json

base_url = "https://api.linkedin.com/v2/organizationalEntityShareStatistics?q=organizationalEntity&organizationalEntity=urn%3Ali%3Aorganization%3A77487&ugcPosts=List({})"
shares = []
token = auth(credentials)
auth_headers = fheaders(token)
# 可根据接口规则调整批次大小,避免URL过长
batch_size = 20
for i in range(0, len(shids), batch_size):
    batch = shids[i:i+batch_size]
    id_str = ",".join([f"urn%3Ali%3AugcPost%3A{shid}" for shid in batch])
    r = base_url.format(id_str)
    res = requests.get(r, headers=auth_headers)
    if res.status_code == 200:
        share_stats = res.json()
        shares.extend(share_stats["elements"])
    else:
        print(f"批次{i//batch_size + 1} 请求失败,状态码:{res.status_code}")

# 导出为JSON文件
with open("linkedin_share_stats.json", "w", encoding="utf-8") as f:
    json.dump(shares, f, ensure_ascii=False, indent=2)

内容的提问来源于stack exchange,提问作者Piotr Chmurzynski

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.09.29 03:15:00