{"id":16895,"date":"2023-04-11T16:15:54","date_gmt":"2023-04-11T12:45:54","guid":{"rendered":"https:\/\/nabfollower.com\/blog\/create-a-useful-newsletter-automation-with-node-and-google-spreadsheet-33e\/"},"modified":"2023-04-11T16:15:54","modified_gmt":"2023-04-11T12:45:54","slug":"create-a-useful-newsletter-automation-with-node-and-google-spreadsheet-33e","status":"publish","type":"post","link":"https:\/\/nabfollower.com\/blog\/create-a-useful-newsletter-automation-with-node-and-google-spreadsheet-33e\/","title":{"rendered":"\u06cc\u06a9 \u0627\u062a\u0648\u0645\u0627\u0633\u06cc\u0648\u0646 \u062e\u0628\u0631\u0646\u0627\u0645\u0647 \u0645\u0641\u06cc\u062f \u0628\u0627 Node \u0648 Google Spreadsheet \u0627\u06cc\u062c\u0627\u062f \u06a9\u0646\u06cc\u062f \ud83e\uddd1\u200d\ud83d\udcbb"},"content":{"rendered":"<div data-article-id=\"1428400\" id=\"article-body\">\n<p>\u0633\u0644\u0627\u0645 \u0628\u0647 \u0647\u0645\u0647 \ud83d\udc4b\u060c<\/p>\n<p>\u0627\u0645\u0631\u0648\u0632 \u0628\u0647 \u0634\u0645\u0627 \u0646\u0634\u0627\u0646 \u0645\u06cc \u062f\u0647\u0645 \u06a9\u0647 \u0686\u06af\u0648\u0646\u0647 \u0627\u062e\u06cc\u0631\u0627\u064b \u0627\u0632 Mailchimp \u0628\u0647 \u06cc\u06a9 \u0631\u0627\u0647 \u062d\u0644 \u062f\u0627\u062e\u0644\u06cc \u062a\u063a\u06cc\u06cc\u0631 \u062f\u0627\u062f\u0647 \u0627\u0645 <strong>\u0628\u0631\u0627\u06cc \u0630\u062e\u06cc\u0631\u0647 \u0627\u06cc\u0645\u06cc\u0644 \u0647\u0627\u06cc \u0645\u0646<\/strong> \u0628\u0627 Node API \u0648 Google Spreadsheet.<\/p>\n<p>\u062f\u0631 \u0627\u06cc\u0646\u062c\u0627 \u0646\u062d\u0648\u0647 \u0627\u0633\u062a\u0641\u0627\u062f\u0647 \u0631\u0627 \u062e\u0648\u0627\u0647\u06cc\u0645 \u062f\u06cc\u062f <strong>Recaptcha<\/strong> \u0648 \u062a\u0639\u0627\u0645\u0644 \u0628\u0627 a <strong>\u0635\u0641\u062d\u0647 \u06af\u0633\u062a\u0631\u062f\u0647 \u06af\u0648\u06af\u0644<\/strong><\/p>\n<p>\u0628\u0631\u0627\u06cc \u0627\u06cc\u0646 \u0622\u0645\u0648\u0632\u0634\u060c \u0645\u0646 \u0628\u0647 \u0635\u0648\u0631\u062a \u062f\u0627\u062e\u0644\u06cc \u0627\u0632 \u0628\u0631\u0646\u0627\u0645\u0647 \u0633\u0646\u062f\u0628\u0627\u06a9\u0633 \u062e\u0648\u062f\u060c Znote \u0628\u0631\u0627\u06cc \u0646\u0645\u0648\u0646\u0647 \u0633\u0627\u0632\u06cc\u060c \u0627\u0633\u062a\u0642\u0631\u0627\u0631 \u0648 \u0628\u0632\u0631\u06af \u06a9\u0631\u062f\u0646 \u062a\u0645\u0627\u0645 \u06a9\u0627\u0631\u0647\u0627\u06cc\u0645 \u0627\u0633\u062a\u0641\u0627\u062f\u0647 \u0645\u06cc \u06a9\u0646\u0645.  \u062f\u0631 \u067e\u0627\u06cc\u0627\u0646 \u067e\u06cc\u0648\u0646\u062f \u062f\u0633\u062a\u0648\u0631 \u067e\u062e\u062a \u0642\u0627\u0628\u0644 \u06a9\u067e\u06cc \u0631\u0627 \u0645\u0633\u062a\u0642\u06cc\u0645\u0627\u064b \u062f\u0631 \u0628\u0631\u0646\u0627\u0645\u0647 \u062e\u0648\u0627\u0647\u06cc\u062f \u06cc\u0627\u0641\u062a\u060c \u062f\u0631 \u063a\u06cc\u0631 \u0627\u06cc\u0646 \u0635\u0648\u0631\u062a \u0645\u0634\u06a9\u0644\u06cc \u0627\u0632 \u0627\u0628\u0632\u0627\u0631 \u0645\u0648\u0631\u062f \u0639\u0644\u0627\u0642\u0647 \u062e\u0648\u062f \u0627\u0633\u062a\u0641\u0627\u062f\u0647 \u0646\u06a9\u0646\u06cc\u062f<\/p>\n<div id=\"ez-toc-container\" class=\"ez-toc-v2_0_81 counter-hierarchy ez-toc-counter-rtl ez-toc-grey ez-toc-container-direction\">\n<div class=\"ez-toc-title-container\">\n<p class=\"ez-toc-title\" style=\"cursor:inherit\">\u0641\u0647\u0631\u0633\u062a \u0645\u0637\u0627\u0644\u0628<\/p>\n<span class=\"ez-toc-title-toggle\"><a href=\"#\" class=\"ez-toc-pull-right ez-toc-btn ez-toc-btn-xs ez-toc-btn-default ez-toc-toggle\" aria-label=\"Toggle Table of Content\"><span class=\"ez-toc-js-icon-con\"><span class=\"\"><span class=\"eztoc-hide\" style=\"display:none;\">Toggle<\/span><span class=\"ez-toc-icon-toggle-span\"><svg style=\"fill: #999;color:#999\" xmlns=\"http:\/\/www.w3.org\/2000\/svg\" class=\"list-377408\" width=\"20px\" height=\"20px\" viewBox=\"0 0 24 24\" fill=\"none\"><path d=\"M6 6H4v2h2V6zm14 0H8v2h12V6zM4 11h2v2H4v-2zm16 0H8v2h12v-2zM4 16h2v2H4v-2zm16 0H8v2h12v-2z\" fill=\"currentColor\"><\/path><\/svg><svg style=\"fill: #999;color:#999\" class=\"arrow-unsorted-368013\" xmlns=\"http:\/\/www.w3.org\/2000\/svg\" width=\"10px\" height=\"10px\" viewBox=\"0 0 24 24\" version=\"1.2\" baseProfile=\"tiny\"><path d=\"M18.2 9.3l-6.2-6.3-6.2 6.3c-.2.2-.3.4-.3.7s.1.5.3.7c.2.2.4.3.7.3h11c.3 0 .5-.1.7-.3.2-.2.3-.5.3-.7s-.1-.5-.3-.7zM5.8 14.7l6.2 6.3 6.2-6.3c.2-.2.3-.5.3-.7s-.1-.5-.3-.7c-.2-.2-.4-.3-.7-.3h-11c-.3 0-.5.1-.7.3-.2.2-.3.5-.3.7s.1.5.3.7z\"\/><\/svg><\/span><\/span><\/span><\/a><\/span><\/div>\n<nav><ul class='ez-toc-list ez-toc-list-level-1 ' ><li class='ez-toc-page-1 ez-toc-heading-level-2'><a class=\"ez-toc-link ez-toc-heading-1\" href=\"https:\/\/nabfollower.com\/blog\/create-a-useful-newsletter-automation-with-node-and-google-spreadsheet-33e\/#%DA%86%D8%B7%D9%88%D8%B1_%DA%A9%D8%A7%D8%B1_%D9%85%DB%8C%DA%A9%D9%86%D8%AF%D8%9F\" >\u0686\u0637\u0648\u0631 \u06a9\u0627\u0631 \u0645\u06cc\u06a9\u0646\u062f\u061f<\/a><\/li><li class='ez-toc-page-1 ez-toc-heading-level-2'><a class=\"ez-toc-link ez-toc-heading-2\" href=\"https:\/\/nabfollower.com\/blog\/create-a-useful-newsletter-automation-with-node-and-google-spreadsheet-33e\/#%D9%BE%DB%8C%D8%B4_%D9%86%DB%8C%D8%A7%D8%B2%D9%87%D8%A7\" >\u067e\u06cc\u0634 \u0646\u06cc\u0627\u0632\u0647\u0627<\/a><ul class='ez-toc-list-level-3' ><li class='ez-toc-heading-level-3'><a class=\"ez-toc-link ez-toc-heading-3\" href=\"https:\/\/nabfollower.com\/blog\/create-a-useful-newsletter-automation-with-node-and-google-spreadsheet-33e\/#%DB%8C%DA%A9_%DA%A9%D9%BE%DA%86%D8%A7_%D8%A7%DB%8C%D8%AC%D8%A7%D8%AF_%DA%A9%D9%86%DB%8C%D8%AF\" >\u06cc\u06a9 \u06a9\u067e\u0686\u0627 \u0627\u06cc\u062c\u0627\u062f \u06a9\u0646\u06cc\u062f<\/a><\/li><li class='ez-toc-page-1 ez-toc-heading-level-3'><a class=\"ez-toc-link ez-toc-heading-4\" href=\"https:\/\/nabfollower.com\/blog\/create-a-useful-newsletter-automation-with-node-and-google-spreadsheet-33e\/#%D8%B5%D9%81%D8%AD%D9%87_%DA%AF%D8%B3%D8%AA%D8%B1%D8%AF%D9%87_%DA%AF%D9%88%DA%AF%D9%84\" >\u0635\u0641\u062d\u0647 \u06af\u0633\u062a\u0631\u062f\u0647 \u06af\u0648\u06af\u0644<\/a><\/li><li class='ez-toc-page-1 ez-toc-heading-level-3'><a class=\"ez-toc-link ez-toc-heading-5\" href=\"https:\/\/nabfollower.com\/blog\/create-a-useful-newsletter-automation-with-node-and-google-spreadsheet-33e\/#Doc\" >Doc<\/a><\/li><\/ul><\/li><li class='ez-toc-page-1 ez-toc-heading-level-2'><a class=\"ez-toc-link ez-toc-heading-6\" href=\"https:\/\/nabfollower.com\/blog\/create-a-useful-newsletter-automation-with-node-and-google-spreadsheet-33e\/#%D9%86%D8%B5%D8%A8_%D9%88_%D8%B1%D8%A7%D9%87_%D8%A7%D9%86%D8%AF%D8%A7%D8%B2%DB%8C\" >\u0646\u0635\u0628 \u0648 \u0631\u0627\u0647 \u0627\u0646\u062f\u0627\u0632\u06cc<\/a><\/li><li class='ez-toc-page-1 ez-toc-heading-level-2'><a class=\"ez-toc-link ez-toc-heading-7\" href=\"https:\/\/nabfollower.com\/blog\/create-a-useful-newsletter-automation-with-node-and-google-spreadsheet-33e\/#%DA%A9%D8%AF_%D8%AE%D8%A8%D8%B1%D9%86%D8%A7%D9%85%D9%87\" >\u06a9\u062f \u062e\u0628\u0631\u0646\u0627\u0645\u0647<\/a><\/li><li class='ez-toc-page-1 ez-toc-heading-level-2'><a class=\"ez-toc-link ez-toc-heading-8\" href=\"https:\/\/nabfollower.com\/blog\/create-a-useful-newsletter-automation-with-node-and-google-spreadsheet-33e\/#%D8%B5%D9%81%D8%AD%D9%87_%DA%AF%D8%B3%D8%AA%D8%B1%D8%AF%D9%87_%DA%AF%D9%88%DA%AF%D9%84-2\" >\u0635\u0641\u062d\u0647 \u06af\u0633\u062a\u0631\u062f\u0647 \u06af\u0648\u06af\u0644<\/a><\/li><li class='ez-toc-page-1 ez-toc-heading-level-2'><a class=\"ez-toc-link ez-toc-heading-9\" href=\"https:\/\/nabfollower.com\/blog\/create-a-useful-newsletter-automation-with-node-and-google-spreadsheet-33e\/#%D9%87%D9%85%D9%87_%D8%B1%D8%A7_%D8%A8%D9%87_%D9%87%D9%85_%D9%88%D8%B5%D9%84_%DA%A9%D9%86%DB%8C%D8%AF\" >\u0647\u0645\u0647 \u0631\u0627 \u0628\u0647 \u0647\u0645 \u0648\u0635\u0644 \u06a9\u0646\u06cc\u062f<\/a><\/li><li class='ez-toc-page-1 ez-toc-heading-level-2'><a class=\"ez-toc-link ez-toc-heading-10\" href=\"https:\/\/nabfollower.com\/blog\/create-a-useful-newsletter-automation-with-node-and-google-spreadsheet-33e\/#%D8%B3%D9%BE%D8%B3_%F0%9F%8E%89%F0%9F%A5%B3\" >\u0633\u067e\u0633 \ud83c\udf89\ud83e\udd73<\/a><\/li><li class='ez-toc-page-1 ez-toc-heading-level-2'><a class=\"ez-toc-link ez-toc-heading-11\" href=\"https:\/\/nabfollower.com\/blog\/create-a-useful-newsletter-automation-with-node-and-google-spreadsheet-33e\/#%D8%A8%D9%87_%D8%B7%D9%88%D8%B1_%D8%AE%D9%84%D8%A7%D8%B5%D9%87\" >\u0628\u0647 \u0637\u0648\u0631 \u062e\u0644\u0627\u0635\u0647<\/a><\/li><li class='ez-toc-page-1 ez-toc-heading-level-2'><a class=\"ez-toc-link ez-toc-heading-12\" href=\"https:\/\/nabfollower.com\/blog\/create-a-useful-newsletter-automation-with-node-and-google-spreadsheet-33e\/#%D8%A8%D8%B1%D9%88_%D8%AC%D9%84%D9%88%D8%AA%D8%B1\" >\u0628\u0631\u0648 \u062c\u0644\u0648\u062a\u0631<\/a><\/li><\/ul><\/nav><\/div>\n<h2><span class=\"ez-toc-section\" id=\"%DA%86%D8%B7%D9%88%D8%B1_%DA%A9%D8%A7%D8%B1_%D9%85%DB%8C%DA%A9%D9%86%D8%AF%D8%9F\"><\/span>\n<p>  \u0686\u0637\u0648\u0631 \u06a9\u0627\u0631 \u0645\u06cc\u06a9\u0646\u062f\u061f<br \/>\n<span class=\"ez-toc-section-end\"><\/span><\/h2>\n<p>\u0645\u0627 \u06cc\u06a9 Node Backend \u0628\u0627 Express \u0648 Recaptcha \u062e\u0648\u0627\u0647\u06cc\u0645 \u0633\u0627\u062e\u062a <em>(\u0628\u0631\u0627\u06cc \u062c\u0644\u0648\u06af\u06cc\u0631\u06cc \u0627\u0632 \u0627\u0633\u067e\u0645)<\/em>.  \u0627\u06cc\u0645\u06cc\u0644 \u0647\u0627\u06cc \u062f\u0631\u06cc\u0627\u0641\u062a\u06cc \u0627\u0632 \u06cc\u06a9 \u0641\u0631\u0645 HTML \u0627\u0631\u0633\u0627\u0644 \u0634\u062f\u0647 \u0648 \u0628\u0647 \u0635\u0641\u062d\u0647 \u06af\u0633\u062a\u0631\u062f\u0647 Google \u0627\u0631\u0633\u0627\u0644 \u0645\u06cc \u0634\u0648\u0646\u062f.<\/p>\n<p><\/p>\n<hr\/>\n<h2><span class=\"ez-toc-section\" id=\"%D9%BE%DB%8C%D8%B4_%D9%86%DB%8C%D8%A7%D8%B2%D9%87%D8%A7\"><\/span>\n<p>  \u067e\u06cc\u0634 \u0646\u06cc\u0627\u0632\u0647\u0627<br \/>\n<span class=\"ez-toc-section-end\"><\/span><\/h2>\n<h3><span class=\"ez-toc-section\" id=\"%DB%8C%DA%A9_%DA%A9%D9%BE%DA%86%D8%A7_%D8%A7%DB%8C%D8%AC%D8%A7%D8%AF_%DA%A9%D9%86%DB%8C%D8%AF\"><\/span>\n<p>  \u06cc\u06a9 \u06a9\u067e\u0686\u0627 \u0627\u06cc\u062c\u0627\u062f \u06a9\u0646\u06cc\u062f<br \/>\n<span class=\"ez-toc-section-end\"><\/span><\/h3>\n<p>https:\/\/www.google.com\/recaptcha\/admin<\/p>\n<ul>\n<li>\u06cc\u06a9 \u0633\u0627\u06cc\u062a \u062c\u062f\u06cc\u062f \u0627\u06cc\u062c\u0627\u062f \u06a9\u0646\u06cc\u062f<\/li>\n<li>\u0627\u0636\u0627\u0641\u0647 \u06a9\u0631\u062f\u0646 <strong>\u0645\u06cc\u0632\u0628\u0627\u0646 \u0645\u062d\u0644\u06cc<\/strong> \u0648 \u062f\u0627\u0645\u0646\u0647 \u0648\u0628 \u0633\u0627\u06cc\u062a \u0634\u0645\u0627 \u062f\u0631 \u0644\u06cc\u0633\u062a \u062f\u0627\u0645\u0646\u0647 \u0647\u0627<br \/>\n<img decoding=\"async\" src=\"https:\/\/nabfollower.com\/blog\/wp-content\/uploads\/2023\/04\/1681217153_495_\u06cc\u06a9-\u0627\u062a\u0648\u0645\u0627\u0633\u06cc\u0648\u0646-\u062e\u0628\u0631\u0646\u0627\u0645\u0647-\u0645\u0641\u06cc\u062f-\u0628\u0627-Node-\u0648-Google-Spreadsheet-\u0627\u06cc\u062c\u0627\u062f.png\" alt=\"\u0644\u06cc\u0633\u062a \u062f\u0627\u0645\u0646\u0647 \u0647\u0627\u06cc \u0627\u0633\u06a9\u0631\u06cc\u0646 \u0634\u0627\u062a\" loading=\"lazy\" width=\"612\" height=\"113\" title=\"\">\n<\/li>\n<li>\u06a9\u0644\u06cc\u062f\u0647\u0627\u06cc \u062e\u0648\u062f \u0631\u0627 \u06a9\u067e\u06cc \u06a9\u0646\u06cc\u062f (\u0639\u0645\u0648\u0645\u06cc \u0648 \u062e\u0635\u0648\u0635\u06cc)<br \/>\n<img decoding=\"async\" src=\"https:\/\/nabfollower.com\/blog\/wp-content\/uploads\/2023\/04\/1681217153_188_\u06cc\u06a9-\u0627\u062a\u0648\u0645\u0627\u0633\u06cc\u0648\u0646-\u062e\u0628\u0631\u0646\u0627\u0645\u0647-\u0645\u0641\u06cc\u062f-\u0628\u0627-Node-\u0648-Google-Spreadsheet-\u0627\u06cc\u062c\u0627\u062f.png\" alt=\"\u0627\u0633\u06a9\u0631\u06cc\u0646 \u0634\u0627\u062a \u06a9\u0644\u06cc\u062f\u0647\u0627\u06cc recaptcha\" loading=\"lazy\" width=\"800\" height=\"288\" title=\"\">\n<\/li>\n<\/ul>\n<h3><span class=\"ez-toc-section\" id=\"%D8%B5%D9%81%D8%AD%D9%87_%DA%AF%D8%B3%D8%AA%D8%B1%D8%AF%D9%87_%DA%AF%D9%88%DA%AF%D9%84\"><\/span>\n<p>  \u0635\u0641\u062d\u0647 \u06af\u0633\u062a\u0631\u062f\u0647 \u06af\u0648\u06af\u0644<br \/>\n<span class=\"ez-toc-section-end\"><\/span><\/h3>\n<p>\ud83d\udc49 Sheet API \u062e\u0648\u062f \u0631\u0627 \u0641\u0639\u0627\u0644 \u06a9\u0646\u06cc\u062f<\/p>\n<p><strong>\u0628\u0647 Google Developers Console \u0628\u0631\u0648\u06cc\u062f<\/strong><\/p>\n<ul>\n<li>\u067e\u0631\u0648\u0698\u0647 \u062e\u0648\u062f \u0631\u0627 \u0627\u0646\u062a\u062e\u0627\u0628 \u06a9\u0646\u06cc\u062f \u06cc\u0627 \u06cc\u06a9 \u067e\u0631\u0648\u0698\u0647 \u062c\u062f\u06cc\u062f \u0627\u06cc\u062c\u0627\u062f \u06a9\u0646\u06cc\u062f (\u0648 \u0633\u067e\u0633 \u0622\u0646 \u0631\u0627 \u0627\u0646\u062a\u062e\u0627\u0628 \u06a9\u0646\u06cc\u062f)<br \/>\n<img decoding=\"async\" src=\"https:\/\/nabfollower.com\/blog\/wp-content\/uploads\/2023\/04\/1681217153_429_\u06cc\u06a9-\u0627\u062a\u0648\u0645\u0627\u0633\u06cc\u0648\u0646-\u062e\u0628\u0631\u0646\u0627\u0645\u0647-\u0645\u0641\u06cc\u062f-\u0628\u0627-Node-\u0648-Google-Spreadsheet-\u0627\u06cc\u062c\u0627\u062f.png\" alt=\"\u0627\u06cc\u062c\u0627\u062f \u0641\u0631\u0645 \u067e\u0631\u0648\u0698\u0647 \u062c\u062f\u06cc\u062f\" loading=\"lazy\" width=\"597\" height=\"421\" title=\"\">\n<\/li>\n<li>Sheets API \u0631\u0627 \u0628\u0631\u0627\u06cc \u067e\u0631\u0648\u0698\u0647 \u062e\u0648\u062f \u0641\u0639\u0627\u0644 \u06a9\u0646\u06cc\u062f<\/li>\n<li>\u062f\u0631 \u0646\u0648\u0627\u0631 \u06a9\u0646\u0627\u0631\u06cc \u0633\u0645\u062a \u0686\u067e\u060c APIs &#038; Services > Library \u0631\u0627 \u0627\u0646\u062a\u062e\u0627\u0628 \u06a9\u0646\u06cc\u062f<\/li>\n<li>\u062c\u0633\u062a\u062c\u0648 \u0628\u0631\u0627\u06cc &#8220;\u0628\u0631\u06af&#8221;<\/li>\n<li>\u0631\u0648\u06cc &#8220;Google Sheets API&#8221; \u06a9\u0644\u06cc\u06a9 \u06a9\u0646\u06cc\u062f<\/li>\n<li>\u0631\u0648\u06cc \u062f\u06a9\u0645\u0647 \u0622\u0628\u06cc &#8220;\u0641\u0639\u0627\u0644 \u06a9\u0631\u062f\u0646&#8221; \u06a9\u0644\u06cc\u06a9 \u06a9\u0646\u06cc\u062f<br \/>\n<img decoding=\"async\" src=\"https:\/\/nabfollower.com\/blog\/wp-content\/uploads\/2023\/04\/1681217154_173_\u06cc\u06a9-\u0627\u062a\u0648\u0645\u0627\u0633\u06cc\u0648\u0646-\u062e\u0628\u0631\u0646\u0627\u0645\u0647-\u0645\u0641\u06cc\u062f-\u0628\u0627-Node-\u0648-Google-Spreadsheet-\u0627\u06cc\u062c\u0627\u062f.png\" alt=\"Google Spreadsheet API \u0631\u0627 \u0641\u0639\u0627\u0644 \u06a9\u0646\u06cc\u062f\" loading=\"lazy\" width=\"769\" height=\"351\" title=\"\">\n<\/li>\n<\/ul>\n<p><strong>\u062f\u0633\u062a\u0648\u0631\u0627\u0644\u0639\u0645\u0644 \u0647\u0627\u06cc \u0631\u0627\u0647 \u0627\u0646\u062f\u0627\u0632\u06cc \u0628\u0631\u0627\u06cc \u062d\u0633\u0627\u0628 \u062e\u062f\u0645\u0627\u062a<\/strong><br \/>\u0645\u0631\u0627\u062d\u0644 \u0628\u0627\u0644\u0627 \u0631\u0627 \u0628\u0631\u0627\u06cc \u0631\u0627\u0647\u200c\u0627\u0646\u062f\u0627\u0632\u06cc \u067e\u0631\u0648\u0698\u0647 \u0648 \u0641\u0639\u0627\u0644 \u06a9\u0631\u062f\u0646 Sheets API \u062f\u0646\u0628\u0627\u0644 \u06a9\u0646\u06cc\u062f<\/p>\n<ol>\n<li>\n<strong>\u06cc\u06a9 \u062d\u0633\u0627\u0628 \u06a9\u0627\u0631\u0628\u0631\u06cc \u0627\u06cc\u062c\u0627\u062f \u06a9\u0646\u06cc\u062f<\/strong> \u0628\u0631\u0627\u06cc \u067e\u0631\u0648\u0698\u0647 \u0634\u0645\u0627<\/p>\n<ul>\n<li>\u062f\u0631 \u0646\u0648\u0627\u0631 \u06a9\u0646\u0627\u0631\u06cc \u0633\u0645\u062a \u0686\u067e\u060c APIs &#038; Services > Credentials \u0631\u0627 \u0627\u0646\u062a\u062e\u0627\u0628 \u06a9\u0646\u06cc\u062f<\/li>\n<li>\u0631\u0648\u06cc \u0622\u0628\u06cc \u0631\u0646\u06af &#8220;+ CREATE CREDENTIALS&#8221; \u06a9\u0644\u06cc\u06a9 \u06a9\u0646\u06cc\u062f \u0648 \u06af\u0632\u06cc\u0646\u0647 &#8220;Service account&#8221; \u0631\u0627 \u0627\u0646\u062a\u062e\u0627\u0628 \u06a9\u0646\u06cc\u062f<\/li>\n<li>\u0646\u0627\u0645\u060c \u062a\u0648\u0636\u06cc\u062d\u0627\u062a \u0631\u0627 \u0648\u0627\u0631\u062f \u06a9\u0646\u06cc\u062f\u060c \u0631\u0648\u06cc &#8220;\u0627\u06cc\u062c\u0627\u062f&#8221; \u06a9\u0644\u06cc\u06a9 \u06a9\u0646\u06cc\u062f<\/li>\n<li>\u0645\u06cc\u200c\u062a\u0648\u0627\u0646\u06cc\u062f \u0627\u0632 \u0645\u062c\u0648\u0632\u0647\u0627 \u0635\u0631\u0641\u0646\u0638\u0631 \u06a9\u0646\u06cc\u062f\u060c \u0631\u0648\u06cc \u00ab\u0627\u062f\u0627\u0645\u0647\u00bb \u06a9\u0644\u06cc\u06a9 \u06a9\u0646\u06cc\u062f<br \/>\n<img decoding=\"async\" src=\"https:\/\/nabfollower.com\/blog\/wp-content\/uploads\/2023\/04\/1681217154_195_\u06cc\u06a9-\u0627\u062a\u0648\u0645\u0627\u0633\u06cc\u0648\u0646-\u062e\u0628\u0631\u0646\u0627\u0645\u0647-\u0645\u0641\u06cc\u062f-\u0628\u0627-Node-\u0648-Google-Spreadsheet-\u0627\u06cc\u062c\u0627\u062f.png\" alt=\"\u0627\u0633\u06a9\u0631\u06cc\u0646 \u0634\u0627\u062a \u0627\u0639\u062a\u0628\u0627\u0631\u0646\u0627\u0645\u0647 \u0627\u06cc\u062c\u0627\u062f \u06a9\u0646\u06cc\u062f\" loading=\"lazy\" width=\"800\" height=\"688\" title=\"\">\n<\/li>\n<\/ul>\n<\/li>\n<li>\u0631\u0648\u06cc &#8220;+&#8221; \u06a9\u0644\u06cc\u06a9 \u06a9\u0646\u06cc\u062f <strong>\u0627\u06cc\u062c\u0627\u062f \u06a9\u0644\u06cc\u062f<\/strong>&#8221; \u062f\u06a9\u0645\u0647\n<ul>\n<li>\u06af\u0632\u06cc\u0646\u0647 \u0646\u0648\u0639 \u06a9\u0644\u06cc\u062f &#8220;JSON&#8221; \u0631\u0627 \u0627\u0646\u062a\u062e\u0627\u0628 \u06a9\u0646\u06cc\u062f<\/li>\n<li>\u0631\u0648\u06cc \u062f\u06a9\u0645\u0647 &#8220;\u0627\u06cc\u062c\u0627\u062f&#8221; \u06a9\u0644\u06cc\u06a9 \u06a9\u0646\u06cc\u062f<\/li>\n<li>\u0641\u0627\u06cc\u0644 \u06a9\u0644\u06cc\u062f JSON \u0634\u0645\u0627 \u062a\u0648\u0644\u06cc\u062f \u0648 \u062f\u0631 \u062f\u0633\u062a\u06af\u0627\u0647 \u0634\u0645\u0627 \u062f\u0627\u0646\u0644\u0648\u062f \u0645\u06cc \u0634\u0648\u062f (\u0627\u06cc\u0646 \u062a\u0646\u0647\u0627 \u06a9\u067e\u06cc \u0627\u0633\u062a!)<\/li>\n<li>\u0631\u0648\u06cc &#8220;\u0627\u0646\u062c\u0627\u0645 \u0634\u062f&#8221; \u06a9\u0644\u06cc\u06a9 \u06a9\u0646\u06cc\u062f<br \/>\n<img decoding=\"async\" src=\"https:\/\/nabfollower.com\/blog\/wp-content\/uploads\/2023\/04\/1681217154_8_\u06cc\u06a9-\u0627\u062a\u0648\u0645\u0627\u0633\u06cc\u0648\u0646-\u062e\u0628\u0631\u0646\u0627\u0645\u0647-\u0645\u0641\u06cc\u062f-\u0628\u0627-Node-\u0648-Google-Spreadsheet-\u0627\u06cc\u062c\u0627\u062f.png\" alt=\"\u0627\u06cc\u062c\u0627\u062f \u0627\u0639\u062a\u0628\u0627\u0631 \u0645\u0631\u062d\u0644\u0647 2\" loading=\"lazy\" width=\"725\" height=\"622\" title=\"\">\n<\/li>\n<li>\u0622\u062f\u0631\u0633 \u0627\u06cc\u0645\u06cc\u0644 \u062d\u0633\u0627\u0628 \u0633\u0631\u0648\u06cc\u0633 \u062e\u0648\u062f \u0631\u0627 \u06cc\u0627\u062f\u062f\u0627\u0634\u062a \u06a9\u0646\u06cc\u062f (\u062f\u0631 \u0641\u0627\u06cc\u0644 \u06a9\u0644\u06cc\u062f JSON \u0646\u06cc\u0632 \u0645\u0648\u062c\u0648\u062f \u0627\u0633\u062a)<\/li>\n<\/ul>\n<\/li>\n<li>\n<strong>\u0633\u0646\u062f \u0631\u0627 \u0628\u0647 \u0627\u0634\u062a\u0631\u0627\u06a9 \u0628\u06af\u0630\u0627\u0631\u06cc\u062f<\/strong> (\u06cc\u0627 \u0627\u0633\u0646\u0627\u062f) \u0628\u0627 \u062d\u0633\u0627\u0628 \u0633\u0631\u0648\u06cc\u0633 \u062e\u0648\u062f \u0628\u0627 \u0627\u0633\u062a\u0641\u0627\u062f\u0647 \u0627\u0632 \u0627\u06cc\u0645\u06cc\u0644 \u0630\u06a9\u0631 \u0634\u062f\u0647 \u062f\u0631 \u0628\u0627\u0644\u0627<\/p>\n<ul>\n<li>\u0628\u0627\u0632 \u06a9\u0646 <strong>service_account.json<\/strong> \u0641\u0627\u06cc\u0644 \u0648 \u067e\u06cc\u062f\u0627 \u06a9\u0646\u06cc\u062f <strong>client_email<\/strong> \u0648\u06cc\u0698\u06af\u06cc.<\/li>\n<li>\u062f\u0631 \u0635\u0641\u062d\u0647 \u06af\u0633\u062a\u0631\u062f\u0647 \u06af\u0648\u06af\u0644 \u062e\u0648\u062f\u060c \u0631\u0648\u06cc \u062f\u06a9\u0645\u0647 \u0627\u0634\u062a\u0631\u0627\u06a9 \u06af\u0630\u0627\u0631\u06cc \u062f\u0631 \u0628\u0627\u0644\u0627 \u0633\u0645\u062a \u0631\u0627\u0633\u062a \u06a9\u0644\u06cc\u06a9 \u06a9\u0646\u06cc\u062f \u0648 \u0622\u062f\u0631\u0633 \u0627\u06cc\u0645\u06cc\u0644 \u062d\u0633\u0627\u0628 \u0633\u0631\u0648\u06cc\u0633 \u0631\u0627 \u0628\u0647 \u0639\u0646\u0648\u0627\u0646 \u0648\u06cc\u0631\u0627\u06cc\u0634\u06af\u0631 \u0627\u0636\u0627\u0641\u0647 \u06a9\u0646\u06cc\u062f.<br \/>\n<img decoding=\"async\" src=\"https:\/\/nabfollower.com\/blog\/wp-content\/uploads\/2023\/04\/1681217154_486_\u06cc\u06a9-\u0627\u062a\u0648\u0645\u0627\u0633\u06cc\u0648\u0646-\u062e\u0628\u0631\u0646\u0627\u0645\u0647-\u0645\u0641\u06cc\u062f-\u0628\u0627-Node-\u0648-Google-Spreadsheet-\u0627\u06cc\u062c\u0627\u062f.png\" alt=\"\u0635\u0641\u062d\u0647 \u06af\u0633\u062a\u0631\u062f\u0647 \u0631\u0627 \u0628\u0647 \u0627\u0634\u062a\u0631\u0627\u06a9 \u0628\u06af\u0630\u0627\u0631\u06cc\u062f\" loading=\"lazy\" width=\"800\" height=\"345\" title=\"\">\n<\/li>\n<\/ul>\n<\/li>\n<\/ol>\n<h3><span class=\"ez-toc-section\" id=\"Doc\"><\/span>\n<p>  Doc<br \/>\n<span class=\"ez-toc-section-end\"><\/span><\/h3>\n<p>NPM: google-spreadsheet<br \/>Doc: \u0627\u062d\u0631\u0627\u0632 \u0647\u0648\u06cc\u062a \u0635\u0641\u062d\u0647 \u06af\u0633\u062a\u0631\u062f\u0647 Google<br \/>\u0633\u0646\u062f API \u0628\u0631\u06af\u0647 Google<\/p>\n<h2><span class=\"ez-toc-section\" id=\"%D9%86%D8%B5%D8%A8_%D9%88_%D8%B1%D8%A7%D9%87_%D8%A7%D9%86%D8%AF%D8%A7%D8%B2%DB%8C\"><\/span>\n<p>  \u0646\u0635\u0628 \u0648 \u0631\u0627\u0647 \u0627\u0646\u062f\u0627\u0632\u06cc<br \/>\n<span class=\"ez-toc-section-end\"><\/span><\/h2>\n<p><strong>\u06a9\u0644\u06cc\u062f json \u062d\u0633\u0627\u0628 \u0633\u0631\u0648\u06cc\u0633 Google \u062e\u0648\u062f \u0631\u0627 \u062f\u0631 \u067e\u0648\u0634\u0647 \u062a\u0648\u0633\u0639\u0647 \u062f\u0647\u0646\u062f\u0647 \u062e\u0648\u062f \u06a9\u067e\u06cc \u06a9\u0646\u06cc\u062f<\/strong><\/p>\n<p><strong>\u0648\u0627\u0628\u0633\u062a\u06af\u06cc NPM \u0631\u0627 \u0646\u0635\u0628 \u06a9\u0646\u06cc\u062f<\/strong><\/p>\n<div class=\"highlight js-code-highlight\">\n<pre class=\"highlight shell\"><code>npm i <span class=\"nt\">-S<\/span> google-spreadsheet\nnpm i <span class=\"nt\">-S<\/span> express\nnpm i <span class=\"nt\">-S<\/span> body-parser\nnpm i <span class=\"nt\">-S<\/span> node-fetch@^2.6.6\n<\/code><\/pre>\n<div class=\"highlight__panel js-actions-panel\">\n<div class=\"highlight__panel-action js-fullscreen-code-action\">\n    <svg xmlns=\"http:\/\/www.w3.org\/2000\/svg\" width=\"20px\" height=\"20px\" viewbox=\"0 0 24 24\" class=\"highlight-action crayons-icon highlight-action--fullscreen-on\"><title>\u0648\u0627\u0631\u062f \u062d\u0627\u0644\u062a \u062a\u0645\u0627\u0645 \u0635\u0641\u062d\u0647 \u0634\u0648\u06cc\u062f<\/title>\n    <path d=\"M16 3h6v6h-2V5h-4V3zM2 3h6v2H4v4H2V3zm18 16v-4h2v6h-6v-2h4zM4 19h4v2H2v-6h2v4z\"\/>\n<\/svg><\/p>\n<p>    <svg xmlns=\"http:\/\/www.w3.org\/2000\/svg\" width=\"20px\" height=\"20px\" viewbox=\"0 0 24 24\" class=\"highlight-action crayons-icon highlight-action--fullscreen-off\"><title>\u0627\u0632 \u062d\u0627\u0644\u062a \u062a\u0645\u0627\u0645 \u0635\u0641\u062d\u0647 \u062e\u0627\u0631\u062c \u0634\u0648\u06cc\u062f<\/title>\n    <path d=\"M18 7h4v2h-6V3h2v4zM8 9H2V7h4V3h2v6zm10 8v4h-2v-6h6v2h-4zM8 15v6H6v-4H2v-2h6z\"\/>\n<\/svg><\/p>\n<\/div>\n<\/div>\n<\/div>\n<h2><span class=\"ez-toc-section\" id=\"%DA%A9%D8%AF_%D8%AE%D8%A8%D8%B1%D9%86%D8%A7%D9%85%D9%87\"><\/span>\n<p>  \u06a9\u062f \u062e\u0628\u0631\u0646\u0627\u0645\u0647<br \/>\n<span class=\"ez-toc-section-end\"><\/span><\/h2>\n<p>\u0627\u06a9\u0646\u0648\u0646 \u0622\u0645\u0627\u062f\u0647 \u06a9\u062f\u0646\u0648\u06cc\u0633\u06cc \u0641\u0631\u0645 HTML \u0648 \u0628\u0627\u0637\u0646 \u062e\u0628\u0631\u0646\u0627\u0645\u0647 \u062e\u0648\u062f \u0647\u0633\u062a\u06cc\u0645<\/p>\n<p><strong>\u0641\u0631\u0645 \u062e\u0628\u0631\u0646\u0627\u0645\u0647<\/strong><br \/>\u06cc\u06a9 \u0641\u0631\u0645 \u062e\u0628\u0631\u0646\u0627\u0645\u0647 \u0633\u0627\u062f\u0647 \u0628\u0627 Google recaptcha \u0627\u06cc\u062c\u0627\u062f \u06a9\u0646\u06cc\u062f<\/p>\n<div class=\"highlight js-code-highlight\">\n<pre class=\"highlight html\"><code><span class=\"nt\">&lt;script <\/span><span class=\"na\">src=<\/span><span class=\"s\">\"https:\/\/www.google.com\/recaptcha\/api.js\"<\/span><span class=\"nt\">&gt;&lt;\/script&gt;<\/span>\n<span class=\"nt\">&lt;form<\/span> <span class=\"na\">id=<\/span><span class=\"s\">\"demo-form\"<\/span> <span class=\"na\">action=<\/span><span class=\"s\">\"http:\/\/localhost:4000\/subscribe\"<\/span> <span class=\"na\">method=<\/span><span class=\"s\">\"POST\"<\/span><span class=\"nt\">&gt;<\/span>\n    Email: <span class=\"nt\">&lt;input<\/span> <span class=\"na\">type=<\/span><span class=\"s\">\"text\"<\/span> <span class=\"na\">value=<\/span><span class=\"s\">\"name@domain.com\"<\/span> <span class=\"na\">name=<\/span><span class=\"s\">\"email\"<\/span> <span class=\"na\">id=<\/span><span class=\"s\">\"email\"<\/span> <span class=\"na\">required<\/span><span class=\"nt\">&gt;<\/span>\n    <span class=\"nt\">&lt;button<\/span> <span class=\"na\">class=<\/span><span class=\"s\">\"g-recaptcha\"<\/span> \n    <span class=\"na\">data-sitekey=<\/span><span class=\"s\">\"YOUR_PUBLIC_CAPTCHA_KEY\"<\/span> \n    <span class=\"na\">data-callback=<\/span><span class=\"s\">'onSubmit'<\/span> \n    <span class=\"na\">data-action=<\/span><span class=\"s\">'submit'<\/span><span class=\"nt\">&gt;<\/span>Submit<span class=\"nt\">&lt;\/button&gt;<\/span>\n<span class=\"nt\">&lt;\/form&gt;<\/span>\n<span class=\"nt\">&lt;script&gt;<\/span>\n<span class=\"kd\">function<\/span> <span class=\"nx\">onSubmit<\/span><span class=\"p\">(<\/span><span class=\"nx\">token<\/span><span class=\"p\">)<\/span> <span class=\"p\">{<\/span>\n    <span class=\"nb\">document<\/span><span class=\"p\">.<\/span><span class=\"nx\">getElementById<\/span><span class=\"p\">(<\/span><span class=\"dl\">\"<\/span><span class=\"s2\">demo-form<\/span><span class=\"dl\">\"<\/span><span class=\"p\">).<\/span><span class=\"nx\">submit<\/span><span class=\"p\">();<\/span>\n<span class=\"p\">}<\/span>\n<span class=\"nt\">&lt;\/script&gt;<\/span>\n<\/code><\/pre>\n<div class=\"highlight__panel js-actions-panel\">\n<div class=\"highlight__panel-action js-fullscreen-code-action\">\n    <svg xmlns=\"http:\/\/www.w3.org\/2000\/svg\" width=\"20px\" height=\"20px\" viewbox=\"0 0 24 24\" class=\"highlight-action crayons-icon highlight-action--fullscreen-on\"><title>\u0648\u0627\u0631\u062f \u062d\u0627\u0644\u062a \u062a\u0645\u0627\u0645 \u0635\u0641\u062d\u0647 \u0634\u0648\u06cc\u062f<\/title>\n    <path d=\"M16 3h6v6h-2V5h-4V3zM2 3h6v2H4v4H2V3zm18 16v-4h2v6h-6v-2h4zM4 19h4v2H2v-6h2v4z\"\/>\n<\/svg><\/p>\n<p>    <svg xmlns=\"http:\/\/www.w3.org\/2000\/svg\" width=\"20px\" height=\"20px\" viewbox=\"0 0 24 24\" class=\"highlight-action crayons-icon highlight-action--fullscreen-off\"><title>\u0627\u0632 \u062d\u0627\u0644\u062a \u062a\u0645\u0627\u0645 \u0635\u0641\u062d\u0647 \u062e\u0627\u0631\u062c \u0634\u0648\u06cc\u062f<\/title>\n    <path d=\"M18 7h4v2h-6V3h2v4zM8 9H2V7h4V3h2v6zm10 8v4h-2v-6h6v2h-4zM8 15v6H6v-4H2v-2h6z\"\/>\n<\/svg><\/p>\n<\/div>\n<\/div>\n<\/div>\n<p>\u0628\u0631\u0627\u06cc \u0627\u0633\u062a\u0641\u0627\u062f\u0647 \u0627\u0632 Recaptcha \u0628\u0627\u06cc\u062f \u0641\u0627\u06cc\u0644 HTML \u062e\u0648\u062f \u0631\u0627 \u062f\u0631 \u0644\u0648\u06a9\u0627\u0644 \u0647\u0627\u0633\u062a \u0633\u0631\u0648\u06cc\u0633 \u06a9\u0646\u06cc\u062f.<br \/>\u0645\u06cc \u062a\u0648\u0627\u0646\u06cc\u062f \u0627\u06cc\u0646 \u06a9\u0627\u0631 \u0631\u0627 \u0628\u0627 http-server \u0628\u0631\u0627\u06cc Node \u0627\u0646\u062c\u0627\u0645 \u062f\u0647\u06cc\u062f<\/p>\n<div class=\"highlight js-code-highlight\">\n<pre class=\"highlight shell\"><code>npm <span class=\"nb\">install<\/span> <span class=\"nt\">--global<\/span> http-server\nhttp-server <span class=\"nb\">.<\/span>\n<\/code><\/pre>\n<div class=\"highlight__panel js-actions-panel\">\n<div class=\"highlight__panel-action js-fullscreen-code-action\">\n    <svg xmlns=\"http:\/\/www.w3.org\/2000\/svg\" width=\"20px\" height=\"20px\" viewbox=\"0 0 24 24\" class=\"highlight-action crayons-icon highlight-action--fullscreen-on\"><title>\u0648\u0627\u0631\u062f \u062d\u0627\u0644\u062a \u062a\u0645\u0627\u0645 \u0635\u0641\u062d\u0647 \u0634\u0648\u06cc\u062f<\/title>\n    <path d=\"M16 3h6v6h-2V5h-4V3zM2 3h6v2H4v4H2V3zm18 16v-4h2v6h-6v-2h4zM4 19h4v2H2v-6h2v4z\"\/>\n<\/svg><\/p>\n<p>    <svg xmlns=\"http:\/\/www.w3.org\/2000\/svg\" width=\"20px\" height=\"20px\" viewbox=\"0 0 24 24\" class=\"highlight-action crayons-icon highlight-action--fullscreen-off\"><title>\u0627\u0632 \u062d\u0627\u0644\u062a \u062a\u0645\u0627\u0645 \u0635\u0641\u062d\u0647 \u062e\u0627\u0631\u062c \u0634\u0648\u06cc\u062f<\/title>\n    <path d=\"M18 7h4v2h-6V3h2v4zM8 9H2V7h4V3h2v6zm10 8v4h-2v-6h6v2h-4zM8 15v6H6v-4H2v-2h6z\"\/>\n<\/svg><\/p>\n<\/div>\n<\/div>\n<\/div>\n<p>\u0648 http:\/\/localhost:8080 \u0631\u0627 \u0628\u0627\u0632 \u06a9\u0646\u06cc\u062f<\/p>\n<p><strong>\u0633\u0631\u0648\u0631<\/strong><br \/>\u062f\u0631 \u062d\u0627\u0644 \u062d\u0627\u0636\u0631 \u0628\u0627\u0637\u0646 \u06af\u0631\u0647 \u0628\u0631\u0627\u06cc \u062f\u0631\u06cc\u0627\u0641\u062a \u0627\u06cc\u0645\u06cc\u0644.<\/p>\n<div class=\"highlight js-code-highlight\">\n<pre class=\"highlight javascript\"><code><span class=\"kd\">const<\/span> <span class=\"nx\">express<\/span> <span class=\"o\">=<\/span> <span class=\"nx\">require<\/span><span class=\"p\">(<\/span><span class=\"dl\">'<\/span><span class=\"s1\">express<\/span><span class=\"dl\">'<\/span><span class=\"p\">)<\/span>\n<span class=\"kd\">const<\/span> <span class=\"nx\">bodyParser<\/span> <span class=\"o\">=<\/span> <span class=\"nx\">require<\/span><span class=\"p\">(<\/span><span class=\"dl\">'<\/span><span class=\"s1\">body-parser<\/span><span class=\"dl\">'<\/span><span class=\"p\">);<\/span>\n<span class=\"kd\">const<\/span> <span class=\"nx\">fetch<\/span> <span class=\"o\">=<\/span> <span class=\"nx\">require<\/span><span class=\"p\">(<\/span><span class=\"dl\">'<\/span><span class=\"s1\">node-fetch<\/span><span class=\"dl\">'<\/span><span class=\"p\">);<\/span>\n<span class=\"kd\">const<\/span> <span class=\"nx\">fs<\/span> <span class=\"o\">=<\/span> <span class=\"nx\">require<\/span><span class=\"p\">(<\/span><span class=\"dl\">'<\/span><span class=\"s1\">node:fs<\/span><span class=\"dl\">'<\/span><span class=\"p\">);<\/span>\n<span class=\"kd\">const<\/span> <span class=\"nx\">app<\/span> <span class=\"o\">=<\/span> <span class=\"nx\">express<\/span><span class=\"p\">()<\/span>\n\n<span class=\"nx\">app<\/span><span class=\"p\">.<\/span><span class=\"nx\">post<\/span><span class=\"p\">(<\/span><span class=\"dl\">'<\/span><span class=\"s1\">\/subscribe<\/span><span class=\"dl\">'<\/span><span class=\"p\">,<\/span> \n    <span class=\"nx\">express<\/span><span class=\"p\">.<\/span><span class=\"nx\">urlencoded<\/span><span class=\"p\">({<\/span><span class=\"na\">extended<\/span><span class=\"p\">:<\/span> <span class=\"kc\">true<\/span><span class=\"p\">}),<\/span> <span class=\"k\">async<\/span> <span class=\"p\">(<\/span><span class=\"nx\">request<\/span><span class=\"p\">,<\/span> <span class=\"nx\">response<\/span><span class=\"p\">)<\/span> <span class=\"o\">=&gt;<\/span> <span class=\"p\">{<\/span>\n  <span class=\"kd\">const<\/span> <span class=\"nx\">data<\/span> <span class=\"o\">=<\/span> <span class=\"k\">new<\/span> <span class=\"nx\">URLSearchParams<\/span><span class=\"p\">();<\/span>\n  <span class=\"nx\">data<\/span><span class=\"p\">.<\/span><span class=\"nx\">append<\/span><span class=\"p\">(<\/span><span class=\"dl\">'<\/span><span class=\"s1\">secret<\/span><span class=\"dl\">'<\/span><span class=\"p\">,<\/span> <span class=\"dl\">'<\/span><span class=\"s1\">YOUR_PRIVATE_CAPTCHA_KEY<\/span><span class=\"dl\">'<\/span><span class=\"p\">);<\/span> <span class=\"c1\">\/\/ private key<\/span>\n  <span class=\"nx\">data<\/span><span class=\"p\">.<\/span><span class=\"nx\">append<\/span><span class=\"p\">(<\/span><span class=\"dl\">'<\/span><span class=\"s1\">response<\/span><span class=\"dl\">'<\/span><span class=\"p\">,<\/span> <span class=\"nx\">request<\/span><span class=\"p\">.<\/span><span class=\"nx\">body<\/span><span class=\"p\">[<\/span><span class=\"dl\">\"<\/span><span class=\"s2\">g-recaptcha-response<\/span><span class=\"dl\">\"<\/span><span class=\"p\">]);<\/span>\n\n  <span class=\"kd\">const<\/span> <span class=\"nx\">result<\/span> <span class=\"o\">=<\/span> <span class=\"k\">await<\/span> <span class=\"nx\">fetch<\/span><span class=\"p\">(<\/span><span class=\"dl\">\"<\/span><span class=\"s2\">https:\/\/www.google.com\/recaptcha\/api\/siteverify<\/span><span class=\"dl\">\"<\/span><span class=\"p\">,<\/span> <span class=\"p\">{<\/span>\n    <span class=\"na\">body<\/span><span class=\"p\">:<\/span> <span class=\"nx\">data<\/span><span class=\"p\">,<\/span>\n    <span class=\"na\">method<\/span><span class=\"p\">:<\/span> <span class=\"dl\">\"<\/span><span class=\"s2\">post<\/span><span class=\"dl\">\"<\/span>\n  <span class=\"p\">});<\/span>\n  <span class=\"kd\">const<\/span> <span class=\"nx\">json<\/span> <span class=\"o\">=<\/span> <span class=\"k\">await<\/span> <span class=\"nx\">result<\/span><span class=\"p\">.<\/span><span class=\"nx\">json<\/span><span class=\"p\">();<\/span>\n  <span class=\"k\">if<\/span> <span class=\"p\">(<\/span><span class=\"nx\">json<\/span><span class=\"p\">.<\/span><span class=\"nx\">success<\/span><span class=\"p\">)<\/span> <span class=\"p\">{<\/span>\n    <span class=\"c1\">\/\/ captcha succeeded<\/span>\n    <span class=\"nx\">print<\/span><span class=\"p\">(<\/span><span class=\"s2\">`email to add: <\/span><span class=\"p\">${<\/span><span class=\"nx\">request<\/span><span class=\"p\">.<\/span><span class=\"nx\">body<\/span><span class=\"p\">.<\/span><span class=\"nx\">email<\/span><span class=\"p\">}<\/span><span class=\"s2\">`<\/span><span class=\"p\">)<\/span>\n    <span class=\"k\">return<\/span><span class=\"p\">;<\/span>\n  <span class=\"p\">}<\/span>\n<span class=\"p\">})<\/span>\n<span class=\"nx\">app<\/span><span class=\"p\">.<\/span><span class=\"nx\">listen<\/span><span class=\"p\">(<\/span><span class=\"mi\">4000<\/span><span class=\"p\">)<\/span>\n<\/code><\/pre>\n<div class=\"highlight__panel js-actions-panel\">\n<div class=\"highlight__panel-action js-fullscreen-code-action\">\n    <svg xmlns=\"http:\/\/www.w3.org\/2000\/svg\" width=\"20px\" height=\"20px\" viewbox=\"0 0 24 24\" class=\"highlight-action crayons-icon highlight-action--fullscreen-on\"><title>\u0648\u0627\u0631\u062f \u062d\u0627\u0644\u062a \u062a\u0645\u0627\u0645 \u0635\u0641\u062d\u0647 \u0634\u0648\u06cc\u062f<\/title>\n    <path d=\"M16 3h6v6h-2V5h-4V3zM2 3h6v2H4v4H2V3zm18 16v-4h2v6h-6v-2h4zM4 19h4v2H2v-6h2v4z\"\/>\n<\/svg><\/p>\n<p>    <svg xmlns=\"http:\/\/www.w3.org\/2000\/svg\" width=\"20px\" height=\"20px\" viewbox=\"0 0 24 24\" class=\"highlight-action crayons-icon highlight-action--fullscreen-off\"><title>\u0627\u0632 \u062d\u0627\u0644\u062a \u062a\u0645\u0627\u0645 \u0635\u0641\u062d\u0647 \u062e\u0627\u0631\u062c \u0634\u0648\u06cc\u062f<\/title>\n    <path d=\"M18 7h4v2h-6V3h2v4zM8 9H2V7h4V3h2v6zm10 8v4h-2v-6h6v2h-4zM8 15v6H6v-4H2v-2h6z\"\/>\n<\/svg><\/p>\n<\/div>\n<\/div>\n<\/div>\n<h2><span class=\"ez-toc-section\" id=\"%D8%B5%D9%81%D8%AD%D9%87_%DA%AF%D8%B3%D8%AA%D8%B1%D8%AF%D9%87_%DA%AF%D9%88%DA%AF%D9%84-2\"><\/span>\n<p>  \u0635\u0641\u062d\u0647 \u06af\u0633\u062a\u0631\u062f\u0647 \u06af\u0648\u06af\u0644<br \/>\n<span class=\"ez-toc-section-end\"><\/span><\/h2>\n<p>\u062f\u0631 \u0627\u06cc\u0646 \u0645\u0631\u062d\u0644\u0647\u060c \u0627\u06a9\u0646\u0648\u0646 \u0645\u06cc \u062a\u0648\u0627\u0646\u06cc\u062f \u0627\u06cc\u0645\u06cc\u0644 \u0647\u0627 \u0631\u0627 \u062f\u0631 Node API \u062e\u0648\u062f \u0645\u0646\u062a\u0634\u0631 \u06a9\u0646\u06cc\u062f.<br \/>\u0627\u06a9\u0646\u0648\u0646 \u0645\u06cc \u062e\u0648\u0627\u0647\u06cc\u0645 \u0627\u06cc\u0645\u06cc\u0644 \u0647\u0627 \u0631\u0627 \u062f\u0631 \u0635\u0641\u062d\u0647 \u06af\u0633\u062a\u0631\u062f\u0647 \u06af\u0648\u06af\u0644 \u0622\u067e\u0644\u0648\u062f \u06a9\u0646\u06cc\u0645.<br \/>\u0634\u0645\u0627 \u0642\u0628\u0644\u0627\u064b API \u0635\u0641\u062d\u0647 \u06af\u0633\u062a\u0631\u062f\u0647 Google \u062e\u0648\u062f \u0631\u0627 \u0641\u0639\u0627\u0644 \u06a9\u0631\u062f\u0647 \u0627\u06cc\u062f \u0648 \u0641\u0627\u06cc\u0644 \u06a9\u0644\u06cc\u062f json \u062e\u0648\u062f \u0631\u0627 \u062f\u0631 \u0622\u0646 \u06a9\u067e\u06cc \u06a9\u0631\u062f\u0647 \u0627\u06cc\u062f <strong>\u067e\u0648\u0634\u0647<\/strong><\/p>\n<p><strong>\u06a9\u062f \u0635\u0641\u062d\u0647 \u06af\u0633\u062a\u0631\u062f\u0647 \u06af\u0648\u06af\u0644<\/strong><br \/>\u0628\u06cc\u0627\u06cc\u06cc\u062f \u0634\u0631\u0648\u0639 \u0628\u0647 \u0647\u06a9 \u06a9\u0631\u062f\u0646 \u0628\u0631\u062e\u06cc \u0627\u0632 \u06a9\u062f\u0647\u0627 \u0628\u0627 \u0627\u0633\u062a\u0641\u0627\u062f\u0647 \u0627\u0632 Google Spreadsheet \u06a9\u0646\u06cc\u0645<\/p>\n<div class=\"highlight js-code-highlight\">\n<pre class=\"highlight javascript\"><code><span class=\"kd\">const<\/span> <span class=\"p\">{<\/span> <span class=\"nx\">GoogleSpreadsheet<\/span> <span class=\"p\">}<\/span> <span class=\"o\">=<\/span> <span class=\"nx\">require<\/span><span class=\"p\">(<\/span><span class=\"dl\">'<\/span><span class=\"s1\">google-spreadsheet<\/span><span class=\"dl\">'<\/span><span class=\"p\">);<\/span>\n<span class=\"kd\">const<\/span> <span class=\"nx\">creds<\/span> <span class=\"o\">=<\/span> <span class=\"nx\">require<\/span><span class=\"p\">(<\/span><span class=\"dl\">'<\/span><span class=\"s1\">.\/google-spreadsheet-key.json<\/span><span class=\"dl\">'<\/span><span class=\"p\">);<\/span>\n\n<span class=\"c1\">\/\/ Initialize the sheet - doc ID is the long id in the sheets URL<\/span>\n<span class=\"kd\">const<\/span> <span class=\"nx\">doc<\/span> <span class=\"o\">=<\/span> <span class=\"k\">new<\/span> <span class=\"nx\">GoogleSpreadsheet<\/span><span class=\"p\">(<\/span><span class=\"dl\">'<\/span><span class=\"s1\">YOUR_SPREADSHEET_ID<\/span><span class=\"dl\">'<\/span><span class=\"p\">);<\/span>\n<span class=\"k\">await<\/span> <span class=\"nx\">doc<\/span><span class=\"p\">.<\/span><span class=\"nx\">useServiceAccountAuth<\/span><span class=\"p\">(<\/span><span class=\"nx\">creds<\/span><span class=\"p\">);<\/span>\n<span class=\"k\">await<\/span> <span class=\"nx\">doc<\/span><span class=\"p\">.<\/span><span class=\"nx\">loadInfo<\/span><span class=\"p\">();<\/span>\n<span class=\"kd\">const<\/span> <span class=\"nx\">sheet<\/span> <span class=\"o\">=<\/span> <span class=\"nx\">doc<\/span><span class=\"p\">.<\/span><span class=\"nx\">sheetsByIndex<\/span><span class=\"p\">[<\/span><span class=\"mi\">0<\/span><span class=\"p\">];<\/span>\n\n<span class=\"kd\">const<\/span> <span class=\"nx\">newEmail<\/span> <span class=\"o\">=<\/span> <span class=\"dl\">\"<\/span><span class=\"s2\">tony3@gmail.com<\/span><span class=\"dl\">\"<\/span><span class=\"p\">;<\/span>\n\n<span class=\"c1\">\/\/ read rows<\/span>\n<span class=\"kd\">const<\/span> <span class=\"nx\">rows<\/span> <span class=\"o\">=<\/span> <span class=\"k\">await<\/span> <span class=\"nx\">sheet<\/span><span class=\"p\">.<\/span><span class=\"nx\">getRows<\/span><span class=\"p\">();<\/span>\n<span class=\"kd\">const<\/span> <span class=\"nx\">isExists<\/span> <span class=\"o\">=<\/span> <span class=\"nx\">rows<\/span><span class=\"p\">.<\/span><span class=\"nx\">map<\/span><span class=\"p\">(<\/span><span class=\"nx\">r<\/span> <span class=\"o\">=&gt;<\/span> <span class=\"nx\">r<\/span><span class=\"p\">.<\/span><span class=\"nx\">email<\/span><span class=\"p\">).<\/span><span class=\"nx\">includes<\/span><span class=\"p\">(<\/span><span class=\"nx\">newEmail<\/span><span class=\"p\">);<\/span>\n<span class=\"k\">if<\/span> <span class=\"p\">(<\/span><span class=\"o\">!<\/span><span class=\"nx\">isExists<\/span><span class=\"p\">)<\/span> <span class=\"p\">{<\/span>\n    <span class=\"k\">await<\/span> <span class=\"nx\">sheet<\/span><span class=\"p\">.<\/span><span class=\"nx\">addRow<\/span><span class=\"p\">({<\/span> <span class=\"na\">email<\/span><span class=\"p\">:<\/span> <span class=\"nx\">newEmail<\/span> <span class=\"p\">});<\/span>    \n<span class=\"p\">}<\/span>\n<\/code><\/pre>\n<div class=\"highlight__panel js-actions-panel\">\n<div class=\"highlight__panel-action js-fullscreen-code-action\">\n    <svg xmlns=\"http:\/\/www.w3.org\/2000\/svg\" width=\"20px\" height=\"20px\" viewbox=\"0 0 24 24\" class=\"highlight-action crayons-icon highlight-action--fullscreen-on\"><title>\u0648\u0627\u0631\u062f \u062d\u0627\u0644\u062a \u062a\u0645\u0627\u0645 \u0635\u0641\u062d\u0647 \u0634\u0648\u06cc\u062f<\/title>\n    <path d=\"M16 3h6v6h-2V5h-4V3zM2 3h6v2H4v4H2V3zm18 16v-4h2v6h-6v-2h4zM4 19h4v2H2v-6h2v4z\"\/>\n<\/svg><\/p>\n<p>    <svg xmlns=\"http:\/\/www.w3.org\/2000\/svg\" width=\"20px\" height=\"20px\" viewbox=\"0 0 24 24\" class=\"highlight-action crayons-icon highlight-action--fullscreen-off\"><title>\u0627\u0632 \u062d\u0627\u0644\u062a \u062a\u0645\u0627\u0645 \u0635\u0641\u062d\u0647 \u062e\u0627\u0631\u062c \u0634\u0648\u06cc\u062f<\/title>\n    <path d=\"M18 7h4v2h-6V3h2v4zM8 9H2V7h4V3h2v6zm10 8v4h-2v-6h6v2h-4zM8 15v6H6v-4H2v-2h6z\"\/>\n<\/svg><\/p>\n<\/div>\n<\/div>\n<\/div>\n<h2><span class=\"ez-toc-section\" id=\"%D9%87%D9%85%D9%87_%D8%B1%D8%A7_%D8%A8%D9%87_%D9%87%D9%85_%D9%88%D8%B5%D9%84_%DA%A9%D9%86%DB%8C%D8%AF\"><\/span>\n<p>  \u0647\u0645\u0647 \u0631\u0627 \u0628\u0647 \u0647\u0645 \u0648\u0635\u0644 \u06a9\u0646\u06cc\u062f<br \/>\n<span class=\"ez-toc-section-end\"><\/span><\/h2>\n<div class=\"highlight js-code-highlight\">\n<pre class=\"highlight javascript\"><code><span class=\"kd\">const<\/span> <span class=\"nx\">express<\/span> <span class=\"o\">=<\/span> <span class=\"nx\">require<\/span><span class=\"p\">(<\/span><span class=\"dl\">'<\/span><span class=\"s1\">express<\/span><span class=\"dl\">'<\/span><span class=\"p\">)<\/span>\n<span class=\"kd\">const<\/span> <span class=\"nx\">bodyParser<\/span> <span class=\"o\">=<\/span> <span class=\"nx\">require<\/span><span class=\"p\">(<\/span><span class=\"dl\">'<\/span><span class=\"s1\">body-parser<\/span><span class=\"dl\">'<\/span><span class=\"p\">);<\/span>\n<span class=\"kd\">const<\/span> <span class=\"nx\">fetch<\/span> <span class=\"o\">=<\/span> <span class=\"nx\">require<\/span><span class=\"p\">(<\/span><span class=\"dl\">'<\/span><span class=\"s1\">node-fetch<\/span><span class=\"dl\">'<\/span><span class=\"p\">);<\/span>\n<span class=\"kd\">const<\/span> <span class=\"nx\">fs<\/span> <span class=\"o\">=<\/span> <span class=\"nx\">require<\/span><span class=\"p\">(<\/span><span class=\"dl\">'<\/span><span class=\"s1\">node:fs<\/span><span class=\"dl\">'<\/span><span class=\"p\">);<\/span>\n<span class=\"kd\">const<\/span> <span class=\"p\">{<\/span> <span class=\"nx\">GoogleSpreadsheet<\/span> <span class=\"p\">}<\/span> <span class=\"o\">=<\/span> <span class=\"nx\">require<\/span><span class=\"p\">(<\/span><span class=\"dl\">'<\/span><span class=\"s1\">google-spreadsheet<\/span><span class=\"dl\">'<\/span><span class=\"p\">);<\/span>\n<span class=\"kd\">const<\/span> <span class=\"nx\">creds<\/span> <span class=\"o\">=<\/span> <span class=\"nx\">require<\/span><span class=\"p\">(<\/span><span class=\"dl\">'<\/span><span class=\"s1\">.\/google-spreadsheet-key.json<\/span><span class=\"dl\">'<\/span><span class=\"p\">);<\/span>\n<span class=\"kd\">const<\/span> <span class=\"nx\">app<\/span> <span class=\"o\">=<\/span> <span class=\"nx\">express<\/span><span class=\"p\">()<\/span>\n\n<span class=\"c1\">\/\/ Initialize the sheet - doc ID is the long id in the sheets URL<\/span>\n<span class=\"kd\">const<\/span> <span class=\"nx\">doc<\/span> <span class=\"o\">=<\/span> <span class=\"k\">new<\/span> <span class=\"nx\">GoogleSpreadsheet<\/span><span class=\"p\">(<\/span><span class=\"dl\">'<\/span><span class=\"s1\">YOUR_SPREADSHEET_ID<\/span><span class=\"dl\">'<\/span><span class=\"p\">);<\/span>\n<span class=\"k\">await<\/span> <span class=\"nx\">doc<\/span><span class=\"p\">.<\/span><span class=\"nx\">useServiceAccountAuth<\/span><span class=\"p\">(<\/span><span class=\"nx\">creds<\/span><span class=\"p\">);<\/span>\n<span class=\"k\">await<\/span> <span class=\"nx\">doc<\/span><span class=\"p\">.<\/span><span class=\"nx\">loadInfo<\/span><span class=\"p\">();<\/span>\n<span class=\"kd\">const<\/span> <span class=\"nx\">sheet<\/span> <span class=\"o\">=<\/span> <span class=\"nx\">doc<\/span><span class=\"p\">.<\/span><span class=\"nx\">sheetsByIndex<\/span><span class=\"p\">[<\/span><span class=\"mi\">0<\/span><span class=\"p\">];<\/span>\n\n<span class=\"nx\">app<\/span><span class=\"p\">.<\/span><span class=\"nx\">post<\/span><span class=\"p\">(<\/span><span class=\"dl\">'<\/span><span class=\"s1\">\/subscribe<\/span><span class=\"dl\">'<\/span><span class=\"p\">,<\/span> \n    <span class=\"nx\">express<\/span><span class=\"p\">.<\/span><span class=\"nx\">urlencoded<\/span><span class=\"p\">({<\/span><span class=\"na\">extended<\/span><span class=\"p\">:<\/span> <span class=\"kc\">true<\/span><span class=\"p\">}),<\/span> <span class=\"k\">async<\/span> <span class=\"p\">(<\/span><span class=\"nx\">request<\/span><span class=\"p\">,<\/span> <span class=\"nx\">response<\/span><span class=\"p\">)<\/span> <span class=\"o\">=&gt;<\/span> <span class=\"p\">{<\/span>\n  <span class=\"k\">try<\/span> <span class=\"p\">{<\/span>\n    <span class=\"kd\">const<\/span> <span class=\"nx\">data<\/span> <span class=\"o\">=<\/span> <span class=\"k\">new<\/span> <span class=\"nx\">URLSearchParams<\/span><span class=\"p\">();<\/span>\n    <span class=\"nx\">data<\/span><span class=\"p\">.<\/span><span class=\"nx\">append<\/span><span class=\"p\">(<\/span><span class=\"dl\">'<\/span><span class=\"s1\">secret<\/span><span class=\"dl\">'<\/span><span class=\"p\">,<\/span> <span class=\"dl\">'<\/span><span class=\"s1\">YOUR_PRIVATE_CAPTCHA_KEY<\/span><span class=\"dl\">'<\/span><span class=\"p\">);<\/span> <span class=\"c1\">\/\/ private key<\/span>\n    <span class=\"nx\">data<\/span><span class=\"p\">.<\/span><span class=\"nx\">append<\/span><span class=\"p\">(<\/span><span class=\"dl\">'<\/span><span class=\"s1\">response<\/span><span class=\"dl\">'<\/span><span class=\"p\">,<\/span> <span class=\"nx\">request<\/span><span class=\"p\">.<\/span><span class=\"nx\">body<\/span><span class=\"p\">[<\/span><span class=\"dl\">\"<\/span><span class=\"s2\">g-recaptcha-response<\/span><span class=\"dl\">\"<\/span><span class=\"p\">]);<\/span>\n\n    <span class=\"kd\">const<\/span> <span class=\"nx\">result<\/span> <span class=\"o\">=<\/span> <span class=\"k\">await<\/span> <span class=\"nx\">fetch<\/span><span class=\"p\">(<\/span><span class=\"dl\">\"<\/span><span class=\"s2\">https:\/\/www.google.com\/recaptcha\/api\/siteverify<\/span><span class=\"dl\">\"<\/span><span class=\"p\">,<\/span> <span class=\"p\">{<\/span>\n        <span class=\"na\">body<\/span><span class=\"p\">:<\/span> <span class=\"nx\">data<\/span><span class=\"p\">,<\/span>\n        <span class=\"na\">method<\/span><span class=\"p\">:<\/span> <span class=\"dl\">\"<\/span><span class=\"s2\">post<\/span><span class=\"dl\">\"<\/span>\n    <span class=\"p\">});<\/span>\n    <span class=\"kd\">const<\/span> <span class=\"nx\">json<\/span> <span class=\"o\">=<\/span> <span class=\"k\">await<\/span> <span class=\"nx\">result<\/span><span class=\"p\">.<\/span><span class=\"nx\">json<\/span><span class=\"p\">();<\/span>\n    <span class=\"k\">if<\/span> <span class=\"p\">(<\/span><span class=\"nx\">json<\/span><span class=\"p\">.<\/span><span class=\"nx\">success<\/span><span class=\"p\">)<\/span> <span class=\"p\">{<\/span>\n        <span class=\"kd\">const<\/span> <span class=\"nx\">newEmail<\/span> <span class=\"o\">=<\/span> <span class=\"nx\">request<\/span><span class=\"p\">.<\/span><span class=\"nx\">body<\/span><span class=\"p\">.<\/span><span class=\"nx\">email<\/span><span class=\"p\">;<\/span>\n        <span class=\"c1\">\/\/ publish if email does not exist<\/span>\n        <span class=\"kd\">const<\/span> <span class=\"nx\">rows<\/span> <span class=\"o\">=<\/span> <span class=\"k\">await<\/span> <span class=\"nx\">sheet<\/span><span class=\"p\">.<\/span><span class=\"nx\">getRows<\/span><span class=\"p\">();<\/span>\n        <span class=\"kd\">const<\/span> <span class=\"nx\">isExists<\/span> <span class=\"o\">=<\/span> <span class=\"nx\">rows<\/span><span class=\"p\">.<\/span><span class=\"nx\">map<\/span><span class=\"p\">(<\/span><span class=\"nx\">r<\/span> <span class=\"o\">=&gt;<\/span> <span class=\"nx\">r<\/span><span class=\"p\">.<\/span><span class=\"nx\">email<\/span><span class=\"p\">).<\/span><span class=\"nx\">includes<\/span><span class=\"p\">(<\/span><span class=\"nx\">newEmail<\/span><span class=\"p\">);<\/span>\n        <span class=\"k\">if<\/span> <span class=\"p\">(<\/span><span class=\"o\">!<\/span><span class=\"nx\">isExists<\/span><span class=\"p\">)<\/span> <span class=\"p\">{<\/span>\n            <span class=\"k\">await<\/span> <span class=\"nx\">sheet<\/span><span class=\"p\">.<\/span><span class=\"nx\">addRow<\/span><span class=\"p\">({<\/span> <span class=\"na\">email<\/span><span class=\"p\">:<\/span> <span class=\"nx\">newEmail<\/span> <span class=\"p\">});<\/span>    \n            <span class=\"c1\">\/\/ captcha succeeded<\/span>\n            <span class=\"nx\">print<\/span><span class=\"p\">(<\/span><span class=\"s2\">`email to add: <\/span><span class=\"p\">${<\/span><span class=\"nx\">newEmail<\/span><span class=\"p\">}<\/span><span class=\"s2\">`<\/span><span class=\"p\">)<\/span>\n        <span class=\"p\">}<\/span>\n        <span class=\"k\">return<\/span> <span class=\"nx\">response<\/span><span class=\"p\">.<\/span><span class=\"nx\">send<\/span><span class=\"p\">(<\/span><span class=\"dl\">\"<\/span><span class=\"s2\">done<\/span><span class=\"dl\">\"<\/span><span class=\"p\">);<\/span>\n    <span class=\"p\">}<\/span>\n  <span class=\"p\">}<\/span> <span class=\"k\">catch<\/span><span class=\"p\">(<\/span><span class=\"nx\">err<\/span><span class=\"p\">)<\/span> <span class=\"p\">{<\/span>\n    <span class=\"k\">return<\/span> <span class=\"nx\">response<\/span><span class=\"p\">.<\/span><span class=\"nx\">send<\/span><span class=\"p\">(<\/span><span class=\"dl\">\"<\/span><span class=\"s2\">error<\/span><span class=\"dl\">\"<\/span><span class=\"p\">);<\/span>\n  <span class=\"p\">}<\/span>\n\n<span class=\"p\">})<\/span>\n<span class=\"nx\">app<\/span><span class=\"p\">.<\/span><span class=\"nx\">listen<\/span><span class=\"p\">(<\/span><span class=\"mi\">4000<\/span><span class=\"p\">)<\/span>\n<\/code><\/pre>\n<div class=\"highlight__panel js-actions-panel\">\n<div class=\"highlight__panel-action js-fullscreen-code-action\">\n    <svg xmlns=\"http:\/\/www.w3.org\/2000\/svg\" width=\"20px\" height=\"20px\" viewbox=\"0 0 24 24\" class=\"highlight-action crayons-icon highlight-action--fullscreen-on\"><title>\u0648\u0627\u0631\u062f \u062d\u0627\u0644\u062a \u062a\u0645\u0627\u0645 \u0635\u0641\u062d\u0647 \u0634\u0648\u06cc\u062f<\/title>\n    <path d=\"M16 3h6v6h-2V5h-4V3zM2 3h6v2H4v4H2V3zm18 16v-4h2v6h-6v-2h4zM4 19h4v2H2v-6h2v4z\"\/>\n<\/svg><\/p>\n<p>    <svg xmlns=\"http:\/\/www.w3.org\/2000\/svg\" width=\"20px\" height=\"20px\" viewbox=\"0 0 24 24\" class=\"highlight-action crayons-icon highlight-action--fullscreen-off\"><title>\u0627\u0632 \u062d\u0627\u0644\u062a \u062a\u0645\u0627\u0645 \u0635\u0641\u062d\u0647 \u062e\u0627\u0631\u062c \u0634\u0648\u06cc\u062f<\/title>\n    <path d=\"M18 7h4v2h-6V3h2v4zM8 9H2V7h4V3h2v6zm10 8v4h-2v-6h6v2h-4zM8 15v6H6v-4H2v-2h6z\"\/>\n<\/svg><\/p>\n<\/div>\n<\/div>\n<\/div>\n<h2><span class=\"ez-toc-section\" id=\"%D8%B3%D9%BE%D8%B3_%F0%9F%8E%89%F0%9F%A5%B3\"><\/span>\n<p>  \u0633\u067e\u0633 \ud83c\udf89\ud83e\udd73<br \/>\n<span class=\"ez-toc-section-end\"><\/span><\/h2>\n<p><img decoding=\"async\" src=\"https:\/\/nabfollower.com\/blog\/wp-content\/uploads\/2023\/04\/1681217154_625_\u06cc\u06a9-\u0627\u062a\u0648\u0645\u0627\u0633\u06cc\u0648\u0646-\u062e\u0628\u0631\u0646\u0627\u0645\u0647-\u0645\u0641\u06cc\u062f-\u0628\u0627-Node-\u0648-Google-Spreadsheet-\u0627\u06cc\u062c\u0627\u062f.png\" alt=\"\u0646\u0633\u062e\u0647 \u0646\u0645\u0627\u06cc\u0634\u06cc \u0635\u0641\u062d\u0647 \u06af\u0633\u062a\u0631\u062f\u0647 Google\" loading=\"lazy\" width=\"800\" height=\"680\" title=\"\"><\/p>\n<h2><span class=\"ez-toc-section\" id=\"%D8%A8%D9%87_%D8%B7%D9%88%D8%B1_%D8%AE%D9%84%D8%A7%D8%B5%D9%87\"><\/span>\n<p>  \u0628\u0647 \u0637\u0648\u0631 \u062e\u0644\u0627\u0635\u0647<br \/>\n<span class=\"ez-toc-section-end\"><\/span><\/h2>\n<p>\u0627\u06a9\u0646\u0648\u0646 \u0645\u06cc\u200c\u062f\u0627\u0646\u06cc\u062f \u06a9\u0647 \u0686\u06af\u0648\u0646\u0647 \u0627\u0632 \u06cc\u06a9 \u06a9\u067e\u0686\u0627 \u0627\u0633\u062a\u0641\u0627\u062f\u0647 \u06a9\u0646\u06cc\u062f \u0648 \u0686\u06af\u0648\u0646\u0647 \u06cc\u06a9 \u0635\u0641\u062d\u0647 \u06af\u0633\u062a\u0631\u062f\u0647 Google \u0631\u0627 \u0628\u0631\u0627\u06cc \u062e\u0648\u062f\u06a9\u0627\u0631 \u06a9\u0631\u062f\u0646 \u0647\u0631 \u0641\u0631\u0622\u06cc\u0646\u062f \u0645\u0634\u0627\u0628\u0647 \u0645\u062a\u0635\u0644 \u0648 \u062f\u0633\u062a\u06a9\u0627\u0631\u06cc \u06a9\u0646\u06cc\u062f.<\/p>\n<p>\ud83d\udc49 \u0627\u0645\u06cc\u062f\u0648\u0627\u0631\u0645 \u0627\u06cc\u0646 \u0645\u062b\u0627\u0644 \u0628\u0631\u0627\u06cc \u0634\u0645\u0627 \u0627\u0644\u0647\u0627\u0645 \u0628\u062e\u0634 \u0628\u0627\u0634\u062f! <strong>\u0622\u06cc\u0627 \u0627\u06cc\u0646 \u0645\u0642\u0627\u0644\u0647 \u0628\u0631\u0627\u06cc \u0634\u0645\u0627 \u0645\u0641\u06cc\u062f \u0628\u0648\u062f\u061f<\/strong> \u0627\u06af\u0631 \u0686\u0646\u06cc\u0646 \u0627\u0633\u062a\u060c \u0645\u0646 \u0645\u062b\u0627\u0644 \u0647\u0627\u06cc \u0632\u06cc\u0627\u062f\u06cc \u0628\u0631\u0627\u06cc \u0628\u0647 \u0627\u0634\u062a\u0631\u0627\u06a9 \u06af\u0630\u0627\u0634\u062a\u0646 \u0628\u0627 \u0634\u0645\u0627 \u062f\u0627\u0631\u0645: \u062f\u0633\u062a\u0648\u0631 \u067e\u062e\u062a<\/p>\n<p>\u062f\u0631 \u0632\u06cc\u0631 \u062f\u0633\u062a\u0648\u0631 \u067e\u062e\u062a \u0622\u0645\u0627\u062f\u0647 \u0631\u0627 \u0645\u0634\u0627\u0647\u062f\u0647 \u062e\u0648\u0627\u0647\u06cc\u062f \u06a9\u0631\u062f: <br \/>https:\/\/recipe.znote.io\/recipes\/make-newsletter-with-node-and-google-spreadsheet?td=dark<\/p>\n<hr\/>\n<h2><span class=\"ez-toc-section\" id=\"%D8%A8%D8%B1%D9%88_%D8%AC%D9%84%D9%88%D8%AA%D8%B1\"><\/span>\n<p>  \u0628\u0631\u0648 \u062c\u0644\u0648\u062a\u0631<br \/>\n<span class=\"ez-toc-section-end\"><\/span><\/h2>\n<p>\u0627\u06af\u0631 \u0628\u0647 \u062f\u0646\u0628\u0627\u0644 \u06cc\u06a9 \u0632\u0645\u06cc\u0646 \u0628\u0627\u0632\u06cc JS \u06a9\u0627\u0631\u0622\u0645\u062f \u0628\u0631\u0627\u06cc \u0627\u062f\u0627\u0645\u0647 \u0646\u0645\u0648\u0646\u0647 \u0633\u0627\u0632\u06cc \u0647\u0633\u062a\u06cc\u062f\u060c \u0628\u0647 \u0628\u0631\u0646\u0627\u0645\u0647 \u0645\u0646 \u0646\u06af\u0627\u0647\u06cc \u0628\u06cc\u0646\u062f\u0627\u0632\u06cc\u062f \ud83d\udc49 <strong>\u0627\u06cc\u0646\u062c\u0627<\/strong> (\u0627\u0632 \u0646\u0638\u0631 \u062f\u0627\u062f\u0646 \u062e\u0648\u0634\u062d\u0627\u0644 \u0645\u06cc\u0634\u0645)<\/p>\n<p>\u062f\u0631 \u0647\u0645\u06cc\u0646 \u062d\u0627\u0644\u060c \u0634\u0631\u0648\u0639 \u0628\u0647 \u062a\u0628\u062f\u06cc\u0644 \u06a9\u0627\u0631\u0647\u0627\u06cc \u0631\u0648\u0632\u0627\u0646\u0647 \u062e\u0648\u062f \u0628\u0647 \u0686\u06cc\u0632\u06cc \u0622\u0633\u0627\u0646 \u0648 \u0642\u0627\u0628\u0644 \u062a\u06a9\u0631\u0627\u0631 \u06a9\u0646\u06cc\u062f \u0648 \u06a9\u0627\u0631 \u0634\u0645\u0627 \u0633\u0631\u06af\u0631\u0645 \u06a9\u0646\u0646\u062f\u0647 \u062a\u0631 \u062e\u0648\u0627\u0647\u062f \u0628\u0648\u062f.  \ud83c\udf08\ufe0f<\/p>\n<p>\u0634\u0645\u0627 \u0645\u06cc \u062a\u0648\u0627\u0646\u06cc\u062f \u0648\u0628\u0644\u0627\u06af \u0645\u0646 \ud83d\udc49 \u0627\u06cc\u0646\u062c\u0627 \u0631\u0627 \u0628\u0631\u0631\u0633\u06cc \u06a9\u0646\u06cc\u062f<\/p>\n<p>\u0648 \u0641\u0631\u0627\u0645\u0648\u0634 \u0646\u06a9\u0646\u06cc\u062f \u06a9\u0647 \u062f\u0631 \u062e\u0628\u0631\u0646\u0627\u0645\u0647 \u0645\u0646 \u0645\u0634\u062a\u0631\u06a9 \u0634\u0648\u06cc\u062f!  \ud83d\ude04<\/p>\n<p><img decoding=\"async\" alt=\"\u0627\u0633\u06a9\u0631\u06cc\u0646 \u0634\u0627\u062a znote\" src=\"https:\/\/nabfollower.com\/blog\/wp-content\/uploads\/2023\/04\/1681217154_833_\u06cc\u06a9-\u0627\u062a\u0648\u0645\u0627\u0633\u06cc\u0648\u0646-\u062e\u0628\u0631\u0646\u0627\u0645\u0647-\u0645\u0641\u06cc\u062f-\u0628\u0627-Node-\u0648-Google-Spreadsheet-\u0627\u06cc\u062c\u0627\u062f.png\" loading=\"lazy\" width=\"800\" height=\"420\" title=\"\"><\/p>\n<\/p><\/div>\n","protected":false},"excerpt":{"rendered":"<p>\u0633\u0644\u0627\u0645 \u0628\u0647 \u0647\u0645\u0647 \ud83d\udc4b\u060c \u0627\u0645\u0631\u0648\u0632 \u0628\u0647 \u0634\u0645\u0627 \u0646\u0634\u0627\u0646 \u0645\u06cc \u062f\u0647\u0645 \u06a9\u0647 \u0686\u06af\u0648\u0646\u0647 \u0627\u062e\u06cc\u0631\u0627\u064b \u0627\u0632 Mailchimp \u0628\u0647 \u06cc\u06a9 \u0631\u0627\u0647 \u062d\u0644 \u062f\u0627\u062e\u0644\u06cc \u062a\u063a\u06cc\u06cc\u0631 \u062f\u0627\u062f\u0647 \u0627\u0645 \u0628\u0631\u0627\u06cc \u0630\u062e\u06cc\u0631\u0647 \u0627\u06cc\u0645\u06cc\u0644 \u0647\u0627\u06cc \u0645\u0646 \u0628\u0627 Node API \u0648 Google Spreadsheet. \u062f\u0631 \u0627\u06cc\u0646\u062c\u0627 \u0646\u062d\u0648\u0647 \u0627\u0633\u062a\u0641\u0627\u062f\u0647 \u0631\u0627 \u062e\u0648\u0627\u0647\u06cc\u0645 \u062f\u06cc\u062f Recaptcha \u0648 \u062a\u0639\u0627\u0645\u0644 \u0628\u0627 a \u0635\u0641\u062d\u0647 \u06af\u0633\u062a\u0631\u062f\u0647 \u06af\u0648\u06af\u0644 \u0628\u0631\u0627\u06cc \u0627\u06cc\u0646 \u0622\u0645\u0648\u0632\u0634\u060c \u0645\u0646 \u0628\u0647 \u0635\u0648\u0631\u062a &hellip;<\/p>\n","protected":false},"author":2,"featured_media":16897,"comment_status":"open","ping_status":"closed","sticky":false,"template":"","format":"standard","meta":{"fifu_image_url":"","fifu_image_alt":"","footnotes":""},"categories":[339],"tags":[],"class_list":["post-16895","post","type-post","status-publish","format-standard","has-post-thumbnail","hentry","category-dev"],"_links":{"self":[{"href":"https:\/\/nabfollower.com\/blog\/wp-json\/wp\/v2\/posts\/16895","targetHints":{"allow":["GET"]}}],"collection":[{"href":"https:\/\/nabfollower.com\/blog\/wp-json\/wp\/v2\/posts"}],"about":[{"href":"https:\/\/nabfollower.com\/blog\/wp-json\/wp\/v2\/types\/post"}],"author":[{"embeddable":true,"href":"https:\/\/nabfollower.com\/blog\/wp-json\/wp\/v2\/users\/2"}],"replies":[{"embeddable":true,"href":"https:\/\/nabfollower.com\/blog\/wp-json\/wp\/v2\/comments?post=16895"}],"version-history":[{"count":0,"href":"https:\/\/nabfollower.com\/blog\/wp-json\/wp\/v2\/posts\/16895\/revisions"}],"wp:featuredmedia":[{"embeddable":true,"href":"https:\/\/nabfollower.com\/blog\/wp-json\/wp\/v2\/media\/16897"}],"wp:attachment":[{"href":"https:\/\/nabfollower.com\/blog\/wp-json\/wp\/v2\/media?parent=16895"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/nabfollower.com\/blog\/wp-json\/wp\/v2\/categories?post=16895"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/nabfollower.com\/blog\/wp-json\/wp\/v2\/tags?post=16895"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}