如何在无UI服务器上通过Python脚本调用Google People API添加联系人?
无UI服务器环境下用Python创建Google联系人:完全可行!
你遇到的Chrome弹窗问题,是因为官方快速启动指南默认用了交互式OAuth授权流程——这个流程依赖浏览器完成登录授权,显然不适合无头服务器。我们只需要调整授权方式,换成离线模式获取Refresh Token,就能在服务器上完全无交互地调用Google People API创建联系人了。
核心方案:先本地获取Refresh Token,服务器复用
个人Google账号推荐用这个方案,不需要域管理员权限,操作简单:
步骤1:本地生成包含Refresh Token的授权文件(仅需运行一次)
在有浏览器的本地机器上,运行以下代码,它会引导你登录Google账号授权,并生成一个token.json文件(里面包含能长期刷新权限的Refresh Token):
from google_auth_oauthlib.flow import InstalledAppFlow # 授权范围:需要联系人的读写权限 SCOPES = ['https://www.googleapis.com/auth/contacts'] def generate_refresh_token(): # 加载从Google Cloud Console下载的客户端凭据(credentials.json) flow = InstalledAppFlow.from_client_secrets_file( 'credentials.json', SCOPES) # 启用离线模式,强制获取Refresh Token creds = flow.run_local_server( port=0, access_type='offline', prompt='consent' # 强制弹出授权页面,确保返回Refresh Token ) # 保存授权信息到文件 with open('token.json', 'w') as token_file: token_file.write(creds.to_json()) print("已生成token.json,将此文件上传到服务器即可") if __name__ == '__main__': generate_refresh_token()
小提示:
credentials.json需要从Google Cloud Console下载——创建一个OAuth 2.0客户端ID,类型选择「桌面应用」即可。同时别忘了在控制台里启用People API。
步骤2:服务器端编写创建联系人的脚本
把本地生成的token.json和credentials.json上传到服务器,然后运行以下代码就能创建包含姓名和手机号的联系人:
from googleapiclient.discovery import build from google.oauth2.credentials import Credentials SCOPES = ['https://www.googleapis.com/auth/contacts'] def create_google_contact(full_name, phone_number): # 加载之前生成的授权文件 creds = Credentials.from_authorized_user_file('token.json', SCOPES) # 构建People API服务实例 service = build('people', 'v1', credentials=creds) # 构造联系人数据结构 contact_data = { "names": [ { "givenName": full_name.split()[0], # 名 "familyName": full_name.split()[1] if len(full_name.split()) > 1 else "" # 姓 } ], "phoneNumbers": [ { "value": phone_number, "type": "mobile" # 手机号类型,可选home/work等 } ] } # 调用API创建联系人 response = service.people().createContact(body=contact_data).execute() print(f"联系人创建成功!资源ID:{response['resourceName']}") if __name__ == '__main__': # 替换为你要创建的姓名和手机号 create_google_contact("李四", "+8613900139000")
关键注意事项
- 确保在Google Cloud Console中启用了People API,否则会提示权限错误
token.json里的Refresh Token默认不会过期,除非你手动在Google账号的「安全-第三方应用访问」里撤销授权- 服务器环境无需安装浏览器,所有授权逻辑通过Refresh Token自动完成,完全无交互
内容的提问来源于stack exchange,提问作者dxx
相关产品推荐
相关产品推荐

