Advertisement
Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- function cashstarExtract() {
- var threads = GmailApp.search('label:cashstar-extract');
- var columns = ['code', 'pin', 'to'];
- var data = {};
- var tags = []
- var requests = [];
- var responses = [];
- // Scrap emails
- Logger.log('Collecting emails...');
- for (var i = 0; i < threads.length; i++) {
- var messages = threads[i].getMessages();
- for (var j = 0; j < messages.length; j++) {
- var to = messages[j].getTo();
- var body = messages[j].getPlainBody();
- var exec = /https:\/\/bestbuy\.cashstar\.com\/gift-card\/view\/(\w+)\//.exec(body);
- data[exec[1]] = {to: to, url: exec[0], tag: exec[1]};
- tags.push(exec[1]);
- }
- }
- // Requests 1: csrfmiddlewaretoken
- Logger.log('Fetching tokens...');
- requests = tags.map(function(tag) {
- return {
- url: data[tag].url,
- method: 'get',
- };
- });
- responses = UrlFetchApp.fetchAll(requests);
- for (var i = 0; i < tags.length; i++) {
- var body = responses[i].getContentText();
- var token = /<input type='hidden' name='csrfmiddlewaretoken' value='(\w+)' \/>/.exec(body)[1];
- data[tags[i]].token = token;
- }
- // Request 2: Key
- Logger.log('Fetching keys...');
- requests = tags.map(function(tag) {
- return {
- url: data[tag].url,
- method: 'post',
- followRedirects: false,
- payload: {
- csrfmiddlewaretoken: data[tag].token,
- value: data[tag].to,
- },
- };
- });
- responses = UrlFetchApp.fetchAll(requests);
- for (var i = 0; i < tags.length; i++) {
- var header = responses[i].getHeaders()['Location'];
- var key = /\/recipient-experience\/redemption\/\w+\/(\w+)\//.exec(header)[1];
- data[tags[i]].key = key;
- }
- // Request 3: GC codes
- Logger.log('Fetching codes...');
- requests = [];
- requests = tags.map(function(tag) {
- return {
- url: Utilities.formatString('https://bestbuy.cashstar.com/recipient-experience/redemption/%s/%s/?continue=true', tag, data[tag].key),
- method: 'get',
- };
- });
- responses = UrlFetchApp.fetchAll(requests);
- for (var i = 0; i < tags.length; i++) {
- var body = responses[i].getContentText();
- var code = /https:\/\/bc-s.cashstar.com\/v1\/barcode\/(\d{16})\/format\/CODE128/.exec(body)[1];
- var pin = /<p>PIN: (\d{4})<\/p>/i.exec(body)[1];
- data[tags[i]].code = code;
- data[tags[i]].pin = pin;
- }
- // Send to sheet
- Logger.log('Writing to sheet...');
- var sheetName = 'Cashstar - ' + new Date().toString();
- var sheet = SpreadsheetApp.create(sheetName).getSheets()[0];
- sheet.appendRow(columns);
- var range = sheet.getRange(2, 1, tags.length, columns.length);
- range.setNumberFormat('@STRING@');
- var values = tags.map(function(tag) {
- return columns.map(function(column) {
- return data[tag][column];
- });
- });
- range.setValues(values);
- // Finish
- Logger.log('%s rows written to %s.', tags.length, sheetName);
- }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement