|
| 1 | +from datetime import datetime |
| 2 | +from requests import Request, Session |
| 3 | +import json |
| 4 | + |
| 5 | +session = Session() |
| 6 | +headers = { |
| 7 | + "Authorization": "Bearer <key>", |
| 8 | + "Content-Type": "application/json" |
| 9 | +} |
| 10 | + |
| 11 | +organisationId = "464103861019" |
| 12 | +monthNames = ["January", "February", "March", "April", "May", "June", "July", "August", "September", "October", "November", "December"] |
| 13 | + |
| 14 | +eventTemplate = "<div class=\"row card\"><div class=\"col-12`eventClass`\"><div class=\"row\"><div class=\"col-sm-4 col-lg-2 event-date\"><span class=\"event-date-month\">`month`</span> <span class=\"event-date-day\">`day`</span><p><span class=\"event-date-start-time\">`eventStart``eventStartAmPm` - </span><span class=\"event-date-end-time\">`eventEnd``eventEndAmPm`</span></p></div><div class=\"col-sm-8 col-lg-10 event-title\"><span class=\"event-title\">`eventName`</span></div></div><div class=\"row\"><div class=\"col-md-12 col-lg-9 event-description\"><span class=\"event-description\">`eventDescription`</span></div><div class=\"col-md-12 col-lg-3 event-book-button\"><!-- Noscript content for added SEO --><noscript><a href=\"https://www.eventbrite.co.uk/e/programming-101-tickets-`eventId`\"rel=\"noopener noreferrer\" target=\"_blank\"></noscript><!-- You can customize this button any way you like --><button id=\"`eventbriteWidgetModalTriggerEventId`\" class=\"btn `registerButtonClass` float-right\"type=\"button\">`registerButtonText`</button><noscript></a>Register for tickets on Eventbrite</noscript></div></div></div></div>" |
| 15 | +widgetPrefix = "var orderComplete = function () {var resultString = \"Order complete!\";alert(resultString);console.log(resultString);};" |
| 16 | +widgetTemplate = "/* `eventName` */ window.EBWidgets.createWidget({widgetType: 'checkout',eventId: '`eventId`',modal: true,modalTriggerElementId: '`eventbriteWidgetModalTriggerEventId`',onOrderComplete: orderComplete});" |
| 17 | + |
| 18 | +def getOrganisationUrl(organisationId): |
| 19 | + return "https://www.eventbriteapi.com/v3/organizations/" + str(organisationId) |
| 20 | + |
| 21 | +def getEventUrl(eventId): |
| 22 | + return "https://www.eventbriteapi.com/v3/events/" + str(eventId) |
| 23 | + |
| 24 | +def getResponse(url): |
| 25 | + response = session.get(url = url, headers = headers) |
| 26 | + return json.loads(response.text) |
| 27 | + |
| 28 | +def getOrganisationEvents(organisationId): |
| 29 | + return getResponse(getOrganisationUrl(organisationId) + "/events/") |
| 30 | + |
| 31 | +def getEventAttendees(eventId): |
| 32 | + return getResponse(getEventUrl(eventId) + "/attendees/") |
| 33 | + |
| 34 | +def getEventTicketClasses(eventId): |
| 35 | + return getResponse(getEventUrl(eventId) + "/ticket_classes/") |
| 36 | + |
| 37 | +def getEventsAsHtml(event, lambda_context): |
| 38 | + data = getOrganisationEvents(organisationId) |
| 39 | + |
| 40 | + content = "" |
| 41 | + widgets = widgetPrefix |
| 42 | + |
| 43 | + for event in data['events']: |
| 44 | + eventId = event['id'] |
| 45 | + |
| 46 | + ticketClasses = getEventTicketClasses(eventId)['ticket_classes'] |
| 47 | + onSaleStatus = '' if ticketClasses == [] else ticketClasses[0]['on_sale_status'] |
| 48 | + |
| 49 | + eventClass = '' |
| 50 | + registerButtonClass = 'btn-primary' |
| 51 | + registerButtonText = 'Register' |
| 52 | + if onSaleStatus == 'SOLD_OUT': |
| 53 | + eventClass = ' event-sold-out' |
| 54 | + registerButtonClass = 'btn-default' |
| 55 | + registerButtonText = 'Sold out' |
| 56 | + |
| 57 | + startDate = datetime.strptime(event['start']['local'], "%Y-%m-%dT%H:%M:%S") |
| 58 | + endDate = datetime.strptime(event['end']['local'], "%Y-%m-%dT%H:%M:%S") |
| 59 | + |
| 60 | + month = monthNames[startDate.month - 1][:3].upper() |
| 61 | + day = startDate.day |
| 62 | + eventStart = startDate.hour |
| 63 | + eventEnd = endDate.hour |
| 64 | + eventName = event['name']['text'] |
| 65 | + eventDescription = event['description']['text'] |
| 66 | + |
| 67 | + eventStartAmPm = "am" |
| 68 | + eventEndAmPm = "am" |
| 69 | + |
| 70 | + if eventStart > 12: |
| 71 | + eventStart -= 12 |
| 72 | + eventStartAmPm = "pm" |
| 73 | + |
| 74 | + if eventEnd > 12: |
| 75 | + eventEnd -= 12 |
| 76 | + eventEndAmPm = "pm" |
| 77 | + |
| 78 | + if event['status'] == "live": |
| 79 | + content = content + eventTemplate \ |
| 80 | + .replace("`eventClass`", eventClass) \ |
| 81 | + .replace("`registerButtonClass`", registerButtonClass) \ |
| 82 | + .replace("`registerButtonText`", registerButtonText) \ |
| 83 | + .replace("`eventClass`", eventClass) \ |
| 84 | + .replace("`month`", month) \ |
| 85 | + .replace("`day`", str(day)) \ |
| 86 | + .replace("`eventStart`", str(eventStart)) \ |
| 87 | + .replace("`eventStartAmPm`", eventStartAmPm) \ |
| 88 | + .replace("`eventEnd`", str(eventEnd)) \ |
| 89 | + .replace("`eventEndAmPm`", eventEndAmPm) \ |
| 90 | + .replace("`eventName`", eventName) \ |
| 91 | + .replace("`eventDescription`", eventDescription) \ |
| 92 | + .replace("`eventId`", eventId) \ |
| 93 | + .replace("`eventbriteWidgetModalTriggerEventId`", "eventbrite-widget-modal-trigger-" + eventId) |
| 94 | + |
| 95 | + widgets = widgets + "\r\n" + widgetTemplate \ |
| 96 | + .replace("`eventName`", eventName) \ |
| 97 | + .replace("`eventId`", eventId) \ |
| 98 | + .replace("`eventbriteWidgetModalTriggerEventId`", "eventbrite-widget-modal-trigger-" + eventId) |
| 99 | + |
| 100 | + return {'statusCode': 200, 'content': content, 'widgets': widgets} |
0 commit comments