diff --git a/.gitignore b/.gitignore
new file mode 100644
index 0000000..485dee6
--- /dev/null
+++ b/.gitignore
@@ -0,0 +1 @@
+.idea
diff --git a/README.md b/README.md
index a4eabd7..12a7ad7 100644
--- a/README.md
+++ b/README.md
@@ -9,27 +9,17 @@ About
JavaScript, um eine tabellarische Übersicht aller auf amazon.de getätigten Bestellungen zu erhalten.
-Original Idee und Thread:
-https://ngb.to/threads/1525-Amazon-Bestellungen-Exportieren-(the-hard-way)
-
-Anleitung von hier:
-http://jhein.de/2013/08/04/liste-mit-amazon-bestellungen-exportieren/
-
How To
--
* Auf Amazon.de einloggen
-* Developer-Tools des Browsers (z.B. [Chrome](https://developer.chrome.com/devtools/docs/console), [Firefox](https://developer.mozilla.org/en-US/docs/Tools/Web_Console) oder [Safari](https://developer.apple.com/safari/tools/)) öffnen
-* kompletten Inhalt des Scripts in die Javascript-Konsole kopieren
-* Enter-Taste betätigen
-
-Oder einfach das [Bookmarklet](amazonparser-bookmarklet.html) verwenden.
+* Git-Repo clonen
+* Chrome Extentions öffnen
+* "Load unpacked extension" anklicken und geclontes Verzeichnis angeben
Hinweise
--
* Im Browser müssen für amazon.de (oder generell) Popups erlaubt werden.
-* Unter Firefox muss in den erweiterten Einstellungen (*about:config*) die Einstellung *dom.popup_maximum* auf einen ausreichend hohen Wert (z.B. 100) gesetzt werden.
* Achtung! Das ist nichts für schwache Rechner. Je nach Umfang der Bestellhistorie werden dutzende Tabs/Fenster geöffnet und deren Inhalt gecrawlt. Bei einer extrem umfangreichen Bestellhistorie kann der Browser durchaus auch abstürzen.
-* Dieses Skript funktioniert nicht unter IE. Chrome 37 stürzt mitten in der Durchführung ab. Mit Chrome 35 hat es noch funktioniert.
\ No newline at end of file
diff --git a/amazonparser-bookmarklet.html b/amazonparser-bookmarklet.html
deleted file mode 100644
index 9e3119e..0000000
--- a/amazonparser-bookmarklet.html
+++ /dev/null
@@ -1,10 +0,0 @@
-
-
amazon-parser Bookmarklet
-
-amazon-parser Bookmarklet
-
-Einfach den folgenden Link als Lesezeichen abspeichern oder mit der Maus in die Lesezeichenleiste ziehen: Amazon Bestellhistorie
-
-Dann einfach bei Amazon.de einloggen und das Lesezeichen aufrufen.
-
-
\ No newline at end of file
diff --git a/amazonparser.js b/amazonparser.js
index e0da4f0..49dec7d 100644
--- a/amazonparser.js
+++ b/amazonparser.js
@@ -1,597 +1,601 @@
-function getClassElement( node, name )
-{
- if (node == null)
- return null;
-
- if( node.className == name ) return node;
- for( var i = 0; i < node.childNodes.length; i++ )
- {
- var element = getClassElement( node.childNodes[ i ], name );
- if( element ) return element;
- }
- return null;
-}
-
-function getClassElements( node, name )
-{
- if (node == null)
- return null;
-
- if( node.className == name ) return [ node ];
- var elements = [];
- for( var i = 0; i < node.childNodes.length; i++ )
- {
- elements = elements.concat( getClassElements( node.childNodes[ i ], name ) );
- }
- return elements;
-}
+(function() {
-function getTagElement( node, name )
-{
- if( node.nodeName == name ) return node;
- for( var i = 0; i < node.childNodes.length; i++ )
+ function getClassElement( node, name )
{
- var child = getTagElement( node.childNodes[ i ], name );
- if( child ) return child;
- }
- return null;
-}
-
-function findOrders( doc, year, page )
-{
- var orderLevels = doc.getElementsByClassName( "order-info" );
- var orderBars = doc.getElementsByClassName( "a-box-group a-spacing-base" );
+ if (node == null)
+ return null;
- orders[ year ].pages[ page ].done = true;
-
- if( orderLevels.length != orderBars.length )
- {
- console.log( "Syntax Error " + year + "/" + page );
- return;
+ if( node.className == name ) return node;
+ for( var i = 0; i < node.childNodes.length; i++ )
+ {
+ var element = getClassElement( node.childNodes[ i ], name );
+ if( element ) return element;
+ }
+ return null;
}
- for( var i = 0; i < orderLevels.length; i++ )
+ function getClassElements( node, name )
{
- var order = { "price" : "0,00", "date" : "?", "link" : "", "names" : [], "prices" : [], "products" : 0 , "recip" : ""};
+ if (node == null)
+ return null;
- var priceElement = getClassElement( orderLevels[ i ], "a-column a-span2" );
- if( priceElement )
+ if( node.className == name ) return [ node ];
+ var elements = [];
+ for( var i = 0; i < node.childNodes.length; i++ )
{
- // sometimes there is no price listed next to the item anymore, so we have to check that and insert 0,00 if it's missing
- var price_tag = priceElement.getElementsByClassName('a-color-secondary value');
- if (price_tag.length > 0) {
- order.price = priceElement.getElementsByClassName('a-color-secondary value')[0].innerHTML.replace(/EUR/,"").replace(/Summe/,"").replace(/.*coins/i,"0,00").trim();
- }
- else {
- order.price = "0,00";
- }
- }
- else
- {
- console.log( "No price found " + year + "/" + page );
+ elements = elements.concat( getClassElements( node.childNodes[ i ], name ) );
}
+ return elements;
+ }
- var recipElement = getClassElement( orderLevels[ i ], "a-column a-span6 recipient a-span-last" );
- if( recipElement )
- {
- var recip_tag = recipElement.getElementsByClassName('trigger-text');
- if (recip_tag.length > 0) {
- order.recip = recipElement.getElementsByClassName('trigger-text')[0].innerHTML.trim();
- }
- else {
- order.recip = "?";
- }
- }
- else
- {
- console.log( "No recipient found " + year + "/" + page );
- }
-
- var dateElement = getClassElement( orderLevels[ i ], "a-color-secondary value" );
- if( dateElement )
- {
- order.date = dateElement.innerHTML.trim();
- }
- else
+ function getTagElement( node, name )
+ {
+ if( node.nodeName == name ) return node;
+ for( var i = 0; i < node.childNodes.length; i++ )
{
- console.log( "No date found " + year + "/" + page );
+ var child = getTagElement( node.childNodes[ i ], name );
+ if( child ) return child;
}
+ return null;
+ }
- var linkElement = orderLevels[ i ].getElementsByTagName('a')[1];
- if( linkElement )
- {
- order.link = linkElement.href;
- }
- else
+ function findOrders( doc, year, page )
+ {
+ var orderLevels = doc.getElementsByClassName( "order-info" );
+ var orderBars = doc.getElementsByClassName( "a-box-group a-spacing-base" );
+
+ orders[ year ].pages[ page ].done = true;
+
+ if( orderLevels.length != orderBars.length )
{
- console.log( "No link found " + year + "/" + page );
+ console.log( "Syntax Error " + year + "/" + page );
+ return;
}
- var nameElements = getClassElements( orderBars[ i ], "a-fixed-left-grid-col a-col-right" );
- if( nameElements.length > 0 )
+ for( var i = 0; i < orderLevels.length; i++ )
{
- var names = [];
- var prices = [];
-
- for( var j = 0; j < nameElements.length; j++ )
+ var order = { "price" : "0,00", "date" : "?", "link" : "", "names" : [], "prices" : [], "products" : 0 , "recip" : ""};
+
+ var priceElement = getClassElement( orderLevels[ i ], "a-column a-span2" );
+ if( priceElement )
{
- // sometimes there is no link to the item, then we have to fetch the name of the item from the div tag
- var a_tags = nameElements[ j ].getElementsByTagName('A');
- if (a_tags.length > 0) {
- names.push( nameElements[ j ].getElementsByTagName('A')[0].innerHTML.trim() );
+ // sometimes there is no price listed next to the item anymore, so we have to check that and insert 0,00 if it's missing
+ var price_tag = priceElement.getElementsByClassName('a-color-secondary value');
+ if (price_tag.length > 0) {
+ order.price = priceElement.getElementsByClassName('a-color-secondary value')[0].innerHTML.replace(/EUR/,"").replace(/Summe/,"").replace(/.*coins/i,"0,00").trim();
}
else {
- names.push( nameElements[ j ].getElementsByTagName('DIV')[0].innerHTML.trim() );
- }
-
- var a_price = getClassElement(nameElements[j],'a-size-small a-color-price');
- if (a_price) {
- prices.push(a_price.textContent.trim());
+ order.price = "0,00";
}
}
- order.names = names;
- order.prices = prices;
- order.products = names.length;
- }
- else
- {
- console.log( "No names found " + year + "/" + page );
- }
-
- orders[ year ].pages[ page ].entries.push( order );
- }
-}
-
-function findShipments(doc, year, page) {
- var orderElements = doc.getElementsByClassName('a-box-group a-spacing-base');
- for (var i = 0; i < orderElements.length; i++) {
-
- var orderNumber = "";
- var orderPrice = "";
- var orderDate = "";
-
- var orderInfo = orderElements[i].getElementsByClassName('order-info');
- if (orderInfo.length == 1) {
-
- var colRight = orderInfo[0].getElementsByClassName('a-col-right');
- if (colRight.length == 1 ) {
- var orderNrElements = colRight[0].getElementsByClassName('a-color-secondary value');
- if (orderNrElements.length > 0) {
- orderNumber = orderNrElements[0].textContent.trim();
- }
- else {
- console.log('No order number found ' + year + '/' + page);
- }
- }
- else {
- console.log('No order number found ' + year + '/' + page);
+ else
+ {
+ console.log( "No price found " + year + "/" + page );
}
- var priceElement = getClassElement(orderElements[i], 'a-column a-span2');
- if (priceElement) {
- var price_tag = priceElement.getElementsByClassName('a-color-secondary value');
- if (price_tag.length > 0) {
- orderPrice = priceElement.getElementsByClassName('a-color-secondary value')[0].innerHTML.replace(/EUR/, '').replace(/Summe/, '').replace(/.*coins/i, '0,00').trim();
- } else {
- orderPrice = '0,00';
+ var recipElement = getClassElement( orderLevels[ i ], "a-column a-span6 recipient a-span-last" );
+ if( recipElement )
+ {
+ var recip_tag = recipElement.getElementsByClassName('trigger-text');
+ if (recip_tag.length > 0) {
+ order.recip = recipElement.getElementsByClassName('trigger-text')[0].innerHTML.trim();
+ }
+ else {
+ order.recip = "?";
}
- } else {
- console.log('No price found ' + year + '/' + page);
+ }
+ else
+ {
+ console.log( "No recipient found " + year + "/" + page );
}
- var dateElement = getClassElement(orderElements[i], 'a-color-secondary value');
- if (dateElement) {
- orderDate = dateElement.innerHTML.trim();
- } else {
- console.log('No date found ' + year + '/' + page);
+ var dateElement = getClassElement( orderLevels[ i ], "a-color-secondary value" );
+ if( dateElement )
+ {
+ order.date = dateElement.innerHTML.trim();
+ }
+ else
+ {
+ console.log( "No date found " + year + "/" + page );
}
- }
- // walking through shipments of the order
- var shipmentElements = orderElements[i].getElementsByClassName('a-box shipment');
- for (var s = 0; s < shipmentElements.length; s++) {
- var shipment = {
- 'orderNumber' : orderNumber,
- 'orderPrice' : orderPrice,
- 'orderDate' : orderDate,
- 'date' : '?',
- 'names': [],
- 'prices': [],
- 'price': 0,
- 'products': 0
- };
-
- // finding shipment date:
- var topRowElement = getClassElement(shipmentElements[s], 'a-row shipment-top-row')
- var dateElement = getClassElement(topRowElement,'a-size-medium a-color-base a-text-bold');
- if (dateElement) {
- shipment.date = dateElement.innerHTML.trim();
- } else {
- console.log('No shipment date found ' + year + '/' + page);
+ var linkElement = orderLevels[ i ].getElementsByTagName('a')[1];
+ if( linkElement )
+ {
+ order.link = linkElement.href;
+ }
+ else
+ {
+ console.log( "No link found " + year + "/" + page );
}
- // finding Items of the shipment
- var nameElements = getClassElements(shipmentElements[s], 'a-fixed-left-grid-col a-col-right');
- if (nameElements.length > 0) {
+ var nameElements = getClassElements( orderBars[ i ], "a-fixed-left-grid-col a-col-right" );
+ if( nameElements.length > 0 )
+ {
var names = [];
var prices = [];
- var totalCent = 0;
- var totalCount = 0;
- var priceNotFound = false;
-
- for (var j = 0; j < nameElements.length; j++) {
- var a_tags = nameElements[j].getElementsByTagName('A');
+
+ for( var j = 0; j < nameElements.length; j++ )
+ {
+ // sometimes there is no link to the item, then we have to fetch the name of the item from the div tag
+ var a_tags = nameElements[ j ].getElementsByTagName('A');
if (a_tags.length > 0) {
- names.push(nameElements[j].getElementsByTagName('A')[0].innerHTML.trim());
- } else {
- names.push(nameElements[j].getElementsByTagName('DIV')[0].innerHTML.trim());
+ names.push( nameElements[ j ].getElementsByTagName('A')[0].innerHTML.trim() );
}
-
- var qty = getClassElement(nameElements[j].parentElement, 'item-view-qty');
- if (qty) {
- qty = parseInt ( qty.textContent.trim());
- if (isNaN(qty)) {
- qty = 1;
- }
- }
- else {
- qty = 1;
- }
-
- var a_price = getClassElement(nameElements[j],'a-size-small a-color-price');
+ else {
+ names.push( nameElements[ j ].getElementsByTagName('DIV')[0].innerHTML.trim() );
+ }
+
+ var a_price = getClassElement(nameElements[j],'a-size-small a-color-price');
if (a_price) {
- var priceStr = a_price.textContent.trim();
- prices.push(priceStr);
- var price = priceStr.replace(/EUR/,"").replace(/Summe/,"").replace(/.*coins/i,"0,00").trim().replace(/\./,"").split( "," );
- var centPrice = parseInt( price[ 0 ] ) * 100 + parseInt( price[ 1 ] );
- if (isNaN(centPrice))
- priceNotFound = true;
- else
- totalCent += centPrice * qty;
+ prices.push(a_price.textContent.trim());
+ }
+ }
+ order.names = names;
+ order.prices = prices;
+ order.products = names.length;
+ }
+ else
+ {
+ console.log( "No names found " + year + "/" + page );
+ }
+
+ orders[ year ].pages[ page ].entries.push( order );
+ }
+ }
+
+ function findShipments(doc, year, page) {
+ var orderElements = doc.getElementsByClassName('a-box-group a-spacing-base');
+ for (var i = 0; i < orderElements.length; i++) {
+
+ var orderNumber = "";
+ var orderPrice = "";
+ var orderDate = "";
+
+ var orderInfo = orderElements[i].getElementsByClassName('order-info');
+ if (orderInfo.length == 1) {
+
+ var colRight = orderInfo[0].getElementsByClassName('a-col-right');
+ if (colRight.length == 1 ) {
+ var orderNrElements = colRight[0].getElementsByClassName('a-color-secondary value');
+ if (orderNrElements.length > 0) {
+ orderNumber = orderNrElements[0].textContent.trim();
+ }
+ else {
+ console.log('No order number found ' + year + '/' + page);
+ }
+ }
+ else {
+ console.log('No order number found ' + year + '/' + page);
+ }
+
+ var priceElement = getClassElement(orderElements[i], 'a-column a-span2');
+ if (priceElement) {
+ var price_tag = priceElement.getElementsByClassName('a-color-secondary value');
+ if (price_tag.length > 0) {
+ orderPrice = priceElement.getElementsByClassName('a-color-secondary value')[0].innerHTML.replace(/EUR/, '').replace(/Summe/, '').replace(/.*coins/i, '0,00').trim();
+ } else {
+ orderPrice = '0,00';
+ }
+ } else {
+ console.log('No price found ' + year + '/' + page);
+ }
+
+ var dateElement = getClassElement(orderElements[i], 'a-color-secondary value');
+ if (dateElement) {
+ orderDate = dateElement.innerHTML.trim();
+ } else {
+ console.log('No date found ' + year + '/' + page);
+ }
+ }
+
+ // walking through shipments of the order
+ var shipmentElements = orderElements[i].getElementsByClassName('a-box shipment');
+ for (var s = 0; s < shipmentElements.length; s++) {
+ var shipment = {
+ 'orderNumber' : orderNumber,
+ 'orderPrice' : orderPrice,
+ 'orderDate' : orderDate,
+ 'date' : '?',
+ 'names': [],
+ 'prices': [],
+ 'price': 0,
+ 'products': 0
+ };
+
+ // finding shipment date:
+ var topRowElement = getClassElement(shipmentElements[s], 'a-row shipment-top-row')
+ var dateElement = getClassElement(topRowElement,'a-size-medium a-color-base a-text-bold');
+ if (dateElement) {
+ shipment.date = dateElement.innerHTML.trim();
+ } else {
+ console.log('No shipment date found ' + year + '/' + page);
+ }
+
+ // finding Items of the shipment
+ var nameElements = getClassElements(shipmentElements[s], 'a-fixed-left-grid-col a-col-right');
+ if (nameElements.length > 0) {
+ var names = [];
+ var prices = [];
+ var totalCent = 0;
+ var totalCount = 0;
+ var priceNotFound = false;
+
+ for (var j = 0; j < nameElements.length; j++) {
+ var a_tags = nameElements[j].getElementsByTagName('A');
+ if (a_tags.length > 0) {
+ names.push(nameElements[j].getElementsByTagName('A')[0].innerHTML.trim());
+ } else {
+ names.push(nameElements[j].getElementsByTagName('DIV')[0].innerHTML.trim());
+ }
+
+ var qty = getClassElement(nameElements[j].parentElement, 'item-view-qty');
+ if (qty) {
+ qty = parseInt ( qty.textContent.trim());
+ if (isNaN(qty)) {
+ qty = 1;
+ }
+ }
+ else {
+ qty = 1;
+ }
+
+ var a_price = getClassElement(nameElements[j],'a-size-small a-color-price');
+ if (a_price) {
+ var priceStr = a_price.textContent.trim();
+ prices.push(priceStr);
+ var price = priceStr.replace(/EUR/,"").replace(/Summe/,"").replace(/.*coins/i,"0,00").trim().replace(/\./,"").split( "," );
+ var centPrice = parseInt( price[ 0 ] ) * 100 + parseInt( price[ 1 ] );
+ if (isNaN(centPrice))
+ priceNotFound = true;
+ else
+ totalCent += centPrice * qty;
+ }
+
+ totalCount += qty;
+ }
+ shipment.names = names;
+ shipment.prices = prices;
+ shipment.products = totalCount;
+
+ if (shipmentElements.length == 1) {
+ shipment.price = orderPrice;
+ }
+ else {
+ shipment.price = getEuroString(totalCent / 100);
+ if (priceNotFound)
+ shipment.price = '*' + shipment.price ;
}
-
- totalCount += qty;
+ } else {
+ console.log('No item names in shpiment found ' + year + '/' + page);
}
- shipment.names = names;
- shipment.prices = prices;
- shipment.products = totalCount;
-
- if (shipmentElements.length == 1) {
- shipment.price = orderPrice;
- }
- else {
- shipment.price = getEuroString(totalCent / 100);
- if (priceNotFound)
- shipment.price = '*' + shipment.price ;
- }
- } else {
- console.log('No item names in shpiment found ' + year + '/' + page);
+ shipments.push(shipment);
}
- shipments.push(shipment);
}
}
-}
-function printState()
-{
- var s = "";
- for( var i = 0; i < orders.length; i++ )
+ function printState()
{
- s += orders[ i ].year + ":";
- if( orders[ i ].pages.length == 0 )
+ var s = "";
+ for( var i = 0; i < orders.length; i++ )
{
- s += " waiting...";
+ s += orders[ i ].year + ":";
+ if( orders[ i ].pages.length == 0 )
+ {
+ s += " waiting...";
+ }
+ for( var j = 0; j < orders[ i ].pages.length; j++ )
+ {
+ s += " " + ( orders[ i ].pages[ j ].done ? "X" : "." );
+ }
+ s += "\n";
}
- for( var j = 0; j < orders[ i ].pages.length; j++ )
+
+ document.body.innerHTML = "" + s + "
";
+ }
+
+ function getEuroString( x )
+ {
+ var eurocent = ( x.toFixed( 2 ) + "" ).split( "." );
+ var euro = eurocent[ 0 ];
+ var euroTsd = "";
+
+ for( var i = 0; i < euro.length - 1; i++ )
{
- s += " " + ( orders[ i ].pages[ j ].done ? "X" : "." );
+ euroTsd += euro.charAt( i );
+ if( ( ( euro.length - i ) % 3 ) == 1 )
+ {
+ euroTsd += ".";
+ }
}
- s += "\n";
- }
+ euroTsd += euro.charAt( euro.length - 1 );
- document.body.innerHTML = "" + s + "
";
-}
+ return euroTsd + "," + eurocent[ 1 ];
+ }
-function getEuroString( x )
-{
- var eurocent = ( x.toFixed( 2 ) + "" ).split( "." );
- var euro = eurocent[ 0 ];
- var euroTsd = "";
+ function getOverviewLine( data )
+ {
+ return "" +
+ "| " + data.name + " | " +
+ "" + getEuroString( data.cent / 100 ) + " | " +
+ "" + data.orders + " | " +
+ "" + data.products + " | " +
+ "" + getEuroString( data.cent / 100 / data.products ) + " | " +
+ "" + getEuroString( data.cent / 100 / data.month ) + " | " +
+ "
";
+ }
- for( var i = 0; i < euro.length - 1; i++ )
+ function getOrderLine( data )
{
- euroTsd += euro.charAt( i );
- if( ( ( euro.length - i ) % 3 ) == 1 )
+ var nameList = "";
+ for( var i = 0; i < data.names.length; i++ )
{
- euroTsd += ".";
+ nameList += '- ' + data.names[ i ] + ' | ' + data.prices[ i ] + '
';
}
+ nameList += "
";
+
+ return "" +
+ "| Link | " +
+ "" + data.date + " | " +
+ "" + data.products + " | " +
+ "" + data.price + " | " +
+ "" + data.recip + " | " +
+ "" + nameList + " | " +
+ "
";
}
- euroTsd += euro.charAt( euro.length - 1 );
-
- return euroTsd + "," + eurocent[ 1 ];
-}
-
-function getOverviewLine( data )
-{
- return "" +
- "| " + data.name + " | " +
- "" + getEuroString( data.cent / 100 ) + " | " +
- "" + data.orders + " | " +
- "" + data.products + " | " +
- "" + getEuroString( data.cent / 100 / data.products ) + " | " +
- "" + getEuroString( data.cent / 100 / data.month ) + " | " +
- "
";
-}
-
-function getOrderLine( data )
-{
- var nameList = "";
- for( var i = 0; i < data.names.length; i++ )
+
+ function getShipmentLine( shipment )
{
- nameList += '- ' + data.names[ i ] + ' | ' + data.prices[ i ] + '
';
- }
- nameList += "
";
-
- return "" +
- "| Link | " +
- "" + data.date + " | " +
- "" + data.products + " | " +
- "" + data.price + " | " +
- "" + data.recip + " | " +
- "" + nameList + " | " +
- "
";
-}
-
-function getShipmentLine( shipment )
-{
- var nameList = "";
- for( var i = 0; i < shipment.names.length; i++ ) {
- nameList += shipment.names[ i ] + ' | ' + shipment.prices[ i ] + ' # ';
+ var nameList = "";
+ for( var i = 0; i < shipment.names.length; i++ ) {
+ nameList += shipment.names[ i ] + ' | ' + shipment.prices[ i ] + ' # ';
+ }
+
+ return "" +
+ "| " + shipment.orderNumber + " | " +
+ "" + shipment.orderDate + " | " +
+ "" + shipment.orderPrice + " | " +
+ "" + shipment.date + " | " +
+ "" + shipment.products + " | " +
+ "" + shipment.price + " | " +
+ "" + nameList + " | " +
+ "
";
}
- return "" +
- "| " + shipment.orderNumber + " | " +
- "" + shipment.orderDate + " | " +
- "" + shipment.orderPrice + " | " +
- "" + shipment.date + " | " +
- "" + shipment.products + " | " +
- "" + shipment.price + " | " +
- "" + nameList + " | " +
- "
";
-}
-
-
-function printOrders()
-{
- var now = new Date();
- var thisYear = "" + ( 1900 + now.getYear() );
- var thisYearMonthCount = now.getMonth() + 1;
-
- var allOrders = [];
- var years = [];
- var overall = { "name" : "Insg.", "cent" : 0, "orders" : 0, "products" : 0, "month" : 0 };
-
- for( var i = 0; i < orders.length; i++ )
+
+ function printOrders()
{
- var yearStr = orders[ i ].year.substr( 5 );
- var year = { "name" : yearStr, "cent" : 0, "orders" : 0, "products" : 0, "month" : ( yearStr == thisYear ? thisYearMonthCount : 12 ) };
+ var now = new Date();
+ var thisYear = "" + ( 1900 + now.getYear() );
+ var thisYearMonthCount = now.getMonth() + 1;
- for( var j = 0; j < orders[ i ].pages.length; j++ )
+ var allOrders = [];
+ var years = [];
+ var overall = { "name" : "Insg.", "cent" : 0, "orders" : 0, "products" : 0, "month" : 0 };
+
+ for( var i = 0; i < orders.length; i++ )
{
- for( var k = 0; k < orders[ i ].pages[ j ].entries.length; k++ )
+ var yearStr = orders[ i ].year.substr( 5 );
+ var year = { "name" : yearStr, "cent" : 0, "orders" : 0, "products" : 0, "month" : ( yearStr == thisYear ? thisYearMonthCount : 12 ) };
+
+ for( var j = 0; j < orders[ i ].pages.length; j++ )
{
- var entry = orders[ i ].pages[ j ].entries[ k ];
+ for( var k = 0; k < orders[ i ].pages[ j ].entries.length; k++ )
+ {
+ var entry = orders[ i ].pages[ j ].entries[ k ];
- var price = entry.price.replace(/\./,"").split( "," );
- var cent = parseInt( price[ 0 ] ) * 100 + parseInt( price[ 1 ] );
+ var price = entry.price.replace(/\./,"").split( "," );
+ var cent = parseInt( price[ 0 ] ) * 100 + parseInt( price[ 1 ] );
- year.cent += cent;
- year.products += entry.products;
- year.orders++;
+ year.cent += cent;
+ year.products += entry.products;
+ year.orders++;
- allOrders.push( entry );
+ allOrders.push( entry );
+ }
}
+
+ overall.cent += year.cent;
+ overall.products += year.products;
+ overall.orders += year.orders;
+ overall.month += year.month;
+
+ years.push( year );
}
- overall.cent += year.cent;
- overall.products += year.products;
- overall.orders += year.orders;
- overall.month += year.month;
+ var text = "Uebersicht
";
- years.push( year );
- }
+ text += "" +
+ "| Jahr | " +
+ "Euro | " +
+ "Bestell. | " +
+ "Produkte | " +
+ "Euro/Prod. | " +
+ "Euro/Monat | " +
+ "
";
- var text = "Uebersicht
";
+ text += getOverviewLine( overall );
+ for( var i = 0; i < years.length; i++ )
+ {
+ text += getOverviewLine( years[ i ] );
+ }
+ text += "
";
- text += "" +
- "| Jahr | " +
- "Euro | " +
- "Bestell. | " +
- "Produkte | " +
- "Euro/Prod. | " +
- "Euro/Monat | " +
- "
";
+ text += "Einzel-Bestellungen
";
- text += getOverviewLine( overall );
- for( var i = 0; i < years.length; i++ )
- {
- text += getOverviewLine( years[ i ] );
- }
- text += "
";
+ text += "" +
+ "| Link | " +
+ "Datum | " +
+ "Produkte | " +
+ "Preis | " +
+ "Versandadresse | " +
+ "Produktbeschreibungen | " +
+ "
";
- text += "Einzel-Bestellungen
";
+ for( var i = 0; i < allOrders.length; i++ )
+ {
+ text += getOrderLine( allOrders[ i ] );
+ }
+ text += "
";
- text += "" +
- "| Link | " +
- "Datum | " +
- "Produkte | " +
- "Preis | " +
- "Versandadresse | " +
- "Produktbeschreibungen | " +
- "
";
+ text += "Lieferungen
";
- for( var i = 0; i < allOrders.length; i++ )
- {
- text += getOrderLine( allOrders[ i ] );
- }
- text += "
";
-
- text += "Lieferungen
";
-
- text += "" +
- "| Bestellnummer | " +
- "Bestelldatum | " +
- "Bestellsumme | " +
- "Lieferdatum | " +
- "Anzahl Produkte | " +
- "Summe / Abbuchung | " +
- "Produkte | Preis | " +
- "
";
-
- for( var i = 0; i < shipments.length; i++ )
- {
- text += getShipmentLine( shipments[ i ] );
- }
- text += "
";
+ text += "" +
+ "| Bestellnummer | " +
+ "Bestelldatum | " +
+ "Bestellsumme | " +
+ "Lieferdatum | " +
+ "Anzahl Produkte | " +
+ "Summe / Abbuchung | " +
+ "Produkte | Preis | " +
+ "
";
- document.body.innerHTML = text;
-}
+ for( var i = 0; i < shipments.length; i++ )
+ {
+ text += getShipmentLine( shipments[ i ] );
+ }
+ text += "
";
-function loadOrders( event )
-{
- if( event.currentTarget.onlyOnce )
- {
- return;
+ document.body.innerHTML = text;
}
- event.currentTarget.onlyOnce = true;
- findOrders( event.currentTarget.document, event.currentTarget.yearIndex, event.currentTarget.pageIndex );
- findShipments( event.currentTarget.document, event.currentTarget.yearIndex, event.currentTarget.pageIndex );
+ function loadOrders( event )
+ {
+ if( event.currentTarget.onlyOnce )
+ {
+ return;
+ }
+ event.currentTarget.onlyOnce = true;
- event.currentTarget.close();
-}
+ findOrders( event.currentTarget.document, event.currentTarget.yearIndex, event.currentTarget.pageIndex );
+ findShipments( event.currentTarget.document, event.currentTarget.yearIndex, event.currentTarget.pageIndex );
-function loadYear( event )
-{
- if( event.currentTarget.onlyOnce )
- {
- return;
+ event.currentTarget.close();
}
- event.currentTarget.onlyOnce = true;
- var doc = event.currentTarget.document;
- var as = doc.getElementsByTagName( "a" );
- var maxIndex = 0;
- for( var i = 0; i < as.length; i++ )
+ function loadYear( event )
{
- if( as[ i ].href.match( /startIndex=(\d+)/ ) )
+ if( event.currentTarget.onlyOnce )
{
- maxIndex = Math.max( maxIndex, parseInt( RegExp.$1 ) );
+ return;
}
- }
+ event.currentTarget.onlyOnce = true;
- var year = event.currentTarget.yearIndex;
+ var doc = event.currentTarget.document;
+ var as = doc.getElementsByTagName( "a" );
+ var maxIndex = 0;
+ for( var i = 0; i < as.length; i++ )
+ {
+ if( as[ i ].href.match( /startIndex=(\d+)/ ) )
+ {
+ maxIndex = Math.max( maxIndex, parseInt( RegExp.$1 ) );
+ }
+ }
- for( var i = 0; i <= maxIndex; i += 10 )
- {
- orders[ year ].pages.push( { "done" : false, "entries" : [] } );
- }
+ var year = event.currentTarget.yearIndex;
- findOrders( doc, year, 0 );
- findShipments( doc, year, 0 );
+ for( var i = 0; i <= maxIndex; i += 10 )
+ {
+ orders[ year ].pages.push( { "done" : false, "entries" : [] } );
+ }
- var pageUri = "https://www.amazon.de/gp/css/order-history/gp/css/order-history/ref=oss_pagination?ie=UTF8&orderFilter=" +
- orders[ year ].year + "&search=&startIndex=";
+ findOrders( doc, year, 0 );
+ findShipments( doc, year, 0 );
- var pageIndex = 1;
- for( var i = 10; i <= maxIndex; i += 10 )
- {
- var pageTab = window.open( pageUri + i );
- pageTab.yearIndex = year;
- pageTab.pageIndex = pageIndex;
- pageTab.addEventListener( "load", loadOrders, true );
+ var pageUri = "https://www.amazon.de/gp/css/order-history/gp/css/order-history/ref=oss_pagination?ie=UTF8&orderFilter=" +
+ orders[ year ].year + "&search=&startIndex=";
- pageIndex++;
- }
+ var pageIndex = 1;
+ for( var i = 10; i <= maxIndex; i += 10 )
+ {
+ var pageTab = window.open( pageUri + i );
+ pageTab.yearIndex = year;
+ pageTab.pageIndex = pageIndex;
+ pageTab.addEventListener( "load", loadOrders, true );
- event.currentTarget.close();
-}
+ pageIndex++;
+ }
-function loadYearCount( event )
-{
- if( event.currentTarget.onlyOnce )
- {
- return;
+ event.currentTarget.close();
}
- event.currentTarget.onlyOnce = true;
-
- var doc = event.currentTarget.document;
- var form = doc.getElementsByClassName('time-period-chooser a-spacing-none')[0];
- var filter = doc.getElementsByName('orderFilter')[0];
- for( var i = 0; i < filter.options.length; i++ )
+ function loadYearCount( event )
{
- var regex = /year-(\d\d\d\d)/;
- if( regex.exec( filter.options[ i ].value ) )
+ if( event.currentTarget.onlyOnce )
{
- orders.push( { "year" : filter.options[ i ].value, "pages" : [] } );
+ return;
}
- }
+ event.currentTarget.onlyOnce = true;
- //orders.splice( 0, orders.length - 2 );
+ var doc = event.currentTarget.document;
+ var form = doc.getElementsByClassName('time-period-chooser a-spacing-none')[0];
+ var filter = doc.getElementsByName('orderFilter')[0];
- var yearUri = "https://www.amazon.de/gp/css/order-history?";
- for( var i = 0; i < form.elements.length; i++ )
- {
- var element = form.elements[ i ];
- if( element == filter )
+ for( var i = 0; i < filter.options.length; i++ )
{
- continue;
+ var regex = /year-(\d\d\d\d)/;
+ if( regex.exec( filter.options[ i ].value ) )
+ {
+ orders.push( { "year" : filter.options[ i ].value, "pages" : [] } );
+ }
}
- yearUri += encodeURIComponent( element.name ) + "=" + encodeURIComponent( element.value ) + "&";
- }
- yearUri += "orderFilter=";
- //alert( yearUri );
+ //orders.splice( 0, orders.length - 2 );
- for( var i = 0; i < orders.length; i++ )
- {
- var yearTab = window.open( yearUri + orders[ i ].year );
- yearTab.yearIndex = i;
- yearTab.addEventListener( "load", loadYear, true );
- }
+ var yearUri = "https://www.amazon.de/gp/css/order-history?";
+ for( var i = 0; i < form.elements.length; i++ )
+ {
+ var element = form.elements[ i ];
+ if( element == filter )
+ {
+ continue;
+ }
+
+ yearUri += encodeURIComponent( element.name ) + "=" + encodeURIComponent( element.value ) + "&";
+ }
+ yearUri += "orderFilter=";
+ //alert( yearUri );
- waitInterval = setInterval( waitForFinish, 1000 );
+ for( var i = 0; i < orders.length; i++ )
+ {
+ var yearTab = window.open( yearUri + orders[ i ].year );
+ yearTab.yearIndex = i;
+ yearTab.addEventListener( "load", loadYear, true );
+ }
- event.currentTarget.close();
-}
+ waitInterval = setInterval( waitForFinish, 1000 );
-function waitForFinish()
-{
- printState();
+ event.currentTarget.close();
+ }
- for( var i = 0; i < orders.length; i++ )
+ function waitForFinish()
{
- if( orders[ i ].pages.length == 0 )
- {
- return;
- }
- for( var j = 0; j < orders[ i ].pages.length; j++ )
+ printState();
+
+ for( var i = 0; i < orders.length; i++ )
{
- if( !orders[ i ].pages[ j ].done )
+ if( orders[ i ].pages.length == 0 )
{
return;
}
+ for( var j = 0; j < orders[ i ].pages.length; j++ )
+ {
+ if( !orders[ i ].pages[ j ].done )
+ {
+ return;
+ }
+ }
}
+
+ clearInterval( waitInterval );
+ printOrders();
}
- clearInterval( waitInterval );
- printOrders();
-}
+ var orders = [];
+ var shipments = [];
+ var waitInterval;
-var orders = [];
-var shipments = [];
-var waitInterval;
+ var mainTab = window.open("https://www.amazon.de/gp/css/order-history/ref=ya_orders_css");
+ mainTab.addEventListener( "load", loadYearCount, true );
-var mainTab = window.open("https://www.amazon.de/gp/css/order-history/ref=ya_orders_css");
-mainTab.addEventListener( "load", loadYearCount, true );
+})();
\ No newline at end of file
diff --git a/background.js b/background.js
new file mode 100644
index 0000000..64ecbfb
--- /dev/null
+++ b/background.js
@@ -0,0 +1,5 @@
+chrome.browserAction.onClicked.addListener(function (tab) {
+ chrome.tabs.executeScript(tab.ib, {
+ file: 'amazonparser.js'
+ });
+});
\ No newline at end of file
diff --git a/manifest.json b/manifest.json
new file mode 100644
index 0000000..71c10e1
--- /dev/null
+++ b/manifest.json
@@ -0,0 +1,21 @@
+{
+ "name": "Amazon Bestellungen Parser",
+ "version": "1.0",
+ "manifest_version": 2,
+ "description": "Erstellt eine Auswertung über alle Amazon-Bestellugnen.",
+ "homepage_url": "https://github.com/GameScripting/amazon-parser",
+ "background": {
+ "scripts": [
+ "amazonparser.js"
+ ],
+ "persistent": true
+ },
+ "browser_action": {
+ "default_title": "Amzn Bestl. Parser"
+ },
+ "permissions": [
+ "https://*/*",
+ "http://*/*",
+ "tabs"
+ ]
+}
\ No newline at end of file