Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- /*
- Таблица с примером https://docs.google.com/spreadsheets/d/161b7qSFSpJh8MMDeKjMRfPUqAFLT4VEqL_PPgV4Wm0o/edit?usp=sharing
- ✅ Канал о Таблицах: https://t.me/google_sheets
- ✅ Чат: https://t.me/google_spreadsheets_chat
- ✅ Оглавление канала: https://goo.gl/HdS2qn
- */
- let d = {
- range: "a2:a",
- regExp: 'img src="(.+?)"'
- }
- function onOpen(e) {
- SpreadsheetApp.getUi()
- .createMenu("СКРИПТЫ")
- .addItem("запустить!", "main")
- .addToUi();
- }
- function main() {
- let sh = SpreadsheetApp.getActive();
- let range = sh.getRange(d.range);
- let urls = range.getValues();
- let requests = create_rqsts(urls);
- let response = fetch_all_all_all(requests);
- let matchall = match_all_all_all_all(response);
- let image_urls = redesign(urls, matchall)
- range.offset(0, 1).setValues(image_urls);
- }
- function create_rqsts(urls) {
- return urls.map(row => isURL(row[0]) ? { url: row[0], muteHttpExceptions: true } : '')
- .filter(t => t)
- }
- function fetch_all_all_all(req) {
- let response = UrlFetchApp.fetchAll(req);
- return response;
- }
- function match_all_all_all_all(array) {
- return array.map(page => {
- let m = page.toString().matchAll(d.regExp);
- return 'https://adv-map.com' + [...m]?.[1]?.[1] || '-'
- })
- }
- function redesign(urls, data) {
- return urls.map((h, i) => [isURL(h[0]) ? data[urls.slice(0, i + 1).filter(f => f[0]).length - 1] : '-']);
- }
- function isURL(str) {
- var pattern = new RegExp('^(https?:\\/\\/)?' + // protocol
- '((([a-z\\d]([a-z\\d-]*[a-z\\d])*)\\.?)+[a-z]{2,}|' + // domain name
- '((\\d{1,3}\\.){3}\\d{1,3}))' + // OR ip (v4) address
- '(\\:\\d+)?(\\/[-a-z\\d%_.~+]*)*' + // port and path
- '(\\?[;&a-z\\d%_.~+=-]*)?' + // query string
- '(\\#[-a-z\\d_]*)?$', 'i'); // fragment locator
- return pattern.test(str);
- }
Add Comment
Please, Sign In to add comment