编程语言
首页 > 编程语言> > 在独立的Python脚本中向Google进行身份验证的正确机制是什么?

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

作者:互联网

我有一些代码可用于将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