indiegogo.py 1.4 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748
  1. # -*- coding: utf-8 -*-
  2. import BeautifulSoup
  3. import datetime
  4. import dateutil.parser
  5. import dingguo
  6. import email.message
  7. import ioex
  8. import re
  9. def parse_order_confirmation_mail(mail):
  10. assert isinstance(mail, email.message.Message)
  11. html = mail.get_payload()[1].get_payload(decode = True).decode('utf-8')
  12. if not 'indiegogo' in html:
  13. raise Exception()
  14. email_recipient_address = mail['delivered-to'].decode('utf8')
  15. email_date = datetime.datetime.utcfromtimestamp(
  16. # seconds since the Epoch in UTC
  17. email.utils.mktime_tz(email.utils.parsedate_tz(mail['date']))
  18. )
  19. order = dingguo.Order(
  20. platform = u'indiegogo',
  21. order_id = '%s-%s' % (email_recipient_address, email_date.isoformat()),
  22. order_date = email_date,
  23. customer_id = email_recipient_address,
  24. )
  25. doc = BeautifulSoup.BeautifulSoup(html)
  26. campaign_name_tag = doc.find(text = re.compile(u'vielen Dank für deinen Beitrag')).findNext('a')
  27. order.items.append(dingguo.Contribution(
  28. campaign = dingguo.Campaign(
  29. name = campaign_name_tag.text,
  30. founder = doc.find(text = re.compile(u'Kontaktiere den Kampagnenstarter')).findNext().text,
  31. website_url = campaign_name_tag['href'],
  32. ),
  33. price_brutto = dingguo.Sum.parse_text(
  34. doc.find(text = re.compile(u'Unterstützung:')).findNext().text
  35. ),
  36. reward = None,
  37. ))
  38. return [order]