Google Admin SDK でユーザーを登録する(python)


はじめに

GSuite(GoogleApps)を利用してユーザー管理をしていて、大量のデータ投入をする必要がありました。データの読み出しなどの記事はチュートリアルでよく見たのですが、登録に関してあまり記事が無かったので、何かのお役に立てればと記事を書きます。

コードを書く前に必要なこと

プロジェクトの登録

デベロッパーコンソールからプロジェクト適当な名前で作成します。

ダッシュボードに戻って、作成したプロジェクトを選択し、APIを追加します。

「Admin SDK」を有効にして、認証キーを作成してください。
- OAuthで認証情報を作成
- アプリケーションの種類:「その他」で名前は適当に入れる

認証キーが作成され、一覧に表示されるので、ダウンロードして適当な場所に保存します。
(コード例では:[自分のホームディレクトリ]/.test_secrets/ 配下に「client_secret_test.jso.json」として保存します)

だいたいこれで動かす準備ができました。

実際のコード

create.rb
# -*- coding: utf-8 -*-

import os
import httplib2
from apiclient import discovery
from oauth2client import client
from oauth2client import tools
from oauth2client.file import Storage

def main():
    try:
        import argparse
        parser = argparse.ArgumentParser(parents=[tools.argparser])
        flags = parser.parse_args()
    except ImportError:
        flags = None

    # 認証情報を格納するディレクトリ「.credentials」の設定。ディレクトリが無い場合は作成
    credential_dir = os.path.join(os.path.expanduser('~'), '.test_credentials')
    if not os.path.exists(credential_dir):
        os.makedirs(credential_dir)

    # 認証ファイルのパスを設定と読み込み
    credential_path = os.path.join(credential_dir, 'admin-directory_v1_test.json')
    store = Storage(credential_path)
    credentials = store.get()

    # 認証ファイルが無い場合は作成
    if not credentials or credentials.invalid:

        # 使用する機能の範囲を設定
        scopes = [
            'https://www.googleapis.com/auth/admin.directory.user',
        ]

        # 認証キーの設定
        secret_dir = os.path.join(os.path.expanduser('~'), '.test_secrets')
        if not os.path.exists(secret_dir):
            os.makedirs(secret_dir)

        # 認証キーから認証処理を行うクラスのインスタンスを生成
        flow = client.flow_from_clientsecrets(
            os.path.join(secret_dir, 'client_secret_test.json'), scopes)

        # アプリケーションの名前
        flow.user_agent = 'User register Test Tool'

        if flags:
                credentials = tools.run_flow(flow, store, flags)
        else: # Python 2.6 互換用処理
            credentials = tools.run(flow, store)
        print('証明書を保存しました: ' + credential_path)

    # 認証を行う
    http = credentials.authorize(httplib2.Http())
    app_admin_service = discovery.build('admin', 'directory_v1', http=http)

    # 作成するユーザー情報を作成
    register_data = {
        'primaryEmail':'[email protected]',
        'name':{
            'givenName':'太郎',
            'familyName':'山田',
        },
        'suspended':False, # アカウント停止の状態にしない
        'password':'p-a-s-s-w-o-r-d',
    }

    # 登録実行
    results = app_admin_service.users().insert(body=register_data).execute()

    if(int(results['id']) > 0):
        print("googleアカウントを作成完了!")
    else:
        print("googleアカウントを作成に失敗しました")


if __name__ == '__main__':
    main()

プログラムを実行するとブラウザが立ち上がり、アクセス許可を求められますので、OKをクリックして実行します。

参考

G Suite Admin SDK Directory API