Script.google.com - куда дальше двигатся?
Здравствуйте
Для рабочих нужд понадобилось написать скрипт на платформе script.google.com, который бы добавлял страницу с указанным текстом на мой site.google.com/site/ сайт Рабочий шаблон добавления страницы уже есть:
function createDemoPage() {
var domain = 'yourdomain.com';
var site = 'your_site';
var pageName = 'script_center_demo';
var html =
'<div><div style="margin-left:auto;margin-right:auto;'
+ 'display:block;font-size:18px;font-weight:bold;"><img alt="Scripts Logo"'
+ 'border="0" src="http://gascriptcenter.appspot.com/images/docs_apps_scripts-48.gif">'
+ ' Google Apps Script Center Project Page</div><div><p> </p>'
+ '<p style="font-size:14px;font-weight:bold;">Executive Summary</p>'
+ '<p>This project aims to....</p></div></div>';
var site = SitesApp.getSite(domain, site);
site.createWebPage('Script Center Demo', pageName, html);
};
Но как мне сделать следующую вещь? При переходе на адрес скрипта https://script.google.com/macros/s/.../exec выбивалась форма, или же я бы вводил нужные данные прямо в адрес как параметры https://script.google.com/macros/s/....ml=dlinyy_text И что бы все это работало. При запуске любого скрипта вне среды программирования выдает ошибку: Функцию сценария doGet не найдено В JS не секу практически вообще, к сожалению( Буду рад любой помощи! По возможности отблагодарю шоколадкой на WMZ |
В функции doGet добавляешь нужные компоненты, как-то так:
function doGet() {
var app = UiApp.createApplication();
app.add(app.createHTML("Page title:<br>"));
var textBox = app.createTextBox().setId('pageTitle').setName('pageTitle');
app.add(textBox);
app.add(app.createHTML("<br>HTML:<br>"));
var textArea = app.createTextArea().setId('htmlText').setName('htmlText');
app.add(textArea);
app.add(app.createHTML("<br>"));
var button = app.createButton('Create page');
app.add(button);
var label = app.createLabel('The button was clicked.')
.setId('statusLabel')
.setVisible(false);
app.add(label);
var handler = app.createServerHandler('myClickHandler');
handler.addCallbackElement(label);
handler.addCallbackElement(textBox);
handler.addCallbackElement(textArea);
button.addClickHandler(handler);
return app;
}
В функции обработчике клика считываешь данные с полей:
function myClickHandler(e) {
var app = UiApp.getActiveApplication();
var pageTitle = e.parameter.pageTitle;
var html = e.parameter.htmlText;
createDemoPage(pageTitle, html);
var label = app.getElementById('statusLabel');
label.setText('new page created');
label.setVisible(true);
app.close();
return app;
}
Ну и переписываешь функцию создания страницы, чтобы она принимала нужные параметры:
function createDemoPage(pageTitle, html) {
var site = SitesApp.getSiteByUrl("https://sites.google.com/site/имя_сайта/");
site.createWebPage(pageTitle, (Math.random()+'').split('.')[1]+'', html);
};
|
Это просто чудо!
Спасибо Вам большое:) Оставьте мне свой кошелек WMZ И можете еще подсказать, как также передавать параметр нужного сайта и параметр url страницы? Я добавил в doGet такое:
app.add(app.createHTML("Page url:<br>"));
var textBox = app.createTextBox().setId('pageUrl').setName('pageUrl');
app.add(textBox);
app.add(app.createHTML("Site:<br>"));
var textBox = app.createTextBox().setId('siteHref').setName('siteHref');
app.add(textBox);
Но новые поля даже не появляются в обновленном скрипте:( Функцию добавления правил так:
function createDemoPage(pageTitle, html, pageUrl, siteHref) {
var site = SitesApp.getSiteByUrl("https://sites.google.com/site/"+siteHref+"/");
site.createWebPage(pageTitle, pageUrl, html);
};
Это будет верным вариантом? Спасибо:) |
Цитата:
function doGet(e) {
И можете внутри нее получать параметры так: var param1 = e.parameter.par1; var param2 = e.parameter.par2; В URL они будут выглядеть так: .../exec?par1=aaa&par2=bbb Цитата:
function doGet(e) {
var app = UiApp.createApplication();
app.add(app.createHTML("Page title:<br>"));
var textBox = app.createTextBox().setId('pageTitle').setName('pageTitle');
app.add(textBox);
app.add(app.createHTML("<br>HTML:<br>"));
var textArea = app.createTextArea().setId('htmlText').setName('htmlText');
app.add(textArea);
app.add(app.createHTML("<br>"));
app.add(app.createHTML("Page url:<br>"));
var pageUrlTextBox = app.createTextBox().setId('pageUrl').setName('pageUrl');
app.add(pageUrlTextBox);
app.add(app.createHTML("Site:<br>"));
var siteHrefTextBox = app.createTextBox().setId('siteHref').setName('siteHref');
app.add(siteHrefTextBox);
app.add(app.createHTML("<br>"));
var button = app.createButton('Create page');
app.add(button);
var label = app.createLabel('The button was clicked.')
.setId('statusLabel')
.setVisible(false);
app.add(label);
var handler = app.createServerHandler('myClickHandler');
handler.addCallbackElement(label);
handler.addCallbackElement(textBox);
handler.addCallbackElement(textArea);
handler.addCallbackElement(pageUrlTextBox);
handler.addCallbackElement(siteHrefTextBox);
button.addClickHandler(handler);
return app;
}
function myClickHandler(e) {
var app = UiApp.getActiveApplication();
var pageTitle = e.parameter.pageTitle;
var html = e.parameter.htmlText;
var siteHref = e.parameter.siteHref;
var pageUrl = e.parameter.pageUrl;
createDemoPage(pageTitle, html, pageUrl, siteHref);
var label = app.getElementById('statusLabel');
label.setText('new page created: ' + pageTitle);
label.setVisible(true);
app.close();
return app;
}
function createDemoPage(pageTitle, html, pageUrl, siteHref) {
var site = SitesApp.getSiteByUrl("https://sites.google.com/site/"+siteHref+"/");
site.createWebPage(pageTitle, pageUrl, html);
};
Цитата:
|
Большое спасибо)
|
Скрипт для гугль-диска
Дабы не плодить новых тем, спрошу здесь...
Решил попробовать гугл-диск как файловый хостинг, и сразу столкнулся с проблемой получения ссылки на файл, поскольку файлов овер чем... много, в общем. Рытье инета дало следующие результаты: вот тут http://catamobile.org.ua/drevovidnay...gle-drive.html есть скрипт, который выводит дерево с именами всех файлов на гуглдиске. Кириллические, правда, коверкает, но старому ДОСовцу :) это по барабану... Нашел еще вот что === Работа с Google Drive Google Apps Script может работать с файлами пользователя, размещенными на Google Drive. Этот скрипт выводит в консоль имена всех файлов пользователя: var files = DriveApp.getFiles(); while (files.hasNext()) { var file = files.next(); Logger.log(file.getName()); } К файлам можно применять несколько десятков различных методов. Вот некоторые из них: addEditor(“email пользователя”) — наделяет пользователя правами на редактирование файла; getOwner() — узнать владельца файла; makeCopy(“имя”, “путь”) — создать копию файла; getLastUpdated() — возвращает пользователя, который внес последнее изменение. === тянуто отсюда https://xakep.ru/2015/01/08/google-apps-script/ К сожалению, мои познания в гугльапи еще меньше, чем в джаваскрипте, посему прошу помощи/наставления на путь истинный - нужен скрипт для выведения, например, в таблицу всех файлов на гугль-диске с их урлами... В идеале с размерами, датами модификаций, скачиваний, с возможностью "натравить" скрипт на конкретную папку с подпапками... но это я уже зажрался... В общем ,нужна помощь (оплачиваемая в разумных пределах)... |
В опчем, пока копаю самостийно... Вышеприведенный код запустил, и в логах список файлов (имен) имею. Попытался вместо getName() влепить getPath() - обработчик ругается, не может такую функцию найти...
|
Цитата:
|
И таки где вы были вчера, когда поздно вечером я таки надыбал почти эту же штуку, только коряво переведенную гуглем на великий и могучий? :)
Вот ссылка https://translate.googleusercontent....A2hBdajb1xghhA В общем, путь я пока не выковырял, но getId() дает мне идентификатор, а слепить с его помощью прямую ссылку на файл - плевое дело. Таперича буду думать, как это все в табличку запихнуть... |
Цитата:
|
| Часовой пояс GMT +3, время: 07:43. |