Loading [MathJax]/jax/output/CommonHTML/config.js
首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
社区首页 >问答首页 >通过服务帐户获取任何google目录用户的姓名和电子邮件

通过服务帐户获取任何google目录用户的姓名和电子邮件
EN

Stack Overflow用户
提问于 2021-01-21 09:51:05
回答 1查看 360关注 0票数 0

我有一个聊天机器人,连接到Google和一个google服务帐户。机器人接收包含消息发件人的Google (即1234567890987654321)的事件。我想使用服务帐户查找邮件发件人的姓名和电子邮件地址。

我相信https://www.googleapis.com/auth/directory.readonly 范围应该允许这样做为服务帐户设置了域范围的委托.但是响应不包括所请求的字段,只填充Etag和ResourceName。

我可以更改或配置什么,以便在带有服务帐户的People.Get调用中包含任意目录用户的名称和电子邮件?

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
package main

import (
        "context"
        "log"

        "google.golang.org/api/option"
        "google.golang.org/api/people/v1"
)

func main() {
        // Service account's credentials
        apiKeyFile := "credentials.json"
        // Google ID of a person within your directory
        resourceName := "people/1234567890987654321"
        fields := "names,emailAddresses"

        ctx := context.Background()
        // directory.readonly scope is included by default
        s, _ := people.NewService(ctx, option.WithCredentialsFile(apiKeyFile))
        pCall := s.People.Get(resourceName)
        pCall.PersonFields(fields)
        person, _ := pCall.Do()
        log.Print(person.Etag)
        for _, address := range person.EmailAddresses {
                log.Print(address.Value)
        }
        for _, name := range person.Names {
                log.Print(name.DisplayName)
        }
}

围棋游乐场

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2021-08-17 14:15:48

事实证明,Google正在返回json回复中的电子邮件地址,它只是从chat.DeprecatedEvent中丢失了。我创建了新的结构来捕获其他数据,完全避免person API。

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
package lib

// This package creates a customized chat.DeprecatedEvent from v0.37.0 of the google chat api
import chat "google.golang.org/api/chat/v1"

// ChatEvent Google Chat event with customized User object
// Both ChatEvent.User and ChatEvent.Message.Sender should have the same fields,
// but only ChatEvent.User is modified to use ChatUser for simplicity
type ChatEvent struct {
    // Action: The form action data associated with an interactive card that
    // was clicked. Only populated for CARD_CLICKED events. See the
    // Interactive Cards guide (/hangouts/chat/how-tos/cards-onclick) for
    // more information.
    Action *chat.FormAction `json:"action,omitempty"`

    // ConfigCompleteRedirectUrl: The URL the bot should redirect the user
    // to after they have completed an authorization or configuration flow
    // outside of Google Chat. See the Authorizing access to 3p services
    // guide (/hangouts/chat/how-tos/auth-3p) for more information.
    ConfigCompleteRedirectURL string `json:"configCompleteRedirectUrl,omitempty"`

    // EventTime: The timestamp indicating when the event was dispatched.
    EventTime string `json:"eventTime,omitempty"`

    // Message: The message that triggered the event, if applicable.
    Message *chat.Message `json:"message,omitempty"`

    // Space: The room or DM in which the event occurred.
    Space *chat.Space `json:"space,omitempty"`

    // ThreadKey: The bot-defined key for the thread related to the event.
    // See the thread_key field of the `spaces.message.create` request for
    // more information.
    ThreadKey string `json:"threadKey,omitempty"`

    // Token: A secret value that bots can use to verify if a request is
    // from Google. The token is randomly generated by Google, remains
    // static, and can be obtained from the Google Chat API configuration
    // page in the Cloud Console. Developers can revoke/regenerate it if
    // needed from the same page.
    Token string `json:"token,omitempty"`

    // Type: The type of the event.
    //
    // Possible values:
    //   "UNSPECIFIED" - Default value for the enum. DO NOT USE.
    //   "MESSAGE" - A message was sent in a room or direct message.
    //   "ADDED_TO_SPACE" - The bot was added to a room or DM.
    //   "REMOVED_FROM_SPACE" - The bot was removed from a room or DM.
    //   "CARD_CLICKED" - The bot's interactive card was clicked.
    Type string `json:"type,omitempty"`

    // User: The customized hangouts chat user that triggered the event.
    User *ChatUser `json:"user,omitempty"`
}

// ChatUser A custom hangouts chat user that contains the fields currently sent from google as of 26-Jan-2021
type ChatUser struct {
    // Name: Google's name for the user, such as users/1234567890987654321
    Name string `json:"name"`
    // DisplayName: The first and last name of the user, such as John Doe
    DisplayName string `json:"displayName"`
    // AvatarURL: full URL to an avatar image
    AvatarURL string `json:"avatarUrl"`
    // Email: standard email address
    Email string `json:"email"`
    // Type: see chat.User.Type, typically this will be HUMAN
    Type string `json:"type"`
    // DomainID: see chat.User.DomainId
    DomainID string `json:"domainId"`
}
票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/65833048

复制
相关文章
JavaScript 解析 XML 时如何通过名称直接取到值?
同级的Attribute,有没有办法通过类似于 getXXXByName("aa") 得到0, getXXXByName("bb") 得到1呢?
阿敏总司令
2019/02/28
6940
pl sql 查看历史执行过的sql记录
现在越来越多人用plsql 查询和执行sql,因为该工具很方便,不仅可以执行sql、以及命令窗口,但是呢,有时候我们执行完sql,可能忘记保存或者当时觉得可能不怎么重要,就没有保存,
小小鱼儿小小林
2020/06/24
3.6K0
pl sql 查看历史执行过的sql记录
Oracle插入数据时出现 ORA-00001: unique constraint
背景: 后台服务测试过程中,发现往Oracle数据库表中插数据出现一个错误 unique constraint,如下: ### Error updating database.  Cause: Java.sql.SQLIntegrityConstraintViolationException: ORA-00001: unique constraint (TEST53.SYS_C0032604) violated ### The error may exist in class path resource [
星哥玩云
2022/08/18
2.2K0
分析Oracle数据库日志文件(1)
分析Oracle数据库日志文件(1) 一、如何分析即LogMiner解释 从目前来看,分析Oracle日志的唯一方法就是使用Oracle公司提供的LogMiner来进行, Oracle数据库的所有更改都记录在日志中,但是原始的日志信息我们根本无法看懂,而LogMiner就是让我们看懂日志信息的工具。从这一点上看,它和tkprof差不多,一个是用来分析日志信息,一个则是格式化跟踪文件。通过对日志的分析我们可以实现下面的目的: 1、查明数据库的逻辑更改; 2、侦察并更正用户的误操作; 3、执行事后审计;
阿新
2018/04/12
3.1K0
Oracle使用总结之异常篇
1.1 异常处理概念 1.1.1 预定义的异常处理 1.1.2 非预定义的异常处理 1.1.3 用户自定义的异常处理 1.1.4 用户定义的异常处理 1.2 异常错误传播 1.2.1 在执行部分引发异常错误 1.2.2 在声明部分引发异常错误 1.3 异常错误处理编程 1.4 在 PL/SQL 中使用 SQLCODE, SQLERRM异常处理函数 即使是写得最好的PL/SQL程序也会遇到错误或未预料到的事件。一个优秀的程序都应该能够正确处理各种出错情况,并尽可能从错误中恢复。任何ORACLE错误(报告为
用户1257215
2018/01/30
2K0
PL/SQL 游标变量
    游标变量与游标相似,有其共性,也有其不同点。就其共性来说两者都是指向多行查询的结果集中的当前行。都要经历声明,打开,检索与关闭的过程。所不同的是游标与游标变量类似于常量与变量。游标是静态的,而游标变量是动态的,因为游标变量并不与某个特定的查询相绑定。所以,游标变量可以打开任何类型兼容的查询。其次可以将游标变量作为参数传递给本地和存储子程序。本文主要描述游标变量的使用。
Leshami
2018/08/14
1.3K0
day44_Oracle学习笔记_03
先去Oracle官网去下载最新版本的sqldeveloper,下载地址:https://www.oracle.com/technetwork/developer-tools/sql-developer/downloads/index.html 得到2个zip压缩包,如下图所示:
黑泽君
2018/10/11
1.8K0
day44_Oracle学习笔记_03
oracle补充
索引是若干数据行的关键字的列表,查询数据时,通过索引中的关键字可以快速定位到要访问的记录所在的数据块,从而大大减少读取数据的I/O次数,因此可以显著的提高性能
HUC思梦
2020/09/03
3.1K0
oracle补充
ORA-1555经典的错误
应用的夜维从夜里00:00开始执行,但因为hang的原因(暂时猜测为夜维处理的某条数据和当前应用正常处理的某条数据相同,出现前后等待同一资源锁的现象),直到第二天白天09:25左右才继续执行,但此时应用日志记录:
bisal
2019/01/29
9470
linq to sql取出随机记录/多表查询/将查询出的结果生成xml
在手写sql的年代,如果想从sqlserver数据库随机取几条数据,可以利用order by NewId()轻松实现,要实现多表查询也可以用select * from A,B Where A.ID=B.ID做到,但这些功能到了linq to sql中如何实现呢? 关键点: 1.随机排序问题:可以用 Select(d=> new {NewId=new Guid()}).OrderBy(d=>d.NewId)达到order by NewId()的效果 2.多表查询 from a in TableA
菩提树下的杨过
2018/01/22
3.2K0
Ora2pg 把oracle数据导入到postgres
1 Ora2pg特性 1、导出整个数据库模式(表、视图、序列、索引),以及唯一性,主键、外键和检查约束。 2、导出用户和组的授权/权限。 3、导出筛选的表(通过制定表明)。 4、导出Oracle模式到一个PostgreSQL(7.3以后)模式中。 5、导出预定义函数、触发器、程序、包和包体。 6、导出范围和列表分区。 7、导出所有的数据或跟随一个WHERE子句。 8、充分支持Oracle BLOB对象作为PG的BYTEA。 9、导出Oracle视图作为PG表。 10、导出定义的Oracle用户格式。 11
小徐
2019/11/28
3.8K0
【DB笔试面试445】Oracle中的异常可以分为哪几类?
异常(EXCEPTION)处理是用来处理正常执行过程中未预料到的事件,包括程序块的异常处理、预定义的错误和自定义错误。如果PL/SQL程序块一旦产生异常,而程序并没有指出如何处理,那么程序就会自动终止运行。
AiDBA宝典
2019/09/30
1.8K0
Ora2pg 把oracle数据导入到postgres
Ora2pg 使用总结 Ora2pg 使用总结 1 1 Ora2pg特性 1 2 Ora2pg支持的导出对象 2 3 Ora2pg数据类型转换对照 2 4 Ora2pg 安装 3 4.1 安装需要的驱动包 3 4.2 下载并安装Oracle 客户端 3 4.3 安装 DBI 4 4.4 安装 DBD-Oracle客户端 4 4.4.1 在当前用户配置一下环境变量 4 4.4.2 安装DBD-Oracle 4 4.5 安装 Ora2pg 客户端 4 4.6 ora2pg 参数说明 5 5 Ora2pg 使用案
小徐
2019/11/20
4.1K0
Ora2pg 把oracle数据导入到postgres
PL-SQL温习
1.SELECT PRODUCT_NAME, PRODUCT_PRICE*0.8 FROM PRODUCT
liulun
2022/05/09
5440
疑难解答:ORA-01555的场景模拟和解决方案
黄玮(Fuyuncat) 资深Oracle DBA,个人网站www.HelloDBA.com,致力于数据库底层技术的研究,其作品获得广大同行的高度评价. 前期分享了ORA-01555错误的原理及相关基础概念。 参考(高频错误:ORA-01555深入剖析) 今天我们来分析ORA-01555发生的场景和各种解决方案 1555发生的场景 测试环境 首先建立测试环境。由于我们只是要模拟1555错误的发生,所以需要建立一个小的回滚表空间,并且设置undo_retention时间为1(秒),以便回滚数据尽快被覆
数据和云
2018/03/06
1.3K0
疑难解答:ORA-01555的场景模拟和解决方案
「我读」PL 观点 | 未定义行为有利的一面
Rust 官方团队 Ralf Jung 在 PL 观点 (PL Perspectives) 博客[1] 上发表了一篇文章 《Undefined Behavior deserves a better reputation》[2] ,文中对UB(未定义行为)有利的一面进行了详细的阐述。通过这篇文章,我们可以对UB 有更深入的理解。
张汉东
2021/11/25
1.7K0
事务前沿研究 | 隔离级别的追溯与究明,带你读懂 TiDB 的隔离级别(下篇)
在上篇,我们分析了 ANSI SQL-92 和「A Critique of ANSI SQL Isolation Levels」对隔离级别做出的定义,并且指出了在现今的认知中,其中的一些缺陷。本篇将继续讨论隔离级别的问题,讲述实现无关的隔离级别定义和 TiDB 的表现和隔离级别。
PingCAP
2021/03/22
6640
python3读XML数据
from xml.etree.ElementTree import parse f = open(r"C:\PlatformConfigure\Configure\VideoStreamingServerConfigure.xml") et = parse(f) root = et.getroot() # 获取根节点 print(root) # 第一种遍历根节点的子元素(该方法要取消了,不推荐使用) childs = root.getchildren() for child in childs:
py3study
2020/01/09
8680
PL/SQL --> 异常处理(Exception)
Exception是一种PL/SQL标识符,当运行的PL/SQL块出现错误或警告,则会触发异常处理。为了提高程序的健壮性,可以在PL/SQL块中引
Leshami
2018/08/07
1.6K0
PL/SQL --> 游标
映射在结果集中某一行数据的具体位置,类似于C语言中的指针。即通过游标方式定位到结果集中某个特定的行,然后根据业务需求
Leshami
2018/08/07
1K0

相似问题

PL/SQL: ORA-00913:太多值

12

SQL错误: ORA- 00913 :值00913太多。00000 -“值太多”

11

ORA-00913“值太多”Oracle SQL

25

SQL错误: ORA-00913:值太多

51

Oracle触发器错误PL/SQL: ORA-00913:值太多

20
添加站长 进交流群

领取专属 10元无门槛券

AI混元助手 在线答疑

扫码加入开发者社群
关注 腾讯云开发者公众号

洞察 腾讯核心技术

剖析业界实践案例

扫码关注腾讯云开发者公众号
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档
查看详情【社区公告】 技术创作特训营有奖征文