{"id":479,"date":"2025-03-20T16:28:24","date_gmt":"2025-03-20T13:28:24","guid":{"rendered":"https:\/\/glebdranitson24.thkit.ee\/wp\/rus\/?page_id=479"},"modified":"2025-03-20T16:28:24","modified_gmt":"2025-03-20T13:28:24","slug":"google-script-%d1%80%d0%b0%d0%b1%d0%be%d1%82%d0%b0-%d1%81-%d1%82%d1%80%d0%b8%d0%b3%d0%b3%d0%b5%d1%80%d0%b0%d0%bc%d0%b8-onedit","status":"publish","type":"page","link":"https:\/\/glebdranitson24.thkit.ee\/wp\/rus\/?page_id=479","title":{"rendered":"Google Script \/ \u0440\u0430\u0431\u043e\u0442\u0430 \u0441 \u0442\u0440\u0438\u0433\u0433\u0435\u0440\u0430\u043c\u0438 onEDIT"},"content":{"rendered":"\n<p class=\"has-base-3-color has-contrast-background-color has-text-color has-background has-link-color wp-elements-330a9be10735bbefd28ab2e0f860b5e4\">\u0414\u0435\u043b\u0430\u0435\u043c \u043f\u0435\u0440\u0435\u0432\u043e\u0434\u0447\u0438\u043a<\/p>\n\n\n\n<div class=\"wp-block-group\"><div class=\"wp-block-group__inner-container is-layout-constrained wp-block-group-is-layout-constrained\"><div class=\"wp-block-syntaxhighlighter-code \"><pre class=\"brush: java; title: ; notranslate\" title=\"\">\n\/\/ \u0424\u0443\u043d\u043a\u0446\u0438\u044f onEdit \u044f\u0432\u043b\u044f\u0435\u0442\u0441\u044f \u0442\u0440\u0438\u0433\u0433\u0435\u0440\u043e\u043c, \u043a\u043e\u0442\u043e\u0440\u044b\u0439 \u0441\u0440\u0430\u0431\u0430\u0442\u044b\u0432\u0430\u0435\u0442 \u043f\u0440\u0438 \u0437\u0430\u0432\u0435\u0440\u0448\u0435\u043d\u0438\u0438 \u0432\u0432\u043e\u0434\u0430 \u0434\u0430\u043d\u043d\u044b\u0445 \u0432 \u044f\u0447\u0435\u0439\u043a\u0443 \u0422\u0430\u0431\u043b\u0438\u0446\u044b \u043f\u043e\u043b\u044c\u0437\u043e\u0432\u0430\u0442\u0435\u043b\u0435\u043c\n\/\/ https:\/\/developers.google.com\/apps-script\/guides\/triggers\/#onedite\nfunction onEdit(e) {\n  Logger.log(e);\n \n  \/\/ \u041f\u043e\u043b\u0443\u0447\u0430\u0435\u043c \u0434\u0438\u0430\u043f\u0430\u0437\u043e\u043d \u044f\u0447\u0435\u0435\u043a, \u0432 \u043a\u043e\u0442\u043e\u0440\u044b\u0445 \u043f\u0440\u043e\u0438\u0437\u043e\u0448\u043b\u0438 \u0438\u0437\u043c\u0435\u043d\u0435\u043d\u0438\u044f\n  \/\/ https:\/\/developers.google.com\/apps-script\/reference\/spreadsheet\/range\n  var range = e.range;\n \n  \/\/ \u041b\u0438\u0441\u0442, \u043d\u0430 \u043a\u043e\u0442\u043e\u0440\u043e\u043c \u043f\u0440\u043e\u0438\u0437\u0432\u043e\u0434\u0438\u043b\u0438\u0441\u044c \u0438\u0437\u043c\u0435\u043d\u0435\u043d\u0438\u044f\n  \/\/ https:\/\/developers.google.com\/apps-script\/reference\/spreadsheet\/sheet\n  var sheet = range.getSheet();\n \n  \/\/ \u041f\u0440\u043e\u0432\u0435\u0440\u044f\u0435\u043c, \u043d\u0443\u0436\u043d\u044b\u0439 \u043b\u0438 \u044d\u0442\u043e \u043d\u0430\u043c \u043b\u0438\u0441\u0442\n  Logger.log(sheet.getName());\n  if (sheet.getName() != &#039;\u041f\u0435\u0440\u0435\u0432\u043e\u0434 \u0442\u0435\u043a\u0441\u0442\u0430&#039;) {\n    return false;\n  }\n \n  \/\/ \u041f\u0435\u0440\u0435\u0432\u043e\u0434\u0438\u0442\u044c \u043d\u0435\u043e\u0431\u0445\u043e\u0434\u0438\u043c\u043e \u0442\u0435\u043a\u0441\u0442, \u0432\u0432\u0435\u0434\u0451\u043d\u043d\u044b\u0439 \u0442\u043e\u043b\u044c\u043a\u043e \u0432 \u043f\u0435\u0440\u0432\u0443\u044e \u043a\u043e\u043b\u043e\u043d\u043a\u0443.\n  \/\/ \u041f\u0440\u043e\u0432\u0435\u0440\u044f\u0435\u043c \u0441\u0442\u0430\u0440\u0442\u043e\u0432\u0443\u044e \u043f\u043e\u0437\u0438\u0446\u0438\u044e \u0434\u0438\u0430\u043f\u0430\u0437\u043e\u043d\u0430\n  Logger.log(range.getColumn());\n  if  (range.getColumn() != 1) {\n    return false;\n  }\n \n  for (var i = 1; i &lt;= range.getNumRows(); i++) {\n    var cell = range.getCell(\n      i, \/\/ \u043d\u043e\u043c\u0435\u0440 \u0441\u0442\u0440\u043e\u043a\u0438\n      1 \/\/ \u043d\u043e\u043c\u0435\u0440 \u043a\u043e\u043b\u043e\u043d\u043a\u0438\n    );\n \n    \/\/ \u041f\u043e\u043b\u0443\u0447\u0430\u0435\u043c \u0442\u0435\u043a\u0441\u0442 \u043d\u0430 \u0440\u0443\u0441\u0441\u043a\u043e\u043c\n    var russianText = cell.getValue();\n \n    \/\/ \u041f\u0435\u0440\u0435\u0432\u043e\u0434\u0438\u043c \u0442\u0435\u043a\u0441\u0442 \u043d\u0430 \u0430\u043d\u0433\u043b\u0438\u0439\u0441\u043a\u0438\u0439\n    \/\/ https:\/\/developers.google.com\/apps-script\/reference\/language\/language-app\n    var translatedText = LanguageApp.translate(\n      russianText, \/\/ \u0442\u0435\u043a\u0441\u0442\n      &#039;ru&#039;, \/\/ \u0441 \u043a\u0430\u043a\u043e\u0433\u043e \u044f\u0437\u044b\u043a\u0430 \u043f\u0435\u0440\u0435\u0432\u043e\u0434\u0438\u043c\n      &#039;en&#039; \/\/ \u043d\u0430 \u043a\u0430\u043a\u043e\u0439 \u044f\u0437\u044b\u043a \u043f\u0435\u0440\u0435\u0432\u043e\u0434\u0438\u043c\n    );\n \n    \/\/ \u0412\u0441\u0442\u0430\u0432\u043b\u044f\u0435\u043c \u043f\u0435\u0440\u0435\u0432\u0435\u0434\u0451\u043d\u043d\u044b\u0439 \u0442\u0435\u043a\u0441\u0442 \u0432\u043e \u0432\u0442\u043e\u0440\u0443\u044e \u043a\u043e\u043b\u043e\u043d\u043a\u0443\n    sheet.getRange(\n      cell.getRowIndex(), \/\/ \u043d\u043e\u043c\u0435\u0440 \u0441\u0442\u0440\u043e\u043a\u0438\n      2 \/\/ \u043d\u043e\u043c\u0435\u0440 \u0441\u0442\u043e\u043b\u0431\u0446\u0430\n    ).setValue(translatedText);\n  }\n \n}\n<\/pre><\/div>\n\n\n<figure class=\"wp-block-image size-full\"><img decoding=\"async\" src=\"https:\/\/glebdranitson24.thkit.ee\/wp\/wp-content\/uploads\/2025\/03\/code-2.png\" alt=\"\" class=\"wp-image-613\"\/><\/figure>\n\n\n\n<p class=\"has-base-3-color has-contrast-background-color has-text-color has-background has-link-color wp-elements-4a82a2d3369be76e5ab3fb92e95db9bc\">\u0434\u043e\u0431\u0430\u0432\u043b\u044f\u0435\u043c \u043d\u043e\u0432\u044b\u0439 \u044f\u0437\u044b\u043a \/ \u043c\u0435\u043d\u044f\u0435\u043c \u043d\u0430\u0437\u0432\u0430\u043d\u0438\u0435 \u043b\u0438\u0441\u0442\u0430 \/ \u043c\u0435\u043d\u044f\u0435\u043c \u043f\u0435\u0440\u0435\u043c\u0435\u043d\u043d\u044b\u0435 \u0441 var \u043d\u0430 let<\/p>\n<\/div><\/div>\n\n\n\n<p class=\"has-base-3-color has-contrast-background-color has-text-color has-background has-link-color wp-elements-b5b58bc17dc2fc6c0b8eb94ca9159a6a\"><strong>\u0414\u043e\u0431\u0430\u0432\u0438\u043b\u0438 \u043c\u0435\u043d\u044e<\/strong><\/p>\n\n\n\n<div class=\"wp-block-group\"><div class=\"wp-block-group__inner-container is-layout-constrained wp-block-group-is-layout-constrained\">\n<div class=\"wp-block-group\"><div class=\"wp-block-group__inner-container is-layout-constrained wp-block-group-is-layout-constrained\">\n<div class=\"wp-block-group\"><div class=\"wp-block-group__inner-container is-layout-constrained wp-block-group-is-layout-constrained\"><div class=\"wp-block-syntaxhighlighter-code \"><pre class=\"brush: java; title: ; notranslate\" title=\"\">\n\/\/ \u0424\u0443\u043d\u043a\u0446\u0438\u044f onOpen() \u0437\u0430\u043f\u0443\u0441\u043a\u0430\u0435\u0442\u0441\u044f \u0432\u0441\u0435\u0433\u0434\u0430 \u043f\u0440\u0438 \u043e\u0442\u043a\u0440\u044b\u0442\u0438\u0438 \u0434\u043e\u043a\u0443\u043c\u0435\u043d\u0442\u0430\n\/\/ https:\/\/developers.google.com\/apps-script\/guides\/triggers\/#onopen\nfunction onOpen() {\n \n  \/\/ \u0421\u043e\u0437\u0434\u0430\u0451\u043c \u043d\u043e\u0432\u043e\u0435 \u043c\u0435\u043d\u044e\n  \/\/ https:\/\/developers.google.com\/apps-script\/reference\/base\/ui#createmenucaption\n  SpreadsheetApp.getUi()\n      .createMenu(&#039;Konspekti n\u00e4ited&#039;)\n      .addItem(&#039;\u041f\u0440\u0438\u043c\u0435\u0440&#039;, &#039;...&#039;) \/\/ \u041f\u0440\u0438 \u043d\u0430\u0436\u0430\u0442\u0438\u0438 \u043e\u0442\u043a\u0440\u043e\u0435\u0442\u0441\u044f ...\n      .addToUi();\n}\n<\/pre><\/div><\/div><\/div>\n\n\n\n<figure class=\"wp-block-image size-full\"><img decoding=\"async\" src=\"https:\/\/glebdranitson24.thkit.ee\/wp\/wp-content\/uploads\/2025\/03\/Hoiva-2.png\" alt=\"\" class=\"wp-image-612\"\/><\/figure>\n<\/div><\/div>\n<\/div><\/div>\n\n\n\n<p class=\"has-base-3-color has-contrast-background-color has-text-color has-background has-link-color wp-elements-6313aa072c280b3fbfc188374404e364\"><strong>\u041f\u0430\u0440\u0441\u0438\u043d\u0433 \u0437\u0430\u0433\u043e\u043b\u043e\u0432\u043a\u043e\u0432 \u0441\u0430\u0439\u0442\u043e\u0432<\/strong><\/p>\n\n\n\n<p class=\"has-base-3-color has-contrast-background-color has-text-color has-background has-link-color wp-elements-9effff55e971c85ee3b21f62c19a232d\">VAR \u043c\u0435\u043d\u044f\u0435\u043c \u043d\u0430 LET, \u043d\u0430\u0437\u0432\u0430\u043d\u0438\u0435 \u043b\u0438\u0441\u0442\u0430 &#8212; Parsing<\/p>\n\n\n<div class=\"wp-block-syntaxhighlighter-code \"><pre class=\"brush: java; title: ; notranslate\" title=\"\">\nfunction parser() {\n  let ss = SpreadsheetApp.getActiveSpreadsheet();\n  let sheet = ss.getSheetByName(&#039;Parser&#039;);\n  let values = sheet.getDataRange().getValues();\n\n  let insertError = function(msg, numRow) {\n    sheet.getRange(numRow, 2).setValue(&#039;\u041e\u0428\u0418\u0411\u041a\u0410! &#039; + msg).setBackground(&#039;red&#039;);\n  }\n\n  let rowNumStart = 1; \/\/ \u041d\u043e\u043c\u0435\u0440 \u0441\u0442\u0440\u043e\u043a\u0438, \u0441 \u043a\u043e\u0442\u043e\u0440\u043e\u0439 \u043d\u0435\u043e\u0431\u0445\u043e\u0434\u0438\u043c\u043e \u043d\u0430\u0447\u0430\u0442\u044c \u043f\u0430\u0440\u0441\u0438\u043d\u0433\n\n  for (let i = rowNumStart; i &lt; values.length; i++) {\n\n    let url = values&#x5B;i]&#x5B;0];\n\n    try {\n\n      let response = UrlFetchApp.fetch(url, {\n      &#039;muteHttpExceptions&#039;: true,\n      &#039;validateHttpsCertificates&#039;: false,\n      &#039;followRedirects&#039;: true,\n    }); \/\/ \u0417\u0430\u0433\u0440\u0443\u0436\u0430\u0435\u043c \u0441\u0442\u0440\u0430\u043d\u0438\u0446\u0443 \u043f\u043e \u0443\u043a\u0430\u0437\u0430\u043d\u043d\u043e\u043c\u0443 url\n\n    } catch(e) {\n      insertError(e, i+1);\n      continue;\n    }\n\n\n    \/\/ https:\/\/developers.google.com\/apps-script\/reference\/url-fetch\/http-response\n    var responseCode = response.getResponseCode(); \/\/ \u041a\u043e\u0434 \u043e\u0442\u0432\u0435\u0442\u0430 \u0441\u0435\u0440\u0432\u0435\u0440\u0430\n\n    if (responseCode === 200) {\n\n      try {\n        let headers = response.getHeaders();\n        let charset = headers&#x5B;&#039;Content-Type&#039;].match(\/charset=(.*)$\/)&#x5B;1].replace(\/&#x5B;&quot;;]+\/gi, &#039;&#039;); \/\/ \u041a\u043e\u0434\u0438\u0440\u043e\u0432\u043a\u0430 \u0441\u0442\u0440\u0430\u043d\u0438\u0446\u044b\n      } catch (e) {\n        let contentForCharset = response.getContentText();\n        let charsetMatch = contentForCharset.match(\/charset=(.*?)&quot;\/);\n        let charset = (charsetMatch !== null) ? charsetMatch&#x5B;1] : &quot;UTF-8&quot;;\n      }\n\n      let content = response.getContentText(charset); \/\/ \u041f\u043e\u043b\u0443\u0447\u0430\u0435\u043c html \u043a\u043e\u0434 \u0441\u0442\u0440\u0430\u043d\u0438\u0446\u044b\n\n      \/\/ \u041f\u043e\u043b\u0443\u0447\u0430\u0435\u043c \u043d\u0430\u0437\u0432\u0430\u043d\u0438\u0435 \u043f\u043e\u0441\u0442\u0430\n      let titleMatch = content.match(\/&lt;title&#x5B;^&gt;]*&gt;\\s*(&#x5B;\\s\\S]*?)\\s*&lt;\/);\n\nif (titleMatch !== null) {\nlet title = titleMatch&#x5B;1];\n\n\/\/ \u0412\u0441\u0442\u0430\u0432\u043b\u044f\u0435\u043c \u043d\u0430\u0437\u0432\u0430\u043d\u0438\u0435 \u0432 \u0442\u0430\u0431\u043b\u0438\u0446\u0443\nsheet.getRange(i+1,2).setValue(title);\n\n} else {\ninsertError(&#039;\u041d\u0435 \u0443\u0434\u0430\u043b\u043e\u0441\u044c \u0440\u0430\u0441\u043f\u0430\u0440\u0441\u0438\u0442\u044c title.&#039;, i+1);\n}\n\n} else {\ninsertError(&#039;\u041a\u043e\u0434 \u043e\u0442\u0432\u0435\u0442\u0430 \u0441\u0435\u0440\u0432\u0435\u0440\u0430 != 200.&#039;, i+1);\n}\n\n}\n\n<\/pre><\/div>\n\n\n<p class=\"has-base-3-color has-contrast-background-color has-text-color has-background has-link-color wp-elements-ed62e51c0d024ed6bcb0df2010a36f6f\">\u0434\u043e\u0431\u0430\u0432\u0438\u043b \u0435\u0449\u0435 LOGGER \u0434\u043b\u044f \u043e\u0442\u043b\u0430\u0434\u043a\u0438, \u0447\u0442\u043e \u0431\u044b \u043f\u043e\u043a\u0430\u0437\u044b\u0432\u0430\u043b \u0432 \u043b\u043e\u0433\u0430\u0445 \u0438\u043d\u0444\u043e\u0440\u043c\u0430\u0446\u0438\u044e \u043e \u0442\u043e\u043c \u043f\u0440\u043e\u0448\u0435\u043b \u0441\u043a\u0440\u0438\u043f\u0442 \u0438\u043b\u0438 \u043d\u0435\u0442<\/p>\n\n\n\n<p class=\"has-base-3-color has-contrast-background-color has-text-color has-background has-link-color wp-elements-46a2fa9060b9dd050604bb0a76daecea\">Logger.log(&#171;\u0417\u0430\u043f\u0440\u0430\u0448\u0438\u0432\u0430\u044e URL: &#187; + url);<br>Logger.log(&#171;\u0417\u0430\u0433\u0440\u0443\u0436\u0435\u043d\u043e: &#187; + content.substring(0, 500)); \/\/ \u043f\u0435\u0440\u0432\u044b\u0435 500 \u0441\u0438\u043c\u0432\u043e\u043b\u043e\u0432<\/p>\n\n\n\n<p class=\"has-base-3-color has-contrast-background-color has-text-color has-background has-link-color wp-elements-7a25efb590998349f45aac4707a5d63e\"><strong>\u0412\u0432\u043e\u0434\u0438\u043c \u0432 url \u043d\u0430\u0437\u0432\u0430\u043d\u0438\u0435 \u0441\u0430\u0439\u0442\u0430, \u0432\u044b\u0431\u0438\u0440\u0430\u0435\u043c \u0438\u0437 \u043c\u0435\u043d\u044e &#8212;  &#171;\u0437\u0430\u043f\u0443\u0441\u0442\u0438\u0442\u044c \u043f\u0430\u0440\u0441\u0435\u0440&#187; \u043f\u043e\u0441\u043b\u0435 \u0447\u0435\u0433\u043e \u0431\u0443\u0434\u0435\u0442 \u0432\u044b\u0432\u0435\u0434\u0435\u043d title \u0441\u0430\u0439\u0442\u0430<\/strong><\/p>\n\n\n\n<figure class=\"wp-block-image size-large\"><img decoding=\"async\" src=\"https:\/\/glebdranitson24.thkit.ee\/wp\/wp-content\/uploads\/2025\/03\/parser-1024x121.png\" alt=\"\" class=\"wp-image-614\"\/><\/figure>\n\n\n\n<p>\u0414\u043e\u0440\u0430\u0431\u0430\u0442\u044b\u0432\u0430\u0435\u043c \u043a\u043e\u0434 \u0447\u0442\u043e \u0431\u044b \u043e\u043d \u043d\u0430\u0445\u043e\u0434\u0438\u043b URL<\/p>\n\n\n<div class=\"wp-block-syntaxhighlighter-code \"><pre class=\"brush: java; title: ; notranslate\" title=\"\">\nfunction parser() {\n  let ss = SpreadsheetApp.getActiveSpreadsheet();\n  let sheet = ss.getSheetByName(&#039;Parsing&#039;);\n\n  if (!sheet) {\n    SpreadsheetApp.getUi().alert(&quot;\u041e\u0448\u0438\u0431\u043a\u0430: \u041b\u0438\u0441\u0442 &#039;Parser&#039; \u043d\u0435 \u043d\u0430\u0439\u0434\u0435\u043d! \u041f\u0440\u043e\u0432\u0435\u0440\u044c\u0442\u0435 \u043d\u0430\u0437\u0432\u0430\u043d\u0438\u0435.&quot;);\n    return;\n  }\n\n  let values = sheet.getDataRange().getValues();\n  \n  let insertError = function(msg, numRow) {\n    sheet.getRange(numRow, 2).setValue(&#039;\u041e\u0428\u0418\u0411\u041a\u0410! &#039; + msg).setBackground(&#039;red&#039;);\n  }\n\n  let rowNumStart = 1; \/\/ \u041d\u0430\u0447\u0438\u043d\u0430\u0435\u043c \u0441\u043e 2-\u0439 \u0441\u0442\u0440\u043e\u043a\u0438 (\u043f\u0435\u0440\u0432\u0430\u044f - \u0437\u0430\u0433\u043e\u043b\u043e\u0432\u043e\u043a)\n\n  for (let i = rowNumStart; i &lt; values.length; i++) {\n    let url = values&#x5B;i]&#x5B;0];\n\n    try {\n      Logger.log(&quot;\u0417\u0430\u043f\u0440\u0430\u0448\u0438\u0432\u0430\u044e URL: &quot; + url);\n      let response = UrlFetchApp.fetch(url, {\n        &#039;muteHttpExceptions&#039;: true,\n        &#039;validateHttpsCertificates&#039;: false,\n        &#039;followRedirects&#039;: true,\n      });\n\n      let responseCode = response.getResponseCode();\n      if (responseCode !== 200) {\n        insertError(&#039;\u041a\u043e\u0434 \u043e\u0442\u0432\u0435\u0442\u0430 != 200 (&#039; + responseCode + &#039;)&#039;, i+1);\n        continue;\n      }\n\n      let content = response.getContentText();\n\n      let titleMatch = content.match(\/&lt;title&#x5B;^&gt;]*&gt;\\s*(&#x5B;\\s\\S]*?)\\s*&lt;\\\/title&gt;\/i);\n      let title = titleMatch ? titleMatch&#x5B;1].trim() : &quot;\u041d\u0435 \u043d\u0430\u0439\u0434\u0435\u043d\u043e&quot;;\n\n      if (!title || title.length === 0) {\n        insertError(&#039;\u041d\u0435 \u0443\u0434\u0430\u043b\u043e\u0441\u044c \u0440\u0430\u0441\u043f\u0430\u0440\u0441\u0438\u0442\u044c title.&#039;, i+1);\n      } else {\n        sheet.getRange(i+1, 2).setValue(title); \/\/ \u0417\u0430\u043f\u0438\u0441\u044b\u0432\u0430\u0435\u043c title \u0432 \u043a\u043e\u043b\u043e\u043d\u043a\u0443 B\n      }\n\n      let linkMatch = content.match(\/&lt;a\\s+(?:&#x5B;^&gt;]*?\\s+)?href=&#x5B;&quot;&#039;](https?:\\\/\\\/&#x5B;^&quot;&#039;]+)&#x5B;&quot;&#039;]\/i);\n      let firstLink = linkMatch ? linkMatch&#x5B;1] : &quot;\u041d\u0435 \u043d\u0430\u0439\u0434\u0435\u043d\u043e&quot;;\n\n      sheet.getRange(i+1, 3).setValue(firstLink); \/\/ \u0417\u0430\u043f\u0438\u0441\u044b\u0432\u0430\u0435\u043c \u043f\u0435\u0440\u0432\u0443\u044e \u043d\u0430\u0439\u0434\u0435\u043d\u043d\u0443\u044e \u0441\u0441\u044b\u043b\u043a\u0443 \u0432 \u043a\u043e\u043b\u043e\u043d\u043a\u0443 C\n\n    } catch (e) {\n      insertError(&quot;\u041e\u0448\u0438\u0431\u043a\u0430 \u0437\u0430\u043f\u0440\u043e\u0441\u0430: &quot; + e.message, i+1);\n    }\n  }\n}\n\n<\/pre><\/div>\n\n<div class=\"wp-block-syntaxhighlighter-code \"><pre class=\"brush: plain; title: ; notranslate\" title=\"\">\n  let linkMatch = content.match(\/&amp;lt;a\\s+(?:&#x5B;^&gt;]*?\\s+)?href=&#x5B;&quot;&#039;](https?:\\\/\\\/&#x5B;^&quot;&#039;]+)&#x5B;&quot;&#039;]\/i);\n  let firstLink = linkMatch ? linkMatch&#x5B;1] : &quot;\u041d\u0435 \u043d\u0430\u0439\u0434\u0435\u043d\u043e&quot;;\n\n  sheet.getRange(i+1, 3).setValue(firstLink);  \/\/\u0437\u0430\u043f\u0438\u0441\u044b\u0432\u0430\u0435\u043c \u0432 \u0421\n<\/pre><\/div>\n\n\n<p class=\"has-base-3-color has-contrast-background-color has-text-color has-background has-link-color wp-elements-c86090cb074d1fed13a8a025c862f54f\">\u0418\u0449\u0435\u043c \u043f\u0435\u0440\u0432\u0443\u044e \u0441\u0441\u044b\u043b\u043a\u0443 \u043d\u0430 \u0441\u0442\u0440\u0430\u043d\u0438\u0446\u0435 <\/p>\n\n\n\n<figure class=\"wp-block-image size-large is-style-default\"><img decoding=\"async\" src=\"https:\/\/glebdranitson24.thkit.ee\/wp\/wp-content\/uploads\/2025\/03\/12-1024x128.png\" alt=\"\" class=\"wp-image-617\" style=\"object-fit:cover\"\/><\/figure>\n\n\n\n<figure class=\"wp-block-image size-full\"><img decoding=\"async\" src=\"https:\/\/glebdranitson24.thkit.ee\/wp\/wp-content\/uploads\/2025\/03\/33.png\" alt=\"\" class=\"wp-image-618\"\/><\/figure>\n\n\n\n<p class=\"has-base-3-color has-contrast-background-color has-text-color has-background has-link-color wp-elements-07d2ff7cea22c5b477f76bd856e7d05d\">\u0418\u0449\u0435\u043c \u0437\u0430\u0433\u043e\u043b\u043e\u0432\u043e\u043a \u043f\u0435\u0440\u0432\u043e\u0433\u043e \u0443\u0440\u043e\u0432\u043d\u044f H1<\/p>\n\n\n<div class=\"wp-block-syntaxhighlighter-code \"><pre class=\"brush: plain; title: ; notranslate\" title=\"\">\n   let h1Match = content.match(\/&amp;lt;h1&#x5B;^&gt;]*&gt;\\s*(&#x5B;\\s\\S]*?)\\s*&amp;lt;\\\/h1&gt;\/i);\n      let firstHeading = h1Match ? h1Match&#x5B;1].trim() : &quot;\u041d\u0435 \u043d\u0430\u0439\u0434\u0435\u043d\u043e&quot;;\n      sheet.getRange(i+1, 4).setValue(firstHeading); \/\/ \u0417\u0430\u043f\u0438\u0441\u044b\u0432\u0430\u0435\u043c \u0432 \u043a\u043e\u043b\u043e\u043d\u043a\u0443 D\n<\/pre><\/div>\n\n\n<figure class=\"wp-block-image size-large\"><img decoding=\"async\" src=\"https:\/\/glebdranitson24.thkit.ee\/wp\/wp-content\/uploads\/2025\/03\/333-1024x688.png\" alt=\"\" class=\"wp-image-622\"\/><\/figure>\n\n\n<div class=\"wp-block-syntaxhighlighter-code \"><pre class=\"brush: plain; title: ; notranslate\" title=\"\">\nfunction parser() {\n  let ss = SpreadsheetApp.getActiveSpreadsheet();\n  let sheet = ss.getSheetByName(&#039;Parsing&#039;);\n\n  if (!sheet) {\n    SpreadsheetApp.getUi().alert(&quot;\u041e\u0448\u0438\u0431\u043a\u0430: \u041b\u0438\u0441\u0442 &#039;Parser&#039; \u043d\u0435 \u043d\u0430\u0439\u0434\u0435\u043d! \u041f\u0440\u043e\u0432\u0435\u0440\u044c\u0442\u0435 \u043d\u0430\u0437\u0432\u0430\u043d\u0438\u0435.&quot;);\n    return;\n  }\n\n  let values = sheet.getDataRange().getValues();\n  \n  let insertError = function(msg, numRow) {\n    sheet.getRange(numRow, 2).setValue(&#039;\u041e\u0428\u0418\u0411\u041a\u0410! &#039; + msg).setBackground(&#039;red&#039;);\n  }\n\n  let rowNumStart = 1; \/\/ \u041d\u0430\u0447\u0438\u043d\u0430\u0435\u043c \u0441\u043e 2-\u0439 \u0441\u0442\u0440\u043e\u043a\u0438 (\u043f\u0435\u0440\u0432\u0430\u044f - \u0437\u0430\u0433\u043e\u043b\u043e\u0432\u043e\u043a)\n\n  for (let i = rowNumStart; i &amp;lt; values.length; i++) {\n    let url = values&#x5B;i]&#x5B;0];\n\n    try {\n      Logger.log(&quot;\u0417\u0430\u043f\u0440\u0430\u0448\u0438\u0432\u0430\u044e URL: &quot; + url);\n      let response = UrlFetchApp.fetch(url, {\n        &#039;muteHttpExceptions&#039;: true,\n        &#039;validateHttpsCertificates&#039;: false,\n        &#039;followRedirects&#039;: true,\n      });\n\n      let responseCode = response.getResponseCode();\n      if (responseCode !== 200) {\n        insertError(&#039;\u041a\u043e\u0434 \u043e\u0442\u0432\u0435\u0442\u0430 != 200 (&#039; + responseCode + &#039;)&#039;, i+1);\n        continue;\n      }\n\n      let content = response.getContentText();\n\n      \/\/&amp;lt;title&gt;\n      let titleMatch = content.match(\/&amp;lt;title&#x5B;^&gt;]*&gt;\\s*(&#x5B;\\s\\S]*?)\\s*&amp;lt;\\\/title&gt;\/i);\n      let title = titleMatch ? titleMatch&#x5B;1].trim() : &quot;\u041d\u0435 \u043d\u0430\u0439\u0434\u0435\u043d\u043e&quot;;\n\n      if (!title || title.length === 0) {\n        insertError(&#039;\u041d\u0435 \u0443\u0434\u0430\u043b\u043e\u0441\u044c \u0440\u0430\u0441\u043f\u0430\u0440\u0441\u0438\u0442\u044c title.&#039;, i+1);\n      } else {\n        sheet.getRange(i+1, 2).setValue(title); \/\/ \u0417\u0430\u043f\u0438\u0441\u044b\u0432\u0430\u0435\u043c title \u0432 \u043a\u043e\u043b\u043e\u043d\u043a\u0443 B\n      }\n\n      let linkMatch = content.match(\/&amp;lt;a\\s+(?:&#x5B;^&gt;]*?\\s+)?href=&#x5B;&quot;&#039;](https?:\\\/\\\/&#x5B;^&quot;&#039;]+)&#x5B;&quot;&#039;]\/i);\n      let firstLink = linkMatch ? linkMatch&#x5B;1] : &quot;\u041d\u0435 \u043d\u0430\u0439\u0434\u0435\u043d\u043e&quot;;\n\n      sheet.getRange(i+1, 3).setValue(firstLink); \/\/ \u0417\u0430\u043f\u0438\u0441\u044b\u0432\u0430\u0435\u043c \u043f\u0435\u0440\u0432\u0443\u044e \u043d\u0430\u0439\u0434\u0435\u043d\u043d\u0443\u044e \u0441\u0441\u044b\u043b\u043a\u0443 \u0432 \u043a\u043e\u043b\u043e\u043d\u043a\u0443 C\n\n      let h1Match = content.match(\/&amp;lt;h1&#x5B;^&gt;]*&gt;\\s*(&#x5B;\\s\\S]*?)\\s*&amp;lt;\\\/h1&gt;\/i);\n      let firstHeading = h1Match ? h1Match&#x5B;1].trim() : &quot;\u041d\u0435 \u043d\u0430\u0439\u0434\u0435\u043d\u043e&quot;;\n      sheet.getRange(i+1, 4).setValue(firstHeading); \/\/ \u0417\u0430\u043f\u0438\u0441\u044b\u0432\u0430\u0435\u043c \u0432 \u043a\u043e\u043b\u043e\u043d\u043a\u0443 D\n\n    } catch (e) {\n      insertError(&quot;\u041e\u0448\u0438\u0431\u043a\u0430 \u0437\u0430\u043f\u0440\u043e\u0441\u0430: &quot; + e.message, i+1);\n    }\n  }\n<\/pre><\/div>\n\n\n<p class=\"has-base-3-color has-contrast-background-color has-text-color has-background has-link-color wp-elements-d8ca10d92a4b90a3383c70893d044ec4\">\u0414\u043e\u0440\u0430\u0431\u043e\u0442\u0430\u043b \u043c\u0435\u043d\u044e, \u043a\u043e\u0440\u0440\u0435\u043a\u0442\u043d\u043e\u0435 \u043d\u0430\u0437\u0432\u0430\u043d\u0438\u0435<\/p>\n\n\n<div class=\"wp-block-syntaxhighlighter-code \"><pre class=\"brush: plain; title: ; notranslate\" title=\"\">\n  \/\/ \u0421\u043e\u0437\u0434\u0430\u0451\u043c \u043d\u043e\u0432\u043e\u0435 \u043c\u0435\u043d\u044e\n  \/\/ https:\/\/developers.google.com\/apps-script\/reference\/base\/ui#createmenucaption\n  let ui = SpreadsheetApp.getUi();\n  ui.createMenu(&#039;Konspekti n\u00e4ited&#039;) \/\/ \u0421\u043e\u0437\u0434\u0430\u0451\u043c \u043c\u0435\u043d\u044e\n    .addItem(&#039;\u0417\u0430\u043f\u0443\u0441\u0442\u0438\u0442\u044c \u043f\u0430\u0440\u0441\u0435\u0440&#039;, &#039;parser&#039;) \/\/ \u0414\u043e\u0431\u0430\u0432\u043b\u044f\u0435\u043c \u043f\u0443\u043d\u043a\u0442 \u0434\u043b\u044f \u0437\u0430\u043f\u0443\u0441\u043a\u0430 \u0444\u0443\u043d\u043a\u0446\u0438\u0438\n    .addToUi();\n}\n<\/pre><\/div>","protected":false},"excerpt":{"rendered":"<p>\u0414\u0435\u043b\u0430\u0435\u043c \u043f\u0435\u0440\u0435\u0432\u043e\u0434\u0447\u0438\u043a \u0434\u043e\u0431\u0430\u0432\u043b\u044f\u0435\u043c \u043d\u043e\u0432\u044b\u0439 \u044f\u0437\u044b\u043a \/ \u043c\u0435\u043d\u044f\u0435\u043c \u043d\u0430\u0437\u0432\u0430\u043d\u0438\u0435 \u043b\u0438\u0441\u0442\u0430 \/ \u043c\u0435\u043d\u044f\u0435\u043c \u043f\u0435\u0440\u0435\u043c\u0435\u043d\u043d\u044b\u0435 \u0441 var \u043d\u0430 let \u0414\u043e\u0431\u0430\u0432\u0438\u043b\u0438 \u043c\u0435\u043d\u044e \u041f\u0430\u0440\u0441\u0438\u043d\u0433 \u0437\u0430\u0433\u043e\u043b\u043e\u0432\u043a\u043e\u0432 \u0441\u0430\u0439\u0442\u043e\u0432 VAR \u043c\u0435\u043d\u044f\u0435\u043c \u043d\u0430 LET, \u043d\u0430\u0437\u0432\u0430\u043d\u0438\u0435 \u043b\u0438\u0441\u0442\u0430 &#8212; Parsing \u0434\u043e\u0431\u0430\u0432\u0438\u043b \u0435\u0449\u0435 LOGGER \u0434\u043b\u044f \u043e\u0442\u043b\u0430\u0434\u043a\u0438, \u0447\u0442\u043e \u0431\u044b \u043f\u043e\u043a\u0430\u0437\u044b\u0432\u0430\u043b \u0432 \u043b\u043e\u0433\u0430\u0445 \u0438\u043d\u0444\u043e\u0440\u043c\u0430\u0446\u0438\u044e \u043e \u0442\u043e\u043c \u043f\u0440\u043e\u0448\u0435\u043b \u0441\u043a\u0440\u0438\u043f\u0442 \u0438\u043b\u0438 \u043d\u0435\u0442 Logger.log(&#171;\u0417\u0430\u043f\u0440\u0430\u0448\u0438\u0432\u0430\u044e URL: &#187; + url);Logger.log(&#171;\u0417\u0430\u0433\u0440\u0443\u0436\u0435\u043d\u043e: &#187; + content.substring(0, 500)); &#8230; <a title=\"Google Script \/ \u0440\u0430\u0431\u043e\u0442\u0430 \u0441 \u0442\u0440\u0438\u0433\u0433\u0435\u0440\u0430\u043c\u0438 onEDIT\" class=\"read-more\" href=\"https:\/\/glebdranitson24.thkit.ee\/wp\/rus\/?page_id=479\" aria-label=\"\u041f\u0440\u043e\u0447\u0438\u0442\u0430\u0442\u044c \u0431\u043e\u043b\u044c\u0448\u0435 \u043e Google Script \/ \u0440\u0430\u0431\u043e\u0442\u0430 \u0441 \u0442\u0440\u0438\u0433\u0433\u0435\u0440\u0430\u043c\u0438 onEDIT\">\u0427\u0438\u0442\u0430\u0442\u044c \u0434\u0430\u043b\u0435\u0435<\/a><\/p>\n","protected":false},"author":1,"featured_media":0,"parent":0,"menu_order":0,"comment_status":"closed","ping_status":"closed","template":"","meta":{"footnotes":""},"class_list":["post-479","page","type-page","status-publish"],"yoast_head":"<!-- This site is optimized with the Yoast SEO plugin v27.3 - https:\/\/yoast.com\/product\/yoast-seo-wordpress\/ -->\n<title>Google Script \/ \u0440\u0430\u0431\u043e\u0442\u0430 \u0441 \u0442\u0440\u0438\u0433\u0433\u0435\u0440\u0430\u043c\u0438 onEDIT - Gleb Dranitsyn \/ \u041f\u043e\u0440\u0442\u0444\u043e\u043b\u0438\u043e<\/title>\n<meta name=\"robots\" content=\"index, follow, max-snippet:-1, max-image-preview:large, max-video-preview:-1\" \/>\n<link rel=\"canonical\" href=\"https:\/\/glebdranitson24.thkit.ee\/wp\/rus\/?page_id=479\" \/>\n<meta property=\"og:locale\" content=\"ru_RU\" \/>\n<meta property=\"og:type\" content=\"article\" \/>\n<meta property=\"og:title\" content=\"Google Script \/ \u0440\u0430\u0431\u043e\u0442\u0430 \u0441 \u0442\u0440\u0438\u0433\u0433\u0435\u0440\u0430\u043c\u0438 onEDIT - Gleb Dranitsyn \/ \u041f\u043e\u0440\u0442\u0444\u043e\u043b\u0438\u043e\" \/>\n<meta property=\"og:description\" content=\"\u0414\u0435\u043b\u0430\u0435\u043c \u043f\u0435\u0440\u0435\u0432\u043e\u0434\u0447\u0438\u043a \u0434\u043e\u0431\u0430\u0432\u043b\u044f\u0435\u043c \u043d\u043e\u0432\u044b\u0439 \u044f\u0437\u044b\u043a \/ \u043c\u0435\u043d\u044f\u0435\u043c \u043d\u0430\u0437\u0432\u0430\u043d\u0438\u0435 \u043b\u0438\u0441\u0442\u0430 \/ \u043c\u0435\u043d\u044f\u0435\u043c \u043f\u0435\u0440\u0435\u043c\u0435\u043d\u043d\u044b\u0435 \u0441 var \u043d\u0430 let \u0414\u043e\u0431\u0430\u0432\u0438\u043b\u0438 \u043c\u0435\u043d\u044e \u041f\u0430\u0440\u0441\u0438\u043d\u0433 \u0437\u0430\u0433\u043e\u043b\u043e\u0432\u043a\u043e\u0432 \u0441\u0430\u0439\u0442\u043e\u0432 VAR \u043c\u0435\u043d\u044f\u0435\u043c \u043d\u0430 LET, \u043d\u0430\u0437\u0432\u0430\u043d\u0438\u0435 \u043b\u0438\u0441\u0442\u0430 &#8212; Parsing \u0434\u043e\u0431\u0430\u0432\u0438\u043b \u0435\u0449\u0435 LOGGER \u0434\u043b\u044f \u043e\u0442\u043b\u0430\u0434\u043a\u0438, \u0447\u0442\u043e \u0431\u044b \u043f\u043e\u043a\u0430\u0437\u044b\u0432\u0430\u043b \u0432 \u043b\u043e\u0433\u0430\u0445 \u0438\u043d\u0444\u043e\u0440\u043c\u0430\u0446\u0438\u044e \u043e \u0442\u043e\u043c \u043f\u0440\u043e\u0448\u0435\u043b \u0441\u043a\u0440\u0438\u043f\u0442 \u0438\u043b\u0438 \u043d\u0435\u0442 Logger.log(&#171;\u0417\u0430\u043f\u0440\u0430\u0448\u0438\u0432\u0430\u044e URL: &#187; + url);Logger.log(&#171;\u0417\u0430\u0433\u0440\u0443\u0436\u0435\u043d\u043e: &#187; + content.substring(0, 500)); ... \u0427\u0438\u0442\u0430\u0442\u044c \u0434\u0430\u043b\u0435\u0435\" \/>\n<meta property=\"og:url\" content=\"https:\/\/glebdranitson24.thkit.ee\/wp\/rus\/?page_id=479\" \/>\n<meta property=\"og:site_name\" content=\"Gleb Dranitsyn \/ \u041f\u043e\u0440\u0442\u0444\u043e\u043b\u0438\u043e\" \/>\n<meta name=\"twitter:card\" content=\"summary_large_image\" \/>\n<meta name=\"twitter:label1\" content=\"\u041f\u0440\u0438\u043c\u0435\u0440\u043d\u043e\u0435 \u0432\u0440\u0435\u043c\u044f \u0434\u043b\u044f \u0447\u0442\u0435\u043d\u0438\u044f\" \/>\n\t<meta name=\"twitter:data1\" content=\"2 \u043c\u0438\u043d\u0443\u0442\u044b\" \/>\n<script type=\"application\/ld+json\" class=\"yoast-schema-graph\">{\"@context\":\"https:\\\/\\\/schema.org\",\"@graph\":[{\"@type\":\"WebPage\",\"@id\":\"https:\\\/\\\/glebdranitson24.thkit.ee\\\/wp\\\/rus\\\/?page_id=479\",\"url\":\"https:\\\/\\\/glebdranitson24.thkit.ee\\\/wp\\\/rus\\\/?page_id=479\",\"name\":\"Google Script \\\/ \u0440\u0430\u0431\u043e\u0442\u0430 \u0441 \u0442\u0440\u0438\u0433\u0433\u0435\u0440\u0430\u043c\u0438 onEDIT - Gleb Dranitsyn \\\/ \u041f\u043e\u0440\u0442\u0444\u043e\u043b\u0438\u043e\",\"isPartOf\":{\"@id\":\"https:\\\/\\\/glebdranitson24.thkit.ee\\\/wp\\\/rus\\\/#website\"},\"primaryImageOfPage\":{\"@id\":\"https:\\\/\\\/glebdranitson24.thkit.ee\\\/wp\\\/rus\\\/?page_id=479#primaryimage\"},\"image\":{\"@id\":\"https:\\\/\\\/glebdranitson24.thkit.ee\\\/wp\\\/rus\\\/?page_id=479#primaryimage\"},\"thumbnailUrl\":\"https:\\\/\\\/glebdranitson24.thkit.ee\\\/wp\\\/wp-content\\\/uploads\\\/2025\\\/03\\\/code-2.png\",\"datePublished\":\"2025-03-20T13:28:24+00:00\",\"breadcrumb\":{\"@id\":\"https:\\\/\\\/glebdranitson24.thkit.ee\\\/wp\\\/rus\\\/?page_id=479#breadcrumb\"},\"inLanguage\":\"ru-RU\",\"potentialAction\":[{\"@type\":\"ReadAction\",\"target\":[\"https:\\\/\\\/glebdranitson24.thkit.ee\\\/wp\\\/rus\\\/?page_id=479\"]}]},{\"@type\":\"ImageObject\",\"inLanguage\":\"ru-RU\",\"@id\":\"https:\\\/\\\/glebdranitson24.thkit.ee\\\/wp\\\/rus\\\/?page_id=479#primaryimage\",\"url\":\"https:\\\/\\\/glebdranitson24.thkit.ee\\\/wp\\\/wp-content\\\/uploads\\\/2025\\\/03\\\/code-2.png\",\"contentUrl\":\"https:\\\/\\\/glebdranitson24.thkit.ee\\\/wp\\\/wp-content\\\/uploads\\\/2025\\\/03\\\/code-2.png\"},{\"@type\":\"BreadcrumbList\",\"@id\":\"https:\\\/\\\/glebdranitson24.thkit.ee\\\/wp\\\/rus\\\/?page_id=479#breadcrumb\",\"itemListElement\":[{\"@type\":\"ListItem\",\"position\":1,\"name\":\"\u0413\u043b\u0430\u0432\u043d\u0430\u044f \u0441\u0442\u0440\u0430\u043d\u0438\u0446\u0430\",\"item\":\"https:\\\/\\\/glebdranitson24.thkit.ee\\\/wp\\\/rus\\\/\"},{\"@type\":\"ListItem\",\"position\":2,\"name\":\"Google Script \\\/ \u0440\u0430\u0431\u043e\u0442\u0430 \u0441 \u0442\u0440\u0438\u0433\u0433\u0435\u0440\u0430\u043c\u0438 onEDIT\"}]},{\"@type\":\"WebSite\",\"@id\":\"https:\\\/\\\/glebdranitson24.thkit.ee\\\/wp\\\/rus\\\/#website\",\"url\":\"https:\\\/\\\/glebdranitson24.thkit.ee\\\/wp\\\/rus\\\/\",\"name\":\"Gleb Dranitsyn \\\/ \u041f\u043e\u0440\u0442\u0444\u043e\u043b\u0438\u043e\",\"description\":\"\",\"publisher\":{\"@id\":\"https:\\\/\\\/glebdranitson24.thkit.ee\\\/wp\\\/rus\\\/#organization\"},\"potentialAction\":[{\"@type\":\"SearchAction\",\"target\":{\"@type\":\"EntryPoint\",\"urlTemplate\":\"https:\\\/\\\/glebdranitson24.thkit.ee\\\/wp\\\/rus\\\/?s={search_term_string}\"},\"query-input\":{\"@type\":\"PropertyValueSpecification\",\"valueRequired\":true,\"valueName\":\"search_term_string\"}}],\"inLanguage\":\"ru-RU\"},{\"@type\":\"Organization\",\"@id\":\"https:\\\/\\\/glebdranitson24.thkit.ee\\\/wp\\\/rus\\\/#organization\",\"name\":\"Gleb Dranitsyn \\\/ \u041f\u043e\u0440\u0442\u0444\u043e\u043b\u0438\u043e\",\"url\":\"https:\\\/\\\/glebdranitson24.thkit.ee\\\/wp\\\/rus\\\/\",\"logo\":{\"@type\":\"ImageObject\",\"inLanguage\":\"ru-RU\",\"@id\":\"https:\\\/\\\/glebdranitson24.thkit.ee\\\/wp\\\/rus\\\/#\\\/schema\\\/logo\\\/image\\\/\",\"url\":\"https:\\\/\\\/glebdranitson24.thkit.ee\\\/wp\\\/rus\\\/wp-content\\\/uploads\\\/sites\\\/2\\\/2025\\\/03\\\/cropped-logo1.jpg\",\"contentUrl\":\"https:\\\/\\\/glebdranitson24.thkit.ee\\\/wp\\\/rus\\\/wp-content\\\/uploads\\\/sites\\\/2\\\/2025\\\/03\\\/cropped-logo1.jpg\",\"width\":400,\"height\":167,\"caption\":\"Gleb Dranitsyn \\\/ \u041f\u043e\u0440\u0442\u0444\u043e\u043b\u0438\u043e\"},\"image\":{\"@id\":\"https:\\\/\\\/glebdranitson24.thkit.ee\\\/wp\\\/rus\\\/#\\\/schema\\\/logo\\\/image\\\/\"}}]}<\/script>\n<!-- \/ Yoast SEO plugin. -->","yoast_head_json":{"title":"Google Script \/ \u0440\u0430\u0431\u043e\u0442\u0430 \u0441 \u0442\u0440\u0438\u0433\u0433\u0435\u0440\u0430\u043c\u0438 onEDIT - Gleb Dranitsyn \/ \u041f\u043e\u0440\u0442\u0444\u043e\u043b\u0438\u043e","robots":{"index":"index","follow":"follow","max-snippet":"max-snippet:-1","max-image-preview":"max-image-preview:large","max-video-preview":"max-video-preview:-1"},"canonical":"https:\/\/glebdranitson24.thkit.ee\/wp\/rus\/?page_id=479","og_locale":"ru_RU","og_type":"article","og_title":"Google Script \/ \u0440\u0430\u0431\u043e\u0442\u0430 \u0441 \u0442\u0440\u0438\u0433\u0433\u0435\u0440\u0430\u043c\u0438 onEDIT - Gleb Dranitsyn \/ \u041f\u043e\u0440\u0442\u0444\u043e\u043b\u0438\u043e","og_description":"\u0414\u0435\u043b\u0430\u0435\u043c \u043f\u0435\u0440\u0435\u0432\u043e\u0434\u0447\u0438\u043a \u0434\u043e\u0431\u0430\u0432\u043b\u044f\u0435\u043c \u043d\u043e\u0432\u044b\u0439 \u044f\u0437\u044b\u043a \/ \u043c\u0435\u043d\u044f\u0435\u043c \u043d\u0430\u0437\u0432\u0430\u043d\u0438\u0435 \u043b\u0438\u0441\u0442\u0430 \/ \u043c\u0435\u043d\u044f\u0435\u043c \u043f\u0435\u0440\u0435\u043c\u0435\u043d\u043d\u044b\u0435 \u0441 var \u043d\u0430 let \u0414\u043e\u0431\u0430\u0432\u0438\u043b\u0438 \u043c\u0435\u043d\u044e \u041f\u0430\u0440\u0441\u0438\u043d\u0433 \u0437\u0430\u0433\u043e\u043b\u043e\u0432\u043a\u043e\u0432 \u0441\u0430\u0439\u0442\u043e\u0432 VAR \u043c\u0435\u043d\u044f\u0435\u043c \u043d\u0430 LET, \u043d\u0430\u0437\u0432\u0430\u043d\u0438\u0435 \u043b\u0438\u0441\u0442\u0430 &#8212; Parsing \u0434\u043e\u0431\u0430\u0432\u0438\u043b \u0435\u0449\u0435 LOGGER \u0434\u043b\u044f \u043e\u0442\u043b\u0430\u0434\u043a\u0438, \u0447\u0442\u043e \u0431\u044b \u043f\u043e\u043a\u0430\u0437\u044b\u0432\u0430\u043b \u0432 \u043b\u043e\u0433\u0430\u0445 \u0438\u043d\u0444\u043e\u0440\u043c\u0430\u0446\u0438\u044e \u043e \u0442\u043e\u043c \u043f\u0440\u043e\u0448\u0435\u043b \u0441\u043a\u0440\u0438\u043f\u0442 \u0438\u043b\u0438 \u043d\u0435\u0442 Logger.log(&#171;\u0417\u0430\u043f\u0440\u0430\u0448\u0438\u0432\u0430\u044e URL: &#187; + url);Logger.log(&#171;\u0417\u0430\u0433\u0440\u0443\u0436\u0435\u043d\u043e: &#187; + content.substring(0, 500)); ... \u0427\u0438\u0442\u0430\u0442\u044c \u0434\u0430\u043b\u0435\u0435","og_url":"https:\/\/glebdranitson24.thkit.ee\/wp\/rus\/?page_id=479","og_site_name":"Gleb Dranitsyn \/ \u041f\u043e\u0440\u0442\u0444\u043e\u043b\u0438\u043e","twitter_card":"summary_large_image","twitter_misc":{"\u041f\u0440\u0438\u043c\u0435\u0440\u043d\u043e\u0435 \u0432\u0440\u0435\u043c\u044f \u0434\u043b\u044f \u0447\u0442\u0435\u043d\u0438\u044f":"2 \u043c\u0438\u043d\u0443\u0442\u044b"},"schema":{"@context":"https:\/\/schema.org","@graph":[{"@type":"WebPage","@id":"https:\/\/glebdranitson24.thkit.ee\/wp\/rus\/?page_id=479","url":"https:\/\/glebdranitson24.thkit.ee\/wp\/rus\/?page_id=479","name":"Google Script \/ \u0440\u0430\u0431\u043e\u0442\u0430 \u0441 \u0442\u0440\u0438\u0433\u0433\u0435\u0440\u0430\u043c\u0438 onEDIT - Gleb Dranitsyn \/ \u041f\u043e\u0440\u0442\u0444\u043e\u043b\u0438\u043e","isPartOf":{"@id":"https:\/\/glebdranitson24.thkit.ee\/wp\/rus\/#website"},"primaryImageOfPage":{"@id":"https:\/\/glebdranitson24.thkit.ee\/wp\/rus\/?page_id=479#primaryimage"},"image":{"@id":"https:\/\/glebdranitson24.thkit.ee\/wp\/rus\/?page_id=479#primaryimage"},"thumbnailUrl":"https:\/\/glebdranitson24.thkit.ee\/wp\/wp-content\/uploads\/2025\/03\/code-2.png","datePublished":"2025-03-20T13:28:24+00:00","breadcrumb":{"@id":"https:\/\/glebdranitson24.thkit.ee\/wp\/rus\/?page_id=479#breadcrumb"},"inLanguage":"ru-RU","potentialAction":[{"@type":"ReadAction","target":["https:\/\/glebdranitson24.thkit.ee\/wp\/rus\/?page_id=479"]}]},{"@type":"ImageObject","inLanguage":"ru-RU","@id":"https:\/\/glebdranitson24.thkit.ee\/wp\/rus\/?page_id=479#primaryimage","url":"https:\/\/glebdranitson24.thkit.ee\/wp\/wp-content\/uploads\/2025\/03\/code-2.png","contentUrl":"https:\/\/glebdranitson24.thkit.ee\/wp\/wp-content\/uploads\/2025\/03\/code-2.png"},{"@type":"BreadcrumbList","@id":"https:\/\/glebdranitson24.thkit.ee\/wp\/rus\/?page_id=479#breadcrumb","itemListElement":[{"@type":"ListItem","position":1,"name":"\u0413\u043b\u0430\u0432\u043d\u0430\u044f \u0441\u0442\u0440\u0430\u043d\u0438\u0446\u0430","item":"https:\/\/glebdranitson24.thkit.ee\/wp\/rus\/"},{"@type":"ListItem","position":2,"name":"Google Script \/ \u0440\u0430\u0431\u043e\u0442\u0430 \u0441 \u0442\u0440\u0438\u0433\u0433\u0435\u0440\u0430\u043c\u0438 onEDIT"}]},{"@type":"WebSite","@id":"https:\/\/glebdranitson24.thkit.ee\/wp\/rus\/#website","url":"https:\/\/glebdranitson24.thkit.ee\/wp\/rus\/","name":"Gleb Dranitsyn \/ \u041f\u043e\u0440\u0442\u0444\u043e\u043b\u0438\u043e","description":"","publisher":{"@id":"https:\/\/glebdranitson24.thkit.ee\/wp\/rus\/#organization"},"potentialAction":[{"@type":"SearchAction","target":{"@type":"EntryPoint","urlTemplate":"https:\/\/glebdranitson24.thkit.ee\/wp\/rus\/?s={search_term_string}"},"query-input":{"@type":"PropertyValueSpecification","valueRequired":true,"valueName":"search_term_string"}}],"inLanguage":"ru-RU"},{"@type":"Organization","@id":"https:\/\/glebdranitson24.thkit.ee\/wp\/rus\/#organization","name":"Gleb Dranitsyn \/ \u041f\u043e\u0440\u0442\u0444\u043e\u043b\u0438\u043e","url":"https:\/\/glebdranitson24.thkit.ee\/wp\/rus\/","logo":{"@type":"ImageObject","inLanguage":"ru-RU","@id":"https:\/\/glebdranitson24.thkit.ee\/wp\/rus\/#\/schema\/logo\/image\/","url":"https:\/\/glebdranitson24.thkit.ee\/wp\/rus\/wp-content\/uploads\/sites\/2\/2025\/03\/cropped-logo1.jpg","contentUrl":"https:\/\/glebdranitson24.thkit.ee\/wp\/rus\/wp-content\/uploads\/sites\/2\/2025\/03\/cropped-logo1.jpg","width":400,"height":167,"caption":"Gleb Dranitsyn \/ \u041f\u043e\u0440\u0442\u0444\u043e\u043b\u0438\u043e"},"image":{"@id":"https:\/\/glebdranitson24.thkit.ee\/wp\/rus\/#\/schema\/logo\/image\/"}}]}},"_links":{"self":[{"href":"https:\/\/glebdranitson24.thkit.ee\/wp\/rus\/index.php?rest_route=\/wp\/v2\/pages\/479","targetHints":{"allow":["GET"]}}],"collection":[{"href":"https:\/\/glebdranitson24.thkit.ee\/wp\/rus\/index.php?rest_route=\/wp\/v2\/pages"}],"about":[{"href":"https:\/\/glebdranitson24.thkit.ee\/wp\/rus\/index.php?rest_route=\/wp\/v2\/types\/page"}],"author":[{"embeddable":true,"href":"https:\/\/glebdranitson24.thkit.ee\/wp\/rus\/index.php?rest_route=\/wp\/v2\/users\/1"}],"replies":[{"embeddable":true,"href":"https:\/\/glebdranitson24.thkit.ee\/wp\/rus\/index.php?rest_route=%2Fwp%2Fv2%2Fcomments&post=479"}],"version-history":[{"count":1,"href":"https:\/\/glebdranitson24.thkit.ee\/wp\/rus\/index.php?rest_route=\/wp\/v2\/pages\/479\/revisions"}],"predecessor-version":[{"id":480,"href":"https:\/\/glebdranitson24.thkit.ee\/wp\/rus\/index.php?rest_route=\/wp\/v2\/pages\/479\/revisions\/480"}],"wp:attachment":[{"href":"https:\/\/glebdranitson24.thkit.ee\/wp\/rus\/index.php?rest_route=%2Fwp%2Fv2%2Fmedia&parent=479"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}