Fabian Peter Hammerle 8 anos atrás
commit
25e57523b8
1 arquivos alterados com 89 adições e 0 exclusões
  1. 89 0
      amazon-order-confirmation-mail-parser

+ 89 - 0
amazon-order-confirmation-mail-parser

@@ -0,0 +1,89 @@
+#!/usr/bin/env python
+# PYTHON_ARGCOMPLETE_OK
+
+import re
+import os
+import sys
+import yaml
+import email
+import pprint
+import random
+import locale
+import argparse
+import datetime
+import argcomplete
+
+# strptime
+locale.setlocale(locale.LC_ALL, 'de_DE.UTF-8')
+
+def parse(msg):
+
+    order = {
+        'platform': 'amazon.de',
+        }
+
+    msg_text = msg.get_payload(decode = True)
+
+    order['order_id'] = re.search(r'Bestellnummer #(.+)', msg_text).group(1)
+
+    order_date = datetime.datetime.strptime(
+        re.search(r'Aufgegeben am (.+)', msg_text).group(1),
+        '%d. %B %Y'
+        )
+    order['order_date'] = order_date.strftime('%Y-%m-%d')
+
+    order['articles'] = []
+    articles_text = msg_text.split('Bestellte(r) Artikel:')[1].split('_' * 10)[0].strip()
+    for article_text in articles_text.split('\n\n'):
+        article_match = re.match(
+            ur' *(?P<name>.*)\s'
+                + ur' *(?P<price_currency>[A-Z]+) (?P<price>\d+,\d+)\s'
+                + ur' *Verkauft von: (?P<reseller>.*)',
+            article_text,
+            re.MULTILINE | re.UNICODE
+            )
+        article = article_match.groupdict()
+        article['price'] = float(article['price'].replace(',', '.'))
+        order['articles'].append(article)
+
+    return order
+
+def compute():
+
+    msg = email.message_from_string(sys.stdin.read())
+
+    orders = []
+
+    if msg.is_multipart():
+        for part in msg.get_payload():
+            orders.append(parse(part))
+    else:
+        orders.append(parse(msg))
+
+    print(yaml.safe_dump(orders, default_flow_style = False))
+
+def _init_argparser():
+
+    argparser = argparse.ArgumentParser(description = None)
+    # argparser.add_argument('a', nargs = '*')
+    # argparser.add_argument('--b')
+    # argparser.add_argument('--flag', action='store_true')
+    # argparser.add_argument('file', type = argparse.FileType('r'))
+    # exclusive_group = argparser.add_mutually_exclusive_group(required = False)
+    # exclusive_group.add_argument('--exclusive-1', action='store_true')
+    # exclusive_group.add_argument('--exclusive-2', action='store_true')
+    # subparsers = argparser.add_subparsers(help = None, dest = 'command')
+    return argparser
+
+def main(argv):
+
+    argparser = _init_argparser()
+    argcomplete.autocomplete(argparser)
+    args = argparser.parse_args(argv)
+
+    compute(**vars(args))
+
+    return 0
+
+if __name__ == "__main__":
+    sys.exit(main(sys.argv[1:]))