// ==UserScript==
// @name AliExpress Parse Orders Information to CSV
// @namespace http://tampermonkey.net/
// @version 0.3
// @description Parse AliExpress order page into a CSV file suitable for spreadsheet use.
// @author Hegy
// @match https://www.aliexpress.com/p/order/index.html*
// @icon https://www.google.com/s2/favicons?sz=64&domain=aliexpress.com
// @grant none
// @license MIT
// ==/UserScript==
// 2024-03-26
(function() {
'use strict';
// Function to convert data to CSV format
function convertToCSV(data) {
const header = ['1','2','3','4','Date', 'Order ID', 'Image Formula', 'Name', 'SKU', 'Order URL', 'Product URL', 'Price', 'Quantity', 'Total Price'];
const csv = [header.join('\t')];
data.forEach(row => {
csv.push(row.join('\t'));
});
return csv.join('\n');
}
// Function to extract data from each order item
function extractOrderData(orderItem) {
const orderHeader = orderItem.querySelector('.order-item-header-right-info');
const dateText = orderHeader.querySelector('div:first-child').innerText.trim();
const date = dateText.replace('Order date: ', ''); // Extracting date only
const orderIdText = orderHeader.querySelector('div:last-child').innerText.trim();
const orderId = orderIdText.replace("Order ID: ", "'").replace('\nCopy', ''); // Extracting order ID only
const orderUrl = 'https://www.aliexpress.com/p/order/detail.html?orderId=' + orderId.replace("'", "");
const contentBody = orderItem.querySelector('.order-item-content-body');
const url = contentBody.querySelector('a').getAttribute('href').replace('//', 'https://');
const imageStyle = orderItem.querySelector('.order-item-content-img').getAttribute('style');
const imageUrl = imageStyle.match(/url\("([^"]+)"/)[1];
const imageUrlFormula = '=IMAGE("'+ imageUrl + '")';
// const name = orderItem.querySelector('.order-item-content-info-name span[title]').getAttribute('title');
const name = orderItem.querySelector('.order-item-content-info-name span[title]') ? orderItem.querySelector('.order-item-content-info-name span[title]').getAttribute('title') : null;
// const sku = orderItem.querySelector('.order-item-content-info-sku').innerText.trim();
const sku = orderItem.querySelector('.order-item-content-info-sku') ? orderItem.querySelector('.order-item-content-info-sku').innerText.trim() : null;
const numberParent = orderItem.querySelector('.order-item-content-info-number');
// const numberFull = numberParent.querySelector('div:first-child').innerText.trim();
const numberFull = numberParent ? numberParent.querySelector('div:first-child').innerText.trim() : null;
// const price = numberFull.replace('US $', '').replace('.', ',');
const price = numberFull ? numberFull.replace('US $', '').replace('.', ',') : null;
const quantityFull = orderItem.querySelector('.order-item-content-info-number-quantity') ? orderItem.querySelector('.order-item-content-info-number-quantity').innerText.trim() : null;
const quantity = quantityFull ? quantityFull.replace('x', '') : null;
const priceSpans = orderItem.querySelectorAll('.order-item-content-opt-price-total span');
let totalPrice = '';
priceSpans.forEach(span => {
totalPrice += span.innerText.trim();
});
totalPrice = totalPrice.replace('US $', '').replace('.', ',');
return ['', '', '', '', date, orderId, imageUrlFormula, name, sku, orderUrl, url, price, quantity, totalPrice];
}
// Function to run when button is clicked
function runScript() {
const orderItems = document.querySelectorAll('.order-item');
const dataStraight = [];
orderItems.forEach(orderItem => {
dataStraight.push(extractOrderData(orderItem));
});
const data = dataStraight.reverse();
// Convert data to CSV format
const csvContent = convertToCSV(data);
// Download CSV file
const blob = new Blob([csvContent], { type: 'text/csv;charset=utf-8;' });
const link = document.createElement('a');
link.href = window.URL.createObjectURL(blob);
link.download = 'order_data.csv';
link.style.display = 'none';
document.body.appendChild(link);
link.click();
document.body.removeChild(link);
}
// Create and style the button
const button = document.createElement('button');
button.textContent = 'Extract Order Data';
button.style.position = 'fixed';
button.style.top = '20px';
button.style.left = '50%';
button.style.transform = 'translateX(-50%)';
button.style.padding = '10px 20px';
button.style.border = 'none';
button.style.borderRadius = '5px';
button.style.background = '#007bff';
button.style.color = '#fff';
button.style.cursor = 'pointer';
button.addEventListener('click', runScript);
// Add the button to the page
document.body.appendChild(button);
})();