SQLの窓

2023年02月06日


GAS でユーザ作成 : 組織は "orgUnitPath": "/組織名A/組織名B"

Google の Admin console でテスト後、GAS での再現を確認
https://developers.google.com/admin-sdk/directory/reference/rest/v1/users/insert
上記リンクは管理コンソールで、右サイドで実際に自分のアカウントで API をリアルタイムに実行します。単なる登録系で量が少ない時は、これでひたすら実行したりします。

テスト後、 GAS で AdminDirectory 追加してコードの実行。最初、組織の設定解らなかったのでしなかったら、ルートに作成されたので調べて【"orgUnitPath": "/組織名A/組織名B"】である事を確認
function myFunction() {

  AdminDirectory.Users.insert({
    "name": {
      "familyName": "familyName",
      "givenName": "givenName"
    },
    "password": "パスワード",
    "primaryEmail": "user.insert@ドメイン",
    "changePasswordAtNextLogin": false,
    "recoveryEmail": "recovery@ドメイン",
    "orgUnitPath": "/組織名A/組織名B"
  });  
  
}

サンプルは Admin SDK Directory サービスですが、したい事が無かったりするので引数の渡し方はここから想像してテストするしか無いですね




posted by lightbox at 2023-02-06 16:12 | GAS | このブログの読者になる | 更新情報をチェックする

2021年08月07日


GAS : 自分の共有ドライブ一覧とマイドライブのルートフォルダ一覧

スプレッドシートに出力します

Logger.log がとても使いやすくなりましたが、あくまでデバッグ目的になるのでスプレッドシートに結果を残します。実行前に出力する列単位のクリアを行っていますが、マクロで取得したコードです。

Drive API サービスの設定

GAS からは、V2 の利用となるので注意が必要です。V3 ではパラメータが違います

マイドライブのルートフォルダのソート

そのままではソートされないので、一旦配列へセットしてソートしてから出力しています
function listDrive() {

    // **************************************************
    // 選択したシートを対象とします
    // **************************************************
    var spreadsheet = SpreadsheetApp.getActive();

    // **************************************************
    // 列クリア
    // **************************************************
    spreadsheet.getRange('A:E').activate();
    spreadsheet.getActiveRangeList().clear({contentsOnly: true, commentsOnly: true, skipFilteredRows: true});

    // **************************************************
    // ドライブ一覧 (100件まで:それ以上は nextPageToken を使う)
    // Drive API v2
    // **************************************************
    var response = Drive.Drives.list({"maxResults":100});
    var drives = response.items;
    var targetRange;
    for (i = 0; i < drives.length; i++) {

        Logger.log('%s (%s)', drives[i].name, drives[i].id);
        targetRange = spreadsheet.getRange('A' + (i+1));
        targetRange.setValue(drives[i].name);
        targetRange = spreadsheet.getRange('B' + (i+1));
        targetRange.setValue(drives[i].id);

    }

    // **************************************************
    // マイドライブルート内のフォルダの一覧 (Drive API は必要ない)
    // **************************************************
    var folders = DriveApp.getRootFolder().getFolders();
    var a = new Array();

    while (folders.hasNext()) {
        var folder = folders.next(); 
        Logger.log(folder.getName());
        a.push(folder.getName());
    }

    a.sort()
    for (i = 0; i < a.length; i++) {
        targetRange = spreadsheet.getRange('E' + (i+1));
        targetRange.setValue(a[i]);
    }

}


GitHub


posted by lightbox at 2021-08-07 15:38 | GAS | このブログの読者になる | 更新情報をチェックする

2021年03月15日


Google Apps Script(GAS) で、Google Classroom に投稿する



ドキュメントでは、REST API なので、UrlFetchApp クラスを使うのか? とか思ってしまいますが、そもそも それだと auth が必要なのでまだ試してしません。

で、そんな事をしなくてもそれぞれの REST の クラスのメソッドに引数を渡す形で実行できます。
但し、Classroom Service が拡張なので、スクリプトエディタのサービスの追加より API を実行可能にしておく必要があります。



以下のサンプルでは、Classroom の一覧取得後に目的の id を確認して固定で投稿しています。
function myFunction() {

	// **************************************************
	// Classroom 一覧	
	// **************************************************
	var response = Classroom.Courses.list();
	var courses = response.courses;
	for (i = 0; i < courses.length; i++) {
		Logger.log('%s (%s)', courses[i].name, courses[i].id);
	}

	// **************************************************
	// POST する JSON	
	// **************************************************
	var target = "35126354603";

	var data = {
		"courseId" : target, 
		"materials": [
			{
				"link": {
					"url": "https://news.google.com/?hl=ja&tab=rn1&gl=JP&ceid=JP:ja",
					"title": "Google ニュース",
					"thumbnailUrl": ""
				}
			}
		],
		"text": "Google Apps Script による Classroom への投稿",
		"assigneeMode": "ALL_STUDENTS",
		"state": "PUBLISHED"
	};

	Classroom.Courses.Announcements.create(data, target);  

}

Logger.log の代わりに Gmail で自分のアドレスに送信したほうが良い場合もあります。
// The code below will send an email with the current date and time.
var now = new Date();
GmailApp.sendEmail("mike@example.com", "current time", "The time is: " + now.toString());

関連する記事

Google Classroom のテーマ画像のサイズと既存画像をテーマ画像として使用してみた手順



courses.announcements.create リファレンス



posted by lightbox at 2021-03-15 14:04 | GAS | このブログの読者になる | 更新情報をチェックする

2020年10月13日


GAS : Google スプレッドシートのセルを使用してメール送信

セルの B1、B2、B3 に入力してメールを送信します。



GAS : sendEmail
GAS : msgBox
GAS : SpreadsheetApp クラス



シート名は メール送信となっており、getSheetByName で対象のシートオブジェクトを得ます。

実行ボタンは図形描画で追加して、右上のメニューから コード.gs 内に定義した function 名を割り当てます。一度割り当てたら、図形は右クリックでメニュー選択が可能になります。

セル内の改行は ALT+Enter です。 

// ************************************
// メール送信
// ************************************
function SendMail_1() {

  var result = Browser.msgBox('確認', 'メールを送信しますか?', Browser.Buttons.YES_NO);
  
  if ( result != "yes" ) {
    return;
  }
  
  var spreadsheet = SpreadsheetApp.getActive();
  var sheet = spreadsheet.getSheetByName("メール送信");  
  
  // 宛先
  var targetRange = sheet.getRange('B1');
  var targetTo = targetRange.getDisplayValue();
  var targetList = targetTo.split(",");

  // 件名
  targetRange = sheet.getRange('B2');
  targetSubject = targetRange.getDisplayValue();

  // 本文
  targetRange = sheet.getRange('B3');
  targetBody = targetRange.getDisplayValue();
  
  for(var i = 0; i< targetList.length; i++ ) {
  
    GmailApp.sendEmail( targetList[i].trim(), targetSubject, targetBody );
  
  }

  Browser.msgBox("処理が終了しました");

}




posted by lightbox at 2020-10-13 10:40 | GAS | このブログの読者になる | 更新情報をチェックする

2020年08月02日


GAS : スプレッドシートのメニューに関数実行用のメニューを追加する



SpreadsheetApp.getUI
スクリプトがメニュー、ダイアログ、サイドバーなどの機能を追加できるようにする、スプレッドシートのユーザーインターフェイス環境のインスタンスを返します。 スクリプトは、開いているスプレッドシートの現在のインスタンスのUIとのみ対話でき、スクリプトがスプレッドシートにバインドされている場合に限ります。
createCal は関数名です。
// ************************************
// メニューの追加
// ************************************
function onOpen(e) {
	var ui = SpreadsheetApp.getUi();
	ui.createMenu('カレンダー作成')
		 .addItem('カレンダーへ適用', 'createCal')
		 .addToUi();
	
}

// ************************************
// 
// ************************************
function createCal() {


}





posted by lightbox at 2020-08-02 20:46 | GAS | このブログの読者になる | 更新情報をチェックする

2020年07月31日


GAS : Classroom API で、コースに生徒を一括登録する

スクリプトエディタのリソースメニュー(Google の拡張サービス)より API を実行可能にしておく必要があります。



コースID を指定して、A 列に並べたユーザ文字列を元に、生徒として一括登録します

function createStudent() {

	var CourceId = "コースID";

	// 選択したシートを対象とします
	var spreadsheet = SpreadsheetApp.getActive();

	// 行番号
	var i = 1;

	while (true) {

		// 登録済のフォルダを排除する為に順に比較していく
		var targetRange = spreadsheet.getRange('A' + i);
		var cellWork = targetRange.getValue().toString();
		if (cellWork != '') {

			// 生徒作成用の JSON
			var json = {
				"userId": cellWork + "@ドメイン"
			};

			// 生徒を追加
			// ( 招待済でも確定します )
			try {
				Classroom.Courses.Students.create(json, CourceId);

			}
			catch(e) {
				GmailApp.sendEmail("メールアドレス", "Classroom 生徒登録エラー", JSON.stringify(json) + "\r\n" + e.message );

			}

			i++;

		}
		else {
			break;
		}
	}
}



関連する記事

GAS : Classroom API で、コース一覧と、コース毎のトピック一覧をスプレッドシートに出力




posted by lightbox at 2020-07-31 14:46 | GAS | このブログの読者になる | 更新情報をチェックする
Seesaa の各ページの表示について
Seesaa の 記事がたまに全く表示されない場合があります。その場合は、設定> 詳細設定> ブログ設定 で 最新の情報に更新の『実行ボタン』で記事やアーカイブが最新にビルドされます。

Seesaa のページで、アーカイブとタグページは要注意です。タグページはコンテンツが全く無い状態になりますし、アーカイブページも歯抜けページはコンテンツが存在しないのにページが表示されてしまいます。

また、カテゴリページもそういう意味では完全ではありません。『カテゴリID-番号』というフォーマットで表示されるページですが、実際存在するより大きな番号でも表示されてしまいます。

※ インデックスページのみ、実際の記事数を超えたページを指定しても最後のページが表示されるようです

対処としては、このようなヘルプ的な情報を固定でページの最後に表示するようにするといいでしょう。具体的には、メインの記事コンテンツの下に『自由形式』を追加し、アーカイブとカテゴリページでのみ表示するように設定し、コンテンツを用意するといいと思います。


※ エキスパートモードで表示しています

アーカイブとカテゴリページはこのように簡単に設定できますが、タグページは HTML 設定を直接変更して、以下の『タグページでのみ表示される内容』の記述方法で設定する必要があります

<% if:page_name eq 'archive' -%>
アーカイブページでのみ表示される内容
<% /if %>

<% if:page_name eq 'category' -%>
カテゴリページでのみ表示される内容
<% /if %>

<% if:page_name eq 'tag' -%>
タグページでのみ表示される内容
<% /if %>
この記述は、以下の場所で使用します
container 終わり



フリーフォントで簡単ロゴ作成
フリーフォントでボタン素材作成
フリーフォントで吹き出し画像作成
フリーフォントではんこ画像作成
ほぼ自由に利用できるフリーフォント
フリーフォントの書体見本とサンプル
画像を大きく見る為のウインドウを開くボタンの作成

CSS ドロップシャドウの参考デモ
イラストAC
ぱくたそ
写真素材 足成
フリーフォント一覧
utf8 文字ツール
右サイド 終わり
base 終わり