//-------------------------------------------------------------------------------------------- // ---=== основные параметры скрипта ===--- // // URL таблицы с данными по диктанту в нужном формате: два листа INPUT, OUTPUT. // В первом упорядоченные ссылки на звуковые фрагменты по предложениям, во втором результаты из Толоки const sheetName = 'https://docs.google.com/spreadsheets/d/1fbP4rylF5ryZS905D2xlgA9qhRimD6IxpHPR-bbz3tE/edit'; // // id директории, куда сохранять файлы диктантов (берётся из URL'а https://drive.google.com/drive/folders/%id) const folderSave = '1s9p2RBowh3hou94p_jDdJ1Zv4Ty7fqu-'; // //id диктанта из Учительской (берётся из URL'а диктанта) const dictId = '61f8e9a6a5fd104693b9646d'; //-------------------------------------------------------------------------------------------- function RunImport() { Logger.log("Запуск скрипта формирования текстов диктантов из результатов Яндекс.Толоки..."); //https://developers.google.com/apps-script/reference/spreadsheet/spreadsheet-app var sheetDict = SpreadsheetApp.openByUrl(sheetName); Logger.log('Получен доступ к гугл.таблице "%s"', sheetDict.getName()); var dictFolder = DriveApp.getFolderById(folderSave); Logger.log('Получен доступ к директории "%s"', dictFolder.getName()); var range = sheetDict.getRange("INPUT!A2:A100"); //задаём название листа и интервал со значениями ссылок на диктовки предложений (задания в Толоке) var sentencesIds = getSentenceIds(range.getValues()); var range = sheetDict.getRange("OUTPUT!A2:B"); //задаём название листа и интервал со значениями результатов Толоки mergeResults(range.getValues(), sentencesIds, dictFolder); Logger.log("Готово!"); }; function saveDict(text, dictFolder){ var fileName = dictId + '_' + createUUID() + '.txt'; dictFolder.createFile(fileName, text); Logger.log('диктант "%s" сохранён (размер %d символов)', fileName, text.length); } function mergeResults(valuesInput, sentencesIds, dictFolder){ var dictText = []; var link = ''; var text = ''; var idx = -1; for (var i = 0,countLines = valuesInput.length; i < countLines; i++) { link = valuesInput[i][0].trim(); text = valuesInput[i][1].trim(); if (link.length > 2 && text.length > 2) { idx = sentencesIds.indexOf(link); if (idx == -1) { Logger.log('В таблице предложений не найден элемент со ссылкой %s', link) } else { if (dictText[idx] == null) { dictText[idx] = text; valuesInput[i][0] = '?'; valuesInput[i][1] = '?'; if (Object.keys(dictText).length == sentencesIds.length) { var fullText = dictText.join(" "); saveDict(fullText, dictFolder); dictText.length = 0; i = 0; } } } } } } // получение массива id предложений по ссылкам на аудиозаписи function getSentenceIds(valuesInput){ var sentencesIds = []; for (var i = 0,countLines = valuesInput.length; i < countLines; i++) { if (valuesInput[i][0].length > 1) { sentencesIds.push(valuesInput[i][0].trim()) } } return (sentencesIds) } function createUUID() { // http://www.ietf.org/rfc/rfc4122.txt var s = []; var hexDigits = "0123456789abcdef"; for (var i = 0; i < 36; i++) { s[i] = hexDigits.substr(Math.floor(Math.random() * 0x10), 1); } s[14] = "4"; s[19] = hexDigits.substr((s[19] & 0x3) | 0x8, 1); //s[8] = s[13] = s[18] = s[23] = "-"; var uuid = s.join(""); return uuid; }