Skip to content

Instantly share code, notes, and snippets.

@michaelcontento
Forked from zakx/damazon.py
Created October 26, 2015 08:38
Show Gist options
  • Save michaelcontento/4710e923973775c1594c to your computer and use it in GitHub Desktop.
Save michaelcontento/4710e923973775c1594c to your computer and use it in GitHub Desktop.
#!/usr/bin/python
# setup: pip install requests beautifulsoup4
from decimal import Decimal
import requests
from bs4 import BeautifulSoup
import sys
import getpass
username = raw_input("Username: ")
password = getpass.getpass("Password: ")
# Session setup
session = requests.Session()
session.headers['User-Agent'] = "Mozilla/5.0 (Macintosh; Intel Mac OS X 10_9_0) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/33.0.1750.3 Safari/537.36"
# Request login page
login_r = session.get("https://www.amazon.de/gp/css/order-history/")
login = BeautifulSoup(login_r.content)
payload = {}
for x in login.find_all("input"):
if x.attrs.get('name'):
payload[x.attrs['name']] = x.attrs.get('value', '')
payload['ap_email'] = payload['email'] = username
payload['ap_password'] = payload['password'] = password
# Log in
order_r = session.post("https://www.amazon.de/ap/signin", data=payload, allow_redirects=False)
# Request order history
hist_r = session.get("https://www.amazon.de/gp/css/order-history/")
soup = BeautifulSoup(hist_r.content)
filters = [options.attrs['value'] for options in soup.find('select', attrs={'name': 'orderFilter'}).findChildren()[1:]]
print "[+] Found %d filters, processing..." % len(filters)
total = Decimal("0.00")
total_orders = 0
for scope in filters:
scope_r = session.get("https://www.amazon.de/gp/css/order-history/?ie=UTF8&orderFilter=%s&startIndex=0" % scope)
scope_soup = BeautifulSoup(scope_r.content)
try:
length = int(scope_soup.find('span', 'num-orders').text.split(" ", 1)[0])
except ValueError:
length = 0
sys.stdout.write("[+] Processing %s \t(%s orders)... " % (scope.rjust(9), str(length).rjust(4)))
sys.stdout.flush()
page = 10
scope_sum = Decimal("0.00")
for x in filter(lambda x: x.text.lstrip().startswith("EUR "), scope_soup.find_all('span', 'a-color-secondary value')):
scope_sum += Decimal(x.text.lstrip()[4:].replace(".","").replace(",","."))
while page <= length:
scope_page_r = session.get("https://www.amazon.de/gp/css/order-history/?ie=UTF8&orderFilter=%s&startIndex=%d" % (scope, page))
for y in filter(lambda x: x.text.lstrip().startswith("EUR "), BeautifulSoup(scope_page_r.content).find_all('span', 'a-color-secondary value')):
scope_sum += Decimal(y.text.lstrip()[4:].replace(".","").replace(",","."))
page += 10
print "\t%s EUR" % (str(scope_sum).rjust(10))
if scope.startswith("year"):
total += scope_sum
total_orders += length
print "[+] Grand total (years only) \t(%s orders)... \t%s EUR" % (str(total_orders).rjust(4), str(total).rjust(10))
[+] Processing months-6 ( 39 orders)... 895.92 EUR
[+] Processing year-2015 ( 43 orders)... 1154.17 EUR
[+] Processing year-2014 ( 68 orders)... 2468.17 EUR
[+] Processing year-2013 ( 74 orders)... 2152.16 EUR
[+] Processing year-2012 ( 53 orders)... 1600.35 EUR
[+] Processing year-2011 ( 39 orders)... 1476.33 EUR
[+] Processing year-2010 ( 15 orders)... 657.21 EUR
[+] Processing year-2009 ( 1 orders)... 23.39 EUR
[+] Grand total (years only) ( 293 orders)... 9531.78 EUR
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment