【问题标题】:Unable to update contact's profile picture using Google's People API无法使用 Google 的 People API 更新联系人的个人资料图片
【发布时间】:2021-04-15 17:09:18
【问题描述】:

所以,我写了这段代码:

json_data = "{\"photoBytes\":" + str(bytearray(open("image.png", "rb").read())) + "}"
service.people().updateContactPhoto('people/c4942919248052589775', json_data)

但它给了我这个错误: TypeError: method() takes 1 positional argument but 3 were given

我不明白为什么。正如docs 所说,我应该这样使用它...

【问题讨论】:

  • 你能解决这个问题吗?
  • 我放弃了我的项目,但我会将这个帖子留给需要帮助的人。

标签: python google-people-api


【解决方案1】:

您将字符串值作为请求正文传递,该请求正文应为 json 格式。

先尝试在您的 json_date 上使用 json.dumps(),然后再将其作为参数传递给 updateContactPhoto()。

您的代码应如下所示:

json_data = "{\"photoBytes\":" + str(bytearray(open("image.png", "rb").read())) + "}"
service.people().updateContactPhoto('people/c4942919248052589775', json.dumps(json_data))

【讨论】:

  • 我明天会试试这个,我会告诉你它是否有效。非常感谢!
  • 不幸的是,我仍然遇到同样的错误。无论如何感谢您的帮助。
【解决方案2】:

我通过大量的试验和错误来解决这个问题,我发现照片需要进行 base64 编码,并且最好的方法是将其转换为下面的 JSON (thanks to this answer for this tip)。

下面是我的工作代码

import base64

JSON = """{
    "photoBytes": "%s"
}
""" % (base64.b64encode(open("test.png", "rb").read()).decode('utf-8'))

update_body = json.loads(JSON)

service.people().updateContactPhoto(resourceName="people/123456789", body=update_body).execute()

【讨论】:

  • 我会试试这个,看看它是否有效,因为我已经放弃了这个项目。非常感谢您为找到这个答案所做的努力。即使它不起作用(但我认为它会),它也受到高度赞赏。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2020-12-07
  • 1970-01-01
  • 2021-12-15
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多