最近、Web アプリにhttp://code.google.com/p/google-api-php-client/ ( Google OAuth2 ) を使い始めました。ただし、ユーザーのタイムゾーンを読み取れないため、空白を描画します。Google アカウント ページで何とか入力しようとしましたが、そのようなフィールドは見つかりませんでした。Google が本当にそのような情報を提供しているかどうかを誰かが知っていますか。
2 に答える
最も近いのは、Google カレンダーで利用できるタイムゾーンです。カレンダー設定ページの [全般] タブを確認してください: https://www.google.com/calendar
これで、ユーザーをサービスに対して認証している間に、ユーザーのカレンダーへのアクセスを要求できるようになりました。スコープ「https://www.googleapis.com/auth/calendar」を使用します ( docs )
認証されると、関心のあるカレンダーをリクエストできます。ユーザーのプライマリ カレンダーが最善の策だと思います。
最後に、各カレンダーにはtimeZone プロパティを使用した設定があります。
2013 年 3 月 21 日の時点で、Google は userinfo.profile エンドポイントへの応答でこの情報を提供していません。
このドキュメントでは、タイムゾーンが利用可能であると主張しています: https://developers.google.com/accounts/docs/OAuth2Login?hl=en#userinfocall
ただし、現在の実装では次のデータのみが返されます。
- ID
- Eメール
- 確認済み_メール
- 名前
- 名
- 苗字
- リンク(利用可能な場合は G+ プロフィールへ)
- 性別
- 誕生日
- ロケール
- hd (該当する場合、Google Apps ドメインのように見えます)
「birthday」と「hd」は、上記のページの現在のドキュメントには記載されていないことに注意してください。エンドポイントから受け取った実際の応答からこれらのフィールドを確認しています。
現時点でタイムゾーンを取得するための最良の方法は、おそらく JavaScript を使用することです (ユーザーのブラウザーからタイムゾーンを取得するため)。この StackOverflow の回答では、その方法について説明しています。
JavaScript でクライアントのタイムゾーンを取得する
残念ながら、これは二次的なアクションとして発生する必要があります。つまり、エンドポイントから取得したデータとは別に、このデータをデータベースに追加する必要があります。考慮すべき 1 つのトリックは、エンドポイント リクエストを開始するページでタイムゾーン オフセットをキャプチャし、OAuth リクエストの「状態」値にタイムゾーン オフセット値を追加することです。この値はコールバックで返され、データベースへの書き込みと同じ手順で返された他のプロファイル情報を抽出して追加できます。