ICode9

精准搜索请尝试: 精确搜索
首页 > 编程语言> 文章详细

在独立的Python脚本中向Google进行身份验证的正确机制是什么?

2019-10-28 08:08:09  阅读:224  来源: 互联网

标签:gdata google-oauth google-contacts python


我有一些代码可用于将Gmail联系人的电子邮件地址提取到文本文件中.这是一个简单的Python脚本,可在cron作业中运行,基于Python gdata library(当前为v2.0.18).

从本月初开始,由于Google deprecating the ClientLogin protocol,该功能不再起作用.产生的错误如下所示:

{'status': 401, 'body': '<?xml version="1.0" encoding="UTF-8"?>\n<errors xmlns="http://schemas.google.com/g/2005">\n <error>\n  <domain>GData</domain>\n  <code>required</code>\n  <location type="header">Authorization</location>\n  <internalReason>Login Required</internalReason>\n </error>\n</errors>\n', 'reason': 'Unauthorized'}

我知道这即将到来,并在其他地方(例如AppEngine应用程序)进行处理,但是忘记了我必须转换此脚本.现在我在这里,我发现我不知道该如何进行这项工作.

我找到的所有参考,例如Google Apps Developer博客上的here或StackOverflow上的herehere,都建议解决方案是使用OAuth2Token.但是,这需要Google API控制台提供的客户端ID和客户端密码(与应用程序绑定).我没有申请.我只想从我的脚本进行身份验证.

有人可以建议在独立脚本中执行此操作的正确方法吗?还是我不走运,没有其他机制可以完成此任务?

这是现有联系人代码的勇气:

from gdata.contacts.service import ContactsService, ContactsQuery

user = "myuser@gmail.com"
password = "mypassword"

addresses = set()
client = ContactsService(additional_headers={"GData-Version":"2"})
client.ssl = True
client.ClientLogin(user, password)
groups = client.GetGroupsFeed()
for group in groups.entry:
   if group.content.text == "System Group: My Contacts":
      query = ContactsQuery()
      query.max_results = 9999   # large enough that we'll get "everything"
      query.group = group.id.text
      contacts = client.GetContactsFeed(query.ToUri())
      for contact in contacts.entry:
         for email in contact.email:
            addresses.add(email.address.lower())
      break
return addresses

理想情况下,我正在寻找将client.ClientLogin()替换为使用gdata保留其余代码的其他机制.或者,如果使用gdata不能真正做到这一点,我愿意转换为其他提供类似功能的库.

解决方法:

Can someone please suggest the proper way to do this in a standalone script? Or am I out of luck and there’s no mechanism to accomplish this any more?

没有任何一种机制与您正在使用的机制一样.您将必须设置Cloud Developer project并使用OAuth2,然后重写脚本.

为了使它尽可能地面向未来,您可以切换到最新的Contacts API.使用此API,您可以使用OAuth2 Device flow,这对于您的用例而言可能更简单.

我知道,这不是您希望听到的答案,但我认为这是唯一的答案.

标签:gdata,google-oauth,google-contacts,python
来源: https://codeday.me/bug/20191028/1951021.html

本站声明: 1. iCode9 技术分享网(下文简称本站)提供的所有内容,仅供技术学习、探讨和分享;
2. 关于本站的所有留言、评论、转载及引用,纯属内容发起人的个人观点,与本站观点和立场无关;
3. 关于本站的所有言论和文字,纯属内容发起人的个人观点,与本站观点和立场无关;
4. 本站文章均是网友提供,不完全保证技术分享内容的完整性、准确性、时效性、风险性和版权归属;如您发现该文章侵犯了您的权益,可联系我们第一时间进行删除;
5. 本站为非盈利性的个人网站,所有内容不会用来进行牟利,也不会利用任何形式的广告来间接获益,纯粹是为了广大技术爱好者提供技术内容和技术思想的分享性交流网站。

专注分享技术,共同学习,共同进步。侵权联系[81616952@qq.com]

Copyright (C)ICode9.com, All Rights Reserved.

ICode9版权所有