Javascript.RU

Создать новую тему Ответ
 
Опции темы Искать в теме
  #1 (permalink)  
Старый 05.12.2014, 04:57
Новичок на форуме
Отправить личное сообщение для korodron Посмотреть профиль Найти все сообщения от korodron
 
Регистрация: 05.12.2014
Сообщений: 3

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">'
      + '&nbsp;Google Apps Script Center Project Page</div><div><p>&nbsp;</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
Ответить с цитированием
  #2 (permalink)  
Старый 05.12.2014, 08:13
Профессор
Отправить личное сообщение для jsnb Посмотреть профиль Найти все сообщения от jsnb
 
Регистрация: 15.03.2014
Сообщений: 561

В функции 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);
};

Последний раз редактировалось jsnb, 05.12.2014 в 08:23.
Ответить с цитированием
  #3 (permalink)  
Старый 05.12.2014, 13:03
Новичок на форуме
Отправить личное сообщение для korodron Посмотреть профиль Найти все сообщения от korodron
 
Регистрация: 05.12.2014
Сообщений: 3

Это просто чудо!
Спасибо Вам большое

Оставьте мне свой кошелек 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);
};


Это будет верным вариантом?
Спасибо
Ответить с цитированием
  #4 (permalink)  
Старый 05.12.2014, 13:55
Профессор
Отправить личное сообщение для jsnb Посмотреть профиль Найти все сообщения от jsnb
 
Регистрация: 15.03.2014
Сообщений: 561

Сообщение от korodron
И можете еще подсказать, как также передавать параметр нужного сайта и параметр url страницы?
Допишите в doGet параметр e, вот так:
function doGet(e) {

И можете внутри нее получать параметры так:
var param1 = e.parameter.par1;
var param2 = e.parameter.par2;

В URL они будут выглядеть так:
.../exec?par1=aaa&par2=bbb

Сообщение от korodron
Но новые поля даже не появляются в обновленном скрипте
Странно, по идее должно работать. Вы код сохраняли и задеплоили? Сейчас проверил у себя, работает. Вот код, который тестил у себя:
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);
};


Сообщение от korodron
Это будет верным вариантом?
В принципе, должно работать, если права доступа к сайтам у приложения есть. У меня по крайней мере работает.

Последний раз редактировалось jsnb, 05.12.2014 в 13:58.
Ответить с цитированием
  #5 (permalink)  
Старый 05.12.2014, 17:45
Новичок на форуме
Отправить личное сообщение для korodron Посмотреть профиль Найти все сообщения от korodron
 
Регистрация: 05.12.2014
Сообщений: 3

Большое спасибо)
Ответить с цитированием
  #6 (permalink)  
Старый 06.05.2015, 10:27
Интересующийся
Отправить личное сообщение для lovial Посмотреть профиль Найти все сообщения от lovial
 
Регистрация: 05.07.2011
Сообщений: 15

Скрипт для гугль-диска
Дабы не плодить новых тем, спрошу здесь...
Решил попробовать гугл-диск как файловый хостинг, и сразу столкнулся с проблемой получения ссылки на файл, поскольку файлов овер чем... много, в общем.
Рытье инета дало следующие результаты:
вот тут 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/
К сожалению, мои познания в гугльапи еще меньше, чем в джаваскрипте, посему прошу помощи/наставления на путь истинный - нужен скрипт для выведения, например, в таблицу всех файлов на гугль-диске с их урлами... В идеале с размерами, датами модификаций, скачиваний, с возможностью "натравить" скрипт на конкретную папку с подпапками... но это я уже зажрался...
В общем ,нужна помощь (оплачиваемая в разумных пределах)...
Ответить с цитированием
  #7 (permalink)  
Старый 06.05.2015, 14:31
Интересующийся
Отправить личное сообщение для lovial Посмотреть профиль Найти все сообщения от lovial
 
Регистрация: 05.07.2011
Сообщений: 15

В опчем, пока копаю самостийно... Вышеприведенный код запустил, и в логах список файлов (имен) имею. Попытался вместо getName() влепить getPath() - обработчик ругается, не может такую функцию найти...
Ответить с цитированием
  #8 (permalink)  
Старый 07.05.2015, 07:43
Профессор
Отправить личное сообщение для jsnb Посмотреть профиль Найти все сообщения от jsnb
 
Регистрация: 15.03.2014
Сообщений: 561

Сообщение от lovial
Попытался вместо getName() влепить getPath() - обработчик ругается, не может такую функцию найти...
Ну так потому что и нет такой функции в гугловском API. Вот тут описаны все имеющиеся методы для работы с диском.
Ответить с цитированием
  #9 (permalink)  
Старый 07.05.2015, 08:05
Интересующийся
Отправить личное сообщение для lovial Посмотреть профиль Найти все сообщения от lovial
 
Регистрация: 05.07.2011
Сообщений: 15

И таки где вы были вчера, когда поздно вечером я таки надыбал почти эту же штуку, только коряво переведенную гуглем на великий и могучий?
Вот ссылка https://translate.googleusercontent....A2hBdajb1xghhA
В общем, путь я пока не выковырял, но getId() дает мне идентификатор, а слепить с его помощью прямую ссылку на файл - плевое дело. Таперича буду думать, как это все в табличку запихнуть...
Ответить с цитированием
  #10 (permalink)  
Старый 07.05.2015, 08:16
Профессор
Отправить личное сообщение для jsnb Посмотреть профиль Найти все сообщения от jsnb
 
Регистрация: 15.03.2014
Сообщений: 561

Сообщение от lovial
Таперича буду думать, как это все в табличку запихнуть...
Там если создать новый проект веб приложения, то будет пример вывода данных в шаблон. Причем как раз пример вывода списка файлов из гугл диска. Там надо только поменять шаблон и расширить собираемые данные и всё.
Ответить с цитированием
Ответ



Опции темы Искать в теме
Искать в теме:

Расширенный поиск


Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
С чего начать и куда дальше двигаться lepeed Оффтопик 48 09.10.2014 12:34
Отправить туда от куда пришел с помощью document.referrer rabinzonoff Общие вопросы Javascript 0 17.01.2014 10:13