使用LinkedIn-API调用Voyager API获取邀请状态遇400错误求助
问题
我使用linkedin-api库时遇到以下问题:希望通过API查看我发送的好友邀请是否被对方接受,具体是查询通过add_connection方法发送的邀请状态。我发现add_connection接口的响应头中存在Location参数,推测该参数对应新创建邀请数据的相对URL,但调用linkedin._fetch方法请求该URL时返回400错误(示例URL:/voyagerGrowthNormInvitations/7253503640567476224)。
相关代码如下:
import os import requests from dotenv import load_dotenv, find_dotenv from linkedin_api.linkedin import Linkedin from linkedin_api.utils import helpers dotenv_path = find_dotenv() load_dotenv(dotenv_path) # 验证变量获取 username = os.getenv("LINKEDIN_USERNAME") password = os.getenv("LINKEDIN_PASSWORD") linkedin_url_test = "https://www.linkedin.com/in/david-ralambofiringa-mba-99052937/" ### 创建客户端和脚本 cookies_dict = { 'li_at': os.getenv("li_at"), 'JSESSIONID': os.getenv("JSESSIONID"), } cookies = dict_to_cookiejar(cookies_dict) linkedin = Linkedin(username=username, password=password, cookies=cookies) public_id = extract_public_id(linkedin_url_test) profile = linkedin.get_profile(public_id=public_id) # 获取用户URN_ID profile_urn = profile.get("profile_urn") profile_urn_id = helpers.get_id_from_urn(profile_urn); connexion_request = linkedin.add_connection(profile_public_id = public_id, profile_urn = profile_urn) if connexion_request.status_code == 201: # 访问创建的资源URL location_relative_url = connexion_request.headers.get("Location") ressource = linkedin._fetch(location_relative_url) print("ressource = ",ressource.content,ressource.text, ressource.json()) def extract_public_id(linkedin_url): if not linkedin_url: return None if "https://www.linkedin.com/in/" in linkedin_url: public_id = linkedin_url.split("/in/")[-1] public_id = public_id.rstrip('/') return public_id return None def dict_to_cookiejar(cookie_dict): jar = requests.cookies.RequestsCookieJar() for key, value in cookie_dict.items(): jar.set(key, value) return jar
解决思路
- 补充必要请求头:LinkedIn的Voyager API接口通常需要特定请求头才能响应,比如
X-Restli-Protocol-Version(常用值2.0.0),尝试在调用_fetch时添加该头:ressource = linkedin._fetch(location_relative_url, headers={"X-Restli-Protocol-Version": "2.0.0"}) - 修正URL路径:部分Voyager接口需要在相对URL前添加
/api前缀,修改路径后再调用_fetch:full_url = f"/api{location_relative_url}" ressource = linkedin._fetch(full_url) - 验证Cookie有效性:检查
li_at和JSESSIONID是否过期,重新登录获取最新cookies后再测试。 - 使用库内置方法查询:查看linkedin-api库是否提供
get_sent_invitations这类获取已发送邀请列表的方法,通过遍历列表匹配目标用户的邀请状态,比直接调用私有方法_fetch更稳定。 - 确认请求方式:部分LinkedIn接口对请求方式有要求,尝试明确指定GET方式调用
_fetch:ressource = linkedin._fetch(location_relative_url, method="GET") - 添加延迟查询:邀请创建后可能存在异步同步延迟,在调用
_fetch前添加几秒延迟再请求。
内容的提问来源于stack exchange,提问作者Xavier Chambrin
相关产品推荐
相关产品推荐

