Контакты

Наибольший вклад в теги

Все теги (4)

Лучшие ответы пользователя

Все ответы (43)
  • Скрипт Google Docs + Яндекс.Маркет API

    oshliaer
    @oshliaer
    Google Top Contributor
    Основное требование от Яндекс для доступа к API Маркета - это наличие "Партнерского API"- или
    "Контентного API"- ключа доступа в виде oauth_login. Этакий ключ-в-ключе. Рассуждения на тему необходимости, полагаю, неуместны.

    API Маркета
    • Партнерский API Для магазинов, которые размещают товары на Яндекс.Маркете, а также для рекламных агентств.
    • Контентный API Для разработчиков, которым нужны данные о товарах с Маркета: описания моделей, фотографии, отзывы.

    Следует точно определиться с целью задачи. Не знаю, дает ли Яндекс добро на использование данных в масштабах "личного хочу", поэтому, не имея магазина, придется создавать приложение "для всех".

    Опишу вкратце, как использовать API Маркет в Google Apps Script:
    1. Вы должны быть уверены, что у вас есть ваш oauth_login (см. выше)
    2. Пройдите Авторизацию. Для этого ваше приложение должно использовать следующие из возможностей Google Apps Script: HtmlService как опубликованное приложение, HtmlService как возврат StateTokenBuilder, если вы создаете Add-On. Для получения токена и отправки запросов POST (или запросов GET от лица приложения) используйте URLFetch
    3. Следуйте инструкциям Яндекс по Ограничениям для запросов

    Могу добавить только то, что описание API Яндекс и ВКонтакте на данный момент, как мне кажется, являются самыми внятными и, вероятно, прямолинейными. От чего вероятность возникновения ошибок минимальна.

    С уважением.
    Ответ написан
  • Как сгенерить md5 строку на Google Script?

    oshliaer
    @oshliaer
    Google Top Contributor
    Здравствуйте.

    Мне кажется, что у вас неполные представления о методах Google Apps Script, алгоритмах хэширования и системах исчисления.

    Во-первых, computeDigest возвращает массив Byte[], что он и должен делать.
    Во-вторых, вам просто его надо "преобразовать в 16-ричную хэш строку", как сказано выше.

    Попробуйте сделать так:

    function test(){
      Logger.log('56'.MD5());
    }
    String.prototype.MD5 = function(charset, toByte) {
      charset = charset || Utilities.Charset.UTF_8;
      var digest = Utilities.computeDigest(Utilities.DigestAlgorithm.MD5, this, charset);
      if(toByte) return digest;
      var __ = '';
      for (i = 0; i < digest.length; i++) {
        var byte = digest[i];
        if (byte < 0) byte += 256;
        var bStr = byte.toString(16);
        if (bStr.length == 1) bStr = '0' + bStr;
        __ += bStr;
      }
      return __;
    }

    С уважением.
    Больше информации на Google Документы и Диск
    Ответ написан
  • Как получить ссылку на изображение из Google диска по id?

    oshliaer
    @oshliaer
    Google Top Contributor
    Здравствуйте.

    Берут сомнения меня, что CAJA, даже в режиме IFRAME, предоставляет нам DOM-документ. Все же, с большой вероятностью, это некий фарш LIKE_DOM = CAJA(DOM);

    Поэтому инструкция, чтобы в нее не передавали, не будет "responsive":
    document.getElementByTagName('img').src = data.image;

    Но, это же DOM, в конце концов! Создаем элемент, вместо изменения атрибута:
    index.html
    <div>
    	<input type="button" onclick="showImage()" value="Click Me!" />
    	<div id="app"></div>
    </div>
    <script>
    	function showImage() {
    		google.script.run.withSuccessHandler(doStuff).withFailureHandler(function serverFailureHandler(e) {
    			console.log(JSON.stringify(e))
    		}).getImageId();
    	};
    	function doStuff(id) {
    		var img = document.createElement('img');
    		img.src = 'https://drive.google.com/uc?export=download&id=' + id;
    		document.getElementById('app').appendChild(img);
    	};
    </script>

    Code.gs
    function doGet(e){
      return HtmlService.createHtmlOutputFromFile('index');
    }
    function getImageId(){
      return '0BzStSAirQJ2oREZGYnM5MjBUZTQ';
    }

    Заметьте, нет никакой необходимости вызывать DriveApp. Он вам понадобится, только если изображение будет не в общем доступе. Тогда вам придется брать Blob, кодировать его в base64 и передавать слепок. Размер слепка не может превышать 10Мб.

    И еще я заметил у вас
    <?!= include('JavaScript'); ?>
    Не забудьте, что шаблоны не исполняют асинхронного кода Load data asynchronously, not in templates, поэтому, создавая нечто объемное, постарайтесь выдать HTML как можно быстрее:
    function doGet(e){
      return HtmlService.createHtmlOutputFromFile('index');
    }

    С уважением.
    Больше ответов на русском языке тут Bit.Ly/rudrive и тут Bit.Ly/rugoogleapps.
    Ответ написан
  • Как связать или внедрить данные в Google Docs?

    oshliaer
    @oshliaer
    Google Top Contributor
    Технически это возможно с большими оговорками.

    Во-первых, не сравнивайте сервисы Google с настольным приложением, это позволит более трезво взглянуть на вещи.
    Во-вторых, встроенных средств не существует. И, если еще раз прочитать "во-первых", они и не нужны.
    В-третьих, можно извернуться и программно добавлять значения в Документ, но это довольно хлопотно. В конце-концов в Google Apps Script есть некий класс Class Range, который, все же, пока болтается без дела.

    Это все, что можно сказать по существу на данный момент.
    Обычно решают вопрос созданием шаблонов и генерацией на их основе новых Документов, а не преобразованием текущего.

    С уважением.
    Больше ответов на русском языке тут Bit.Ly/rudrive и тут Bit.Ly/rugoogleapps.
    Ответ написан
  • Система бронирования (резервирования) товаров (заказов) Google spread sheet. Примеры?

    oshliaer
    @oshliaer
    Google Top Contributor
    Здравствуйте.

    Вот небольшой пример https://youtu.be/9WK1FM2_tDc Таблица https://goo.gl/4u23t7 (необходимо сделать копию)

    Суть в том, чтобы вести запись только в одном листе "История". На "Складе" остатки отображаются через формулу:
    =QUERY('История'!B:E;"select B, C, sum(D) where E=true group by B, C")

    Т.е. если в "Истории" будет запись без TRUE, то ее можно считать "непроведенной".
    Лист "Заказы" служит пояснением для "Истории", возможно, надо как-то расширить связь этих Таблиц, но она все равно будет условной.

    Пояснения к коду. Серверная часть нуждается в LockService, чтобы разрешить очередь записи.
    Можно сделать форму просмотра заказов, с возможностью помечать FALSE в "Истории". Может быть даже "Редактировать", но лучше по-моему, делать копию и записывать новый заказ, помечая прежний как FALSE. Также необходимо продумать регламент, т.к. Таблицы "нерезиновые" и необходимо максимально часто переносить остатки.

    Пояснения к концепту. Ваше представление, которое приведено выше, вряд ли подойдет для реализации в Таблицах, уже только потому, что никаких идентификаторов строк, и тем более связей между Таблицами, не существует. Я предлагаю вообще ничего не удалять. Лучше делать "перенос остатков" и прочих параметров в новые Таблицы (или наоборот), чтобы иметь более полноценную картину действий.

    С уважением.
    Больше ответов на русском языке тут Bit.Ly/rudrive и тут Bit.Ly/rugoogleapps.

    Есть вопросы? Обращайтесь.

    Пожалуйста, измените теги в топике на Google script и Spreadsheets. При текущем теге ответ на вопрос должен быть примерно таким https://www.google.com/enterprise/marketplace/sear...
    Ответ написан