最近我开始使用 http://code.google.com/p/google-api-php-client/(Google OAuth2)作为我的网络应用程序。但是我画了一个空白,因为我无法读取用户的时区。我尝试在我的Google帐户页面上以某种方式输入它,但没有找到任何此类字段。有谁知道谷歌是否真的提供此类信息,如果是,我如何将其设置为我的帐户?
您最接近的是Google日历上可用的时区。检查日历设置页面上的"常规"标签:https://www.google.com/calendar
现在,您可以在向服务进行身份验证时请求访问用户的日历。使用范围"https://www.googleapis.com/auth/calendar"(文档)
通过身份验证后,您可以请求感兴趣的日历。我想用户的主日历是您最好的选择。
最后,每个日历都有时区属性的设置。
下面是 Google API PHP 客户端的示例代码。
截至 2013 年 3 月 21 日,Google 在对 userinfo.profile 端点的回复中没有提供此信息 - 即使他们声称他们这样做了。
本文档声称时区可用:https://developers.google.com/accounts/docs/OAuth2Login?hl=en#userinfocall
但是,当前实现仅返回以下数据:
- 编号
- 电子邮件
- verified_email
- 名字
- given_name
- family_name
- 链接(到 G+ 配置文件,如果可用)
- 性
- 生日
- 现场
- hd(似乎是Google Apps域,如果相关)
请注意,"生日"和"hd"未在上面列出的页面上的当前文档中列出。我正在从从端点收到的实际响应中验证这些字段。
目前获取时区的最佳方法可能是使用 JavaScript(从用户的浏览器中检索时区)。这个 StackOverflow 答案解释了如何做到这一点:
在 JavaScript 中获取客户端的时区
遗憾的是,这必须作为辅助操作发生,这意味着您必须将此数据与从端点检索的数据分开添加到数据库中。要考虑的一个技巧是在启动终结点请求的页面上捕获时区偏移量,然后将时区偏移量值附加到 OAuth 请求中的"状态"值。然后,将在回调时返回此值,您可以提取它并将其添加到在写入数据库的同一过程中返回的其他配置文件信息中。