Advertisement
Namokonov

parsim_tg

Nov 22nd, 2021
991
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
  1. /*
  2. Таблица с примером https://docs.google.com/spreadsheets/d/1rAPjEdhDjx-cfbQ3jIJGS2CezSSqLBN39fQYz4dlVcg/edit#gid=0
  3.  
  4. ✅ Канал о Таблицах: https://t.me/google_sheets
  5. ✅ Чат: https://t.me/google_spreadsheets_chat
  6. ✅ Оглавление канала: https://goo.gl/HdS2qn
  7. */
  8.  
  9. let reg_exps = [/div class="tgme_widget_message_text js-message_text" dir="auto">(.+?)<\/div/, /tgme_widget_message_views">(.+?)</, /background-image:url\('(.+?)'/];
  10.  
  11. function main() {
  12.   let ss = SpreadsheetApp.getActive();
  13.   let sheet_config = ss.getSheetByName('Настройки');
  14.   let sheet_logs = ss.getSheetByName('Логи');
  15.  
  16.   let config = sheet_config.getDataRange().getValues().slice(1).forEach((row, i) => {
  17.     let [channel, start, n] = [row[0].match(/(.+)\//)?.[1], row[0].match(/\/(\d+)$/)?.[1], row[1]];
  18.     if (channel && start && n) {
  19.       let requests = create_requests(channel, start*1, n*1);
  20.       let responses = UrlFetchApp.fetchAll(requests);
  21.       let data = responses.map((response, i) => {
  22.         response = response.toString();
  23.         return [new Date(), requests[i]['url']].concat(reg_exps.map(reg_exp => response.match(reg_exp)?.[1]));
  24.       })
  25.  
  26.       let logs = [[new Date(), requests.length]];
  27.       sheet_config.getRange(i + 2, 3, logs.length, logs[0].length).setValues(logs);
  28.       sheet_logs.getRange(sheet_logs.getLastRow() + 1, 1, data.length, data[0].length).setValues(data);
  29.     }
  30.   })
  31. }
  32.  
  33. function create_requests(channel, start, n) {
  34.   let requests = [];
  35.   while (n) {
  36.     n--;
  37.     requests.push({ 'url': `${channel}/${start + n}?embed=1`, 'muteHttpExceptions': true });
  38.   }
  39.   return requests;
  40. }
  41.  
  42.  
  43. function onOpen(e) {
  44.   SpreadsheetApp.getUi()
  45.     .createMenu("🐧")
  46.     .addItem("Парсим!", "main")
  47.     .addToUi();
  48. }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement