Advertisement
Guest User

Untitled

a guest
Jan 22nd, 2018
288
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
  1. function cashstarExtract() {
  2.   var threads = GmailApp.search('label:cashstar-extract');
  3.   var columns = ['code', 'pin', 'to'];
  4.   var data = {};
  5.   var tags = []
  6.   var requests = [];
  7.   var responses = [];
  8.  
  9.   // Scrap emails
  10.  
  11.   Logger.log('Collecting emails...');
  12.  
  13.   for (var i = 0; i < threads.length; i++) {
  14.     var messages = threads[i].getMessages();
  15.    
  16.     for (var j = 0; j < messages.length; j++) {
  17.       var to = messages[j].getTo();
  18.       var body = messages[j].getPlainBody();
  19.       var exec = /https:\/\/bestbuy\.cashstar\.com\/gift-card\/view\/(\w+)\//.exec(body);
  20.      
  21.       data[exec[1]] = {to: to, url: exec[0], tag: exec[1]};
  22.       tags.push(exec[1]);
  23.     }
  24.   }
  25.  
  26.   // Requests 1: csrfmiddlewaretoken
  27.  
  28.   Logger.log('Fetching tokens...');
  29.  
  30.   requests = tags.map(function(tag) {
  31.     return {
  32.       url: data[tag].url,
  33.       method: 'get',
  34.     };
  35.   });
  36.  
  37.   responses = UrlFetchApp.fetchAll(requests);
  38.  
  39.   for (var i = 0; i < tags.length; i++) {
  40.     var body = responses[i].getContentText();
  41.     var token = /<input type='hidden' name='csrfmiddlewaretoken' value='(\w+)' \/>/.exec(body)[1];
  42.    
  43.     data[tags[i]].token = token;
  44.   }
  45.  
  46.   // Request 2: Key
  47.  
  48.   Logger.log('Fetching keys...');
  49.  
  50.   requests = tags.map(function(tag) {
  51.     return {
  52.       url: data[tag].url,
  53.       method: 'post',
  54.       followRedirects: false,
  55.       payload: {
  56.         csrfmiddlewaretoken: data[tag].token,
  57.         value: data[tag].to,
  58.       },
  59.     };
  60.   });
  61.  
  62.   responses = UrlFetchApp.fetchAll(requests);
  63.  
  64.   for (var i = 0; i < tags.length; i++) {
  65.     var header = responses[i].getHeaders()['Location'];
  66.     var key = /\/recipient-experience\/redemption\/\w+\/(\w+)\//.exec(header)[1];
  67.    
  68.     data[tags[i]].key = key;
  69.   }
  70.  
  71.   // Request 3: GC codes
  72.  
  73.   Logger.log('Fetching codes...');
  74.  
  75.   requests = [];
  76.  
  77.   requests = tags.map(function(tag) {
  78.     return {
  79.       url: Utilities.formatString('https://bestbuy.cashstar.com/recipient-experience/redemption/%s/%s/?continue=true', tag, data[tag].key),
  80.       method: 'get',
  81.     };
  82.   });
  83.  
  84.   responses = UrlFetchApp.fetchAll(requests);
  85.  
  86.   for (var i = 0; i < tags.length; i++) {
  87.     var body = responses[i].getContentText();
  88.     var code = /https:\/\/bc-s.cashstar.com\/v1\/barcode\/(\d{16})\/format\/CODE128/.exec(body)[1];
  89.     var pin = /<p>PIN: (\d{4})<\/p>/i.exec(body)[1];
  90.    
  91.     data[tags[i]].code = code;
  92.     data[tags[i]].pin = pin;
  93.   }
  94.  
  95.   // Send to sheet
  96.  
  97.   Logger.log('Writing to sheet...');
  98.  
  99.   var sheetName = 'Cashstar - ' + new Date().toString();
  100.   var sheet = SpreadsheetApp.create(sheetName).getSheets()[0];
  101.   sheet.appendRow(columns);
  102.  
  103.   var range = sheet.getRange(2, 1, tags.length, columns.length);
  104.   range.setNumberFormat('@STRING@');
  105.  
  106.   var values = tags.map(function(tag) {
  107.     return columns.map(function(column) {
  108.       return data[tag][column];
  109.     });
  110.   });
  111.  
  112.   range.setValues(values);
  113.  
  114.   // Finish
  115.  
  116.   Logger.log('%s rows written to %s.', tags.length, sheetName);
  117. }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement