Last active
August 29, 2015 14:19
-
-
Save ddsimoes/cdedd16954974c3c2a14 to your computer and use it in GitHub Desktop.
Google script para automatizar a criação de evento de devolução de livros para as bibliotecas da UNICAMP no Calendar
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
/* | |
-- Format of message body -- | |
Bla bla bla | |
Bla bla bla | |
... | |
... | |
Bla bla bla | |
----------------------------------------------------------<br /> | |
Autor: Burden, Richard L.<br /> | |
Título: Análise numérica<br /> | |
Ano: 2013<br /> | |
Data da retirada: 07/04/2015<br /> | |
Prazo de devolução: 14/04/2015<br /> | |
----------------------------------------------------------<br /> | |
Autor: Cunha, Maria Cristina de Castro, 1945-<br /> | |
Título: Métodos numéricos<br /> | |
Ano: 2000<br /> | |
Edição/Número: [2. ed. rev. ampl.]<br /> | |
Data da retirada: 07/04/2015<br /> | |
Prazo de devolução: 14/04/2015<br /> | |
----------------------------------------------------------<br /> | |
Bla bla bla | |
*/ | |
function parseDate(str) { | |
var p = str.split("/"); | |
return new Date(p[2], p[1] - 1, p[0], 0, 0, 0, 0); | |
} | |
function getFieldValue(str, field) { | |
var regex = new RegExp(field + ": [^<]+"); | |
return str.match(regex)[0].slice(field.length + 2); | |
} | |
function parseBook(str) { | |
var book = { | |
author: getFieldValue(str, "Autor"), | |
title: getFieldValue(str, "Título"), | |
returnDate: parseDate(getFieldValue(str, "Prazo de devolução")), | |
} | |
return book; | |
} | |
function findBooks(thread) { | |
var body = thread.getMessages()[0].getBody(); | |
var parts = body.split(/----------------------------------------------------------/g); | |
if (parts.length < 3) { | |
Logger.log("Unknow body content: "); | |
Logger.log(body); | |
return; | |
} | |
parts = parts.slice(1, -1); | |
var books = new Array(); | |
for (var i = 0; i < parts.length; i++) { | |
books.push(parseBook(parts[i])); | |
} | |
return books; | |
} | |
function findEvent(date) { | |
var event = null; | |
Logger.log(CalendarApp.getDefaultCalendar().getName()); | |
var events = CalendarApp.getDefaultCalendar().getEventsForDay(date); | |
for (var i = 0; i < events.length; i++) { | |
event = events[i]; | |
if (event.getTag("--BOOK_RETURN--") != null) { | |
Logger.log("Found event: " + event.getTitle() + " - " + event.getStartTime() + " - " + event.getDescription()); | |
return event; | |
} | |
} | |
event = CalendarApp.getDefaultCalendar().createAllDayEvent("Devolução de livros", date); | |
event.setTag("--BOOK_RETURN--", "TRUE"); | |
event.addEmailReminder(5); | |
Logger.log("Event created: " + event.getTitle() + " - " + event.getStartTime()); | |
return event; | |
} | |
function getEvent(eventTable, date) { | |
var event = eventTable[date]; | |
if (event == null) { | |
event = findEvent(date); | |
eventTable[date] = event; | |
} | |
return event; | |
} | |
function formatGmailDate(date) { | |
return date.getFullYear() + "/" + (date.getMonth() + 1) + "/" + date.getDate(); | |
} | |
function processThread(eventTable, thread) { | |
var books = findBooks(thread); | |
for (var i = 0; i < books.length; i++) { | |
var book = books[i]; | |
var event = getEvent(eventTable, book.returnDate); | |
var bookStr = book.title + " (" + book.author + ")"; | |
var desc = event.getDescription(); | |
if (desc.indexOf(bookStr) < 0) { | |
var separator = (desc.length > 0) ? "\n---------------------\n" : ""; | |
event.setDescription(desc + separator + bookStr); | |
} | |
} | |
Logger.log(books); | |
} | |
function checkPendingEmails() { | |
var date = new Date(new Date().getTime() - 2 * 24 * 60 * 60 * 1000); | |
var query = 'after:' + formatGmailDate(date) + ' from:(unicamp.br) "Prazo de devolução" acervus'; | |
Logger.log(query); | |
var eventTable = {}; | |
var threads = GmailApp.search(query); | |
for (var i = 0; i < threads.length; i++) { | |
processThread(eventTable, threads[i]); | |
} | |
} |
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment