私が所有する Google ドライブの階層フォルダとサブフォルダ構造があり、それを Google Apps for Business ドメインのすべてのユーザーの [マイ ドライブ] セクションに自動的に追加したいと考えています。
これどうやってするの?Google Apps Script と AddToFolder 関数について聞きました。助けてくれますか?
前もって感謝します。
私が所有する Google ドライブの階層フォルダとサブフォルダ構造があり、それを Google Apps for Business ドメインのすべてのユーザーの [マイ ドライブ] セクションに自動的に追加したいと考えています。
これどうやってするの?Google Apps Script と AddToFolder 関数について聞きました。助けてくれますか?
前もって感謝します。
まず、簡単なWeb アプリをセットアップします。Google App Script エディターには、ほとんどの場合に役立つテンプレートもあります。
次に、次のようなものを実装し、ハンドラー関数から呼び出します。
function addRequiredFolders() {
var root = DocsList.getRootFolder();
var folderIds = ["somefolderid", "anotherfolderid"];
folderIds.map( function(id) { DocsList.getFolderById(id).addToFolder(root) } );
}
この時点まで、これの変種をテストしました。次のステップは、ドメインの Web アプリを公開し、それをメールで送信するか、配布することです。ドキュメントにアクセスするためのアクセス許可を Web アプリに付与する必要があるという不快な手順が必要になると思います。
現在、「Google Documents List API」を使用してこの機能を実装しています。この API が非推奨であることはわかっていますが、今のところ機能します。
(コードは完成していません)
(...)
//var user = Session.getActiveUser().getUserLoginId() OR
var user = e.parameter.user_email
var TB_folder = e.parameter.TB_folder
var TB_sub_folder = e.parameter.TB_sub_folder
var base = 'https://docs.google.com/feeds/';
var fetchArgs = googleOAuth_('docs', base);
fetchArgs.method = 'POST';
var rawXml = "<?xml version='1.0' encoding='UTF-8'?>" + "<entry xmlns='http://www.w3.org/2005/Atom'>"
+ "<category scheme='http://schemas.google.com/g/2005#kind' "
+ "term='http://schemas.google.com/docs/2007#folder'/>"
+ "<title>" + TB_folder +"</title>"
+ "</entry>";
fetchArgs.payload = rawXml;
fetchArgs.contentType = 'application/atom+xml';
fetchArgs.contentLength = 245;
// POST a https://docs.google.com/feeds/default/private/full
var url = base + user + '/private/full/?v=3&alt=json';
var content = UrlFetchApp.fetch(url, fetchArgs).getContentText()
var json = Utilities.jsonParse(content)
var folder = json.entry.gd$resourceId.$t // -> I get "folder:folder_id"
var id_folder = folder.split(':')[1]
var folder_created_by = json.entry.gd$lastModifiedBy.email.$t
var folder_owner = json.entry.author['0'].email.$t
(...)
これで、フォルダー ID を取得し、それを使用して別のサブフォルダーまたはファイルを作成できます...
この機能が必要です:
//Google oAuth
function googleOAuth_(name,scope) {
var oAuthConfig = UrlFetchApp.addOAuthService(name);
oAuthConfig.setRequestTokenUrl("https://www.google.com/accounts/OAuthGetRequestToken?scope="+scope);
oAuthConfig.setAuthorizationUrl("https://www.google.com/accounts/OAuthAuthorizeToken");
oAuthConfig.setAccessTokenUrl("https://www.google.com/accounts/OAuthGetAccessToken");
oAuthConfig.setConsumerKey("XXXXXXXX");
oAuthConfig.setConsumerSecret("XXXXXXXXXXXXXXXXXXX");
//oAuthConfig.setConsumerKey("anonymous");
//oAuthConfig.setConsumerSecret("anonymous");
return {oAuthServiceName:name, oAuthUseToken:"always"};
}
ファイルを作成するか、ファイルにユーザーを追加できます (ライターの追加)。
この機能を「Drive API」で実装したいと思います。誰かがやったことがあるなら、助けを得るのがいいでしょう。
セルジ
これは、各ユーザーがリンクにアクセスし、(作成した) スクリプトを承認して、ユーザーに代わってジョブを実行する (ルート フォルダーに共有フォルダーを配置する) だけでよい場合、非常に簡単に実行できます。
しかし、それが多くのユーザーであり、あなたがドメインの管理者であり、誰も何もせずにすべてを自動的に実行したい場合、それは可能ですが、おそらく非常に困難です. つまり、 Drive APIに直接アクセスし、oAuth 2.0 を設定してユーザーを偽装する必要があります。これは、Apps Script 組み込みの DocsList API にはこの偽装機能がないためです。あなたが本当にそれを望んでいるなら、この他の質問を見てください。