Макросы для подсчета письмодней

Обсуждаются конкретные инструменты и приемы их использования
Правила форума
Создание новых веток приветствуется и поощряется, однако, посмотрите основные правила.
Аватара пользователя
sergeyzwezdin
Сообщения: 12
Зарегистрирован: Чт дек 27, 2018 6:29 am
x 22

Re: Макросы для подсчета письмодней

Сообщение sergeyzwezdin »

За скрипты для gmail спасибо! Было бы круто иметь кнопочку в UI, которую нажимаешь и получаешь письмодни, как у Максима в аутлуке (а не лезть в shreadsheets или получать отдельное письмо по email).
Впрочем для gmail запилить это оказалось непросто — потратил немного времени и не нашел вариантов :(
0 x

Аватара пользователя
Дмитрий Неумойчев
Сообщения: 282
Зарегистрирован: Пт июл 10, 2015 10:50 am
x 308
Контактная информация:

Re: Макросы для подсчета письмодней

Сообщение Дмитрий Неумойчев »

Угу, заморочено.
https://developers.google.com/gmail/add ... quickstart - позволяет запилить кнопку в новый боковой сайдбар, на всякий случай название гайда Quickstart: Gmail Add-on , а то урл кажется в общий хелп идет.

Получилось сделать кнопку из хелпа. Правда для работы надо выделить письмо. Можно ли без этого обойтись мне уже лениво разбираться. (должно быть можно, календарь то работает)

Код скрипта:

Код: Выделить всё

//функция, которая уже встречалась выше по ветке, выброшена запись в таблицу, включен возврат значения
function getMailDays(accessToken) {
  GmailApp.setCurrentMessageAccessToken(accessToken);
  var threads = GmailApp.getInboxThreads();
  //Добавляем еще других лейблов
//  var extra_labels = ["starred"];
//  for (var i = 0; i < extra_labels.length; i++) {
//    Array.prototype.push.apply(threads, GmailApp.getUserLabelByName(extra_labels[i]).getThreads());
//  }
  Array.prototype.push.apply(threads, GmailApp.getStarredThreads()); //Папка "Помеченные
  
  var messages = GmailApp.getMessagesForThreads(threads);
  var multiplier = 1000*60*60*24;
  var now = new Date()
  
  var maildays = 0;
  for (var i = 0; i < threads.length; i++) {
    var messages=threads[i].getMessages();
    for (var j = 0; j < messages.length; j++) {
      maildays+=(now - messages[j].getDate())/multiplier;
    }
  }
  return maildays;
}


// искромсанный квикстарт
/**
 * Copyright Google LLC
 *
 * Licensed under the Apache License, Version 2.0 (the "License");
 * you may not use this file except in compliance with the License.
 * You may obtain a copy of the License at
 *
 *     https://www.apache.org/licenses/LICENSE-2.0
 *
 * Unless required by applicable law or agreed to in writing, software
 * distributed under the License is distributed on an "AS IS" BASIS,
 * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
 * See the License for the specific language governing permissions and
 * limitations under the License.
 */

/**
 * Returns the array of cards that should be rendered for the current
 * e-mail thread. The name of this function is specified in the
 * manifest 'onTriggerFunction' field, indicating that this function
 * runs every time the add-on is started.
 *
 * @param {Object} e The data provided by the Gmail UI.
 * @return {Card[]}
 */
function buildAddOn(e) {
  // Activate temporary Gmail add-on scopes.
  var accessToken = e.messageMetadata.accessToken;
  GmailApp.setCurrentMessageAccessToken(accessToken);


  // Build the main card after adding the section.
  var card = CardService.newCardBuilder()
    .setHeader(CardService.newCardHeader()
    .setTitle('MD = ' + getMailDays()) //собственно письмодни выводятся в заголовке
    .setImageUrl('https://www.gstatic.com/images/icons/material/system/1x/label_googblue_48dp.png'))
    .build();

  return [card];
} 

Манифест (в скриптоИДЕ вид-показать файл манифеста), от квикстарта изменены разрешения - выброшен доступ к текущему письму, добавлен ридонли доступ к ящику (ну и заголовок изменен)

Код: Выделить всё

{
  "oauthScopes": [
    "https://www.googleapis.com/auth/gmail.addons.execute",
    "https://www.googleapis.com/auth/gmail.readonly"
  ],
  "gmail": {
    "name": "Mailday counter",
    "logoUrl": "https://www.gstatic.com/images/icons/material/system/1x/label_googblue_24dp.png",
    "contextualTriggers": [{
      "unconditional": {
      },
      "onTriggerFunction": "buildAddOn"
    }],
    "openLinkUrlPrefixes": [
      "https://mail.google.com/"
    ],
    "primaryColor": "#4285F4",
    "secondaryColor": "#4285F4"
  }
}
1 x

Аватара пользователя
Рашит Азизбаев
Сообщения: 4
Зарегистрирован: Ср фев 13, 2019 11:51 pm
x 5

Re: Макросы для подсчета письмодней

Сообщение Рашит Азизбаев »

Lomelind писал(а):
Пт фев 15, 2019 1:46 am
Не дождавшись ответа, полезла гуглить.
обрела https://www.toptal.com/software/definit ... nipulation

С месяцем точно косяк: январь - это 0, а не 1 месяц!
так что там ещё единица нужна:)
в своём скрипте добавила

С днём интереснее
вместо getday там надо getdate
тогда работает правильно

итого, последняя строчка sheet.appendRow([now.getDate() + '.' + (now.getMonth()+1) + '.' + now.getFullYear(), maildays]);
Ага, спасибо, исправил в оригинале
1 x

Аватара пользователя
sergeyzwezdin
Сообщения: 12
Зарегистрирован: Чт дек 27, 2018 6:29 am
x 22

Re: Макросы для подсчета письмодней

Сообщение sergeyzwezdin »

Дмитрий Неумойчев писал(а):
Вс фев 17, 2019 9:58 pm
Угу, заморочено.
https://developers.google.com/gmail/add ... quickstart - позволяет запилить кнопку в новый боковой сайдбар, на всякий случай название гайда Quickstart: Gmail Add-on , а то урл кажется в общий хелп идет.

Получилось сделать кнопку из хелпа. Правда для работы надо выделить письмо. Можно ли без этого обойтись мне уже лениво разбираться. (должно быть можно, календарь то работает)
Ага, но рассчиатно это у них на другой сценарий — когда требуется что-то с сообщением сделать (данные там из CRM потянуть).
По другому, гугл не дает расширения деать.
Дмитрий Неумойчев писал(а):
Вс фев 17, 2019 9:58 pm
Можно ли без этого обойтись мне уже лениво разбираться. (должно быть можно, календарь то работает)
Нельзя. Удобгий у них SDK.
Я попробовал сделать плагин для хрома на основе InboxSDK, но там тоже заморочек хватает — кнопка на тулбаре появляется только при выделении письма в спике.
0 x

mixer
Сообщения: 4
Зарегистрирован: Ср фев 01, 2017 7:53 pm
x 3

Re: Макросы для подсчета письмодней

Сообщение mixer »

Странно, что по эти два макроса получают совершенно разные результаты. В моем случае результат отличается где-то в 5 раз.
0 x

e.zhrv
Сообщения: 1
Зарегистрирован: Пн авг 14, 2017 3:20 pm
x 3

Re: Макросы для подсчета письмодней

Сообщение e.zhrv »

Нашёл исключение в опубликованных макросах. Они выгружают для анализа максимум 500 писем.
т.е. если в инбоксе >500 писем, то письмодни будут считаться неправильно.

Поэтому объединил 2 опубликованных макроса и немного дописал функционал.
Теперь макрос поддерживает не больше 5500 писем в инбоксе.
Если больше, то скрипт начинает упираться в ограничение по времени выполнения от Google Script (тестировал на 7500)

4 простых шага как ежедневно и автоматически
считать #письмодни в Gmail (с графиком в Google Таблицах),
даже если Вы не сильно разбираетесь в макросах для Gmail:

https://script.google.com/d/1hgXOPw-YOJ ... usQ7Z/edit
2019-02-19_17-58-47.png
3 x

Аватара пользователя
Дмитрий Неумойчев
Сообщения: 282
Зарегистрирован: Пт июл 10, 2015 10:50 am
x 308
Контактная информация:

Re: Макросы для подсчета письмодней

Сообщение Дмитрий Неумойчев »

В скрипте от Рашита (если только я его не сломал пока настраивал) есть еще неоднозначный момент - прилетает новое письмо в длинную цепочку и у меня сразу вылетает +290 дней письмодолга. Похоже считаются все письма цепочки, или по первому, а не по последнему. Развитие от e.zhrv не проверял.
1 x

zver
Сообщения: 2
Зарегистрирован: Вт фев 26, 2019 8:14 pm
x 4

Re: Макросы для подсчета письмодней

Сообщение zver »

Создал на выходных плагин для chrome (chromium) которые по клику на иконке плагина показывает "письмодни" для Today задач в сервисе DoIt.im. Это сервис для управления задачами по методу пустого inbox'a

Код можно посмотреть тут
https://github.com/zver/doit-metric

Сам плагин не публиковал в каталоге приложений chrome, поэтому для установки нужно сделать следующее.
* скачать https://github.com/zver/doit-metric/archive/master.zip
* распаковать архив
* в разделе управления расширениями браузера нажать "Загрузить распакованное расширение" и указать директорию куда распаковали. Появится значок в виде графика на панели браузера с расширениями.

Для работы плагина вы должны быть авторизованы в doit.im
2 x

Аватара пользователя
sergeyzwezdin
Сообщения: 12
Зарегистрирован: Чт дек 27, 2018 6:29 am
x 22

Re: Макросы для подсчета письмодней

Сообщение sergeyzwezdin »

zver писал(а):
Вт фев 26, 2019 8:22 pm
Создал на выходных плагин для chrome (chromium) которые по клику на иконке плагина показывает "письмодни" для Today задач в сервисе DoIt.im.
А какой смысл считать это для списка задач и тем более в Today? Мы можем прокрастинировать задачи просто никогда не перенося их в Today, например.
0 x

zver
Сообщения: 2
Зарегистрирован: Вт фев 26, 2019 8:14 pm
x 4

Re: Макросы для подсчета письмодней

Сообщение zver »

У меня основная проблема при работе с этим методом в том что к концу дня остаются задачи, запланированные на Today. Амбициозно оцениваю свои возможности на день. Некоторые задачи переносятся на другой день. И вот отслеживание такой метрики мне помогает понимать насколько все плохо и лучше оценивать вечером насколько я лишнего напланировал в задачах-днях. Да, в этом плагине для DoIt.im корректнее будет называть метрику задача-дни, нежели письмодни.
Inbox в DoIt.im я очищаю без проблем в начале каждого дня, размещая задачи по нужным другим папкам.

В любом случае поменяв буквально одно слово в коде этого плагина можно оценивать другую папку с задачами, либо реализовать показ метрики по каждой папке, но руки не дошли, мне хватает метрики для Today.
2 x

Ответить