Skip to content

Instantly share code, notes, and snippets.

@samsoft00
Created August 16, 2024 06:11
Show Gist options
  • Save samsoft00/2576d09b9d2afed2a28f1811de98cf16 to your computer and use it in GitHub Desktop.
Save samsoft00/2576d09b9d2afed2a28f1811de98cf16 to your computer and use it in GitHub Desktop.
// Seller Snap API Script
function createMenu(){
let ui = SpreadsheetApp.getUi();
ui.createMenu('Automation')
.addItem("Get SellerSnap Data", "getSellerSnapData")
.addToUi();
}
function getEnv(key) {
return PropertiesService.getScriptProperties().getProperty(key);
}
function objectToUrlParams(obj) {
return Object.entries(obj)
.map(([key, value]) => `${encodeURIComponent(key)}=${encodeURIComponent(value)}`)
.join('&');
}
function getCurrentDate(minusDate = null) {
const now = new Date();
const yesterday = new Date(now);
if(minusDate !== null) {
yesterday.setDate(yesterday.getDate() - minusDate);
}
const noonString = Utilities.formatDate(yesterday, Session.getScriptTimeZone(), 'MM/dd/yyyy');
Logger.log({timezone: Session.getScriptTimeZone(), noonString})
return noonString
}
function getSellerSnapData(evt) {
const STORE_ID = 1231;
const USERNAME = getEnv("USERNAME");
const PASSWORD = getEnv("PASSWORD");
const STORE_URL = `https://api.sellersnap.io/store/${STORE_ID}/listings/data`;
const AUTHENTICATION = Utilities.base64Encode(`${USERNAME}:${PASSWORD}`).toString();
//GET SHEET
var spreadsheet = SpreadsheetApp.getActiveSpreadsheet();
var sheet = spreadsheet.getActiveSheet();
// Clear Sheet
sheet.clear();
// HEADER OPTIONS
var options = {
'method':'get',
'contentType':'application/json',
'muteHttpExceptions': true,
'headers': {
'authorization':`Basic ${AUTHENTICATION}`,
}
}
// QUERY PARAMS ~ ?date=06/21/2024&analytics_days_back=7
var queryParams = {
'filter_preset': 'api',
'analytics_days_back': 30, // 30 days
'date': getCurrentDate(1)
}
var jsonData = [];
function fetchData(url){
try{
var response = UrlFetchApp.fetch(url, options);
var result = JSON.parse(response.getContentText());
jsonData = jsonData.concat(result.data);
if (result.meta.pagination.links.next) {
fetchData(result.meta.pagination.links.next);
}
}catch(err){ // Handle error here
Logger.log(err);
throw err;
}
}
var params = objectToUrlParams(queryParams);
var sellerSnapUrl = STORE_URL.concat('?', params);
fetchData(sellerSnapUrl);
// Remove the unwanted key "fees_structure" from each object
jsonData = jsonData.map(item => {
const {
fees_structure,
image_url,
tags,
date_created,
last_purchase_date,
...rest} = item;
return {store_id: STORE_ID, ...rest, tags: tags.join(';'), date_created, last_purchase_date};
})
// Convert to CSV
var headers = Object.keys(jsonData[0]);
const csvData = jsonData.map(row => headers.map(header => row[header]));
csvData.unshift(headers);
// Write Data to sheet
sheet.getRange(1, 1, csvData.length, headers.length).setValues(csvData);
// Auto-resize columns
sheet.autoResizeColumns(1, headers.length);
}
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment