Skip to content

Commit b518701

Browse files
committed
Refactored eventBriteHelper python code to be a bit 'better', and add a CSS class when events have sold out.
1 parent cf06821 commit b518701

2 files changed

Lines changed: 95 additions & 0 deletions

File tree

aws_lambda/create-package.bat

Lines changed: 5 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,5 @@
1+
pip install --target ./package/ requests
2+
cd package/
3+
zip -r9 ../function.zip .
4+
cd ..
5+
zip -g function.zip eventBriteHelper.py

aws_lambda/eventBriteHelper.py

Lines changed: 90 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,90 @@
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 btn-primary float-right\"type=\"button\">Register</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+
eventClass = ' event-sold-out' if onSaleStatus == 'SOLD_OUT' else ''
49+
50+
startDate = datetime.strptime(event['start']['local'], "%Y-%m-%dT%H:%M:%S")
51+
endDate = datetime.strptime(event['end']['local'], "%Y-%m-%dT%H:%M:%S")
52+
53+
month = monthNames[startDate.month - 1][:3].upper()
54+
day = startDate.day
55+
eventStart = startDate.hour
56+
eventEnd = endDate.hour
57+
eventName = event['name']['text']
58+
eventDescription = event['description']['text']
59+
60+
eventStartAmPm = "am"
61+
eventEndAmPm = "am"
62+
63+
if eventStart > 12:
64+
eventStart -= 12
65+
eventStartAmPm = "pm"
66+
67+
if eventEnd > 12:
68+
eventEnd -= 12
69+
eventEndAmPm = "pm"
70+
71+
if event['status'] == "live":
72+
content = content + eventTemplate \
73+
.replace("`eventClass`", eventClass) \
74+
.replace("`month`", month) \
75+
.replace("`day`", str(day)) \
76+
.replace("`eventStart`", str(eventStart)) \
77+
.replace("`eventStartAmPm`", eventStartAmPm) \
78+
.replace("`eventEnd`", str(eventEnd)) \
79+
.replace("`eventEndAmPm`", eventEndAmPm) \
80+
.replace("`eventName`", eventName) \
81+
.replace("`eventDescription`", eventDescription) \
82+
.replace("`eventId`", eventId) \
83+
.replace("`eventbriteWidgetModalTriggerEventId`", "eventbrite-widget-modal-trigger-" + eventId)
84+
85+
widgets = widgets + "\r\n" + widgetTemplate \
86+
.replace("`eventName`", eventName) \
87+
.replace("`eventId`", eventId) \
88+
.replace("`eventbriteWidgetModalTriggerEventId`", "eventbrite-widget-modal-trigger-" + eventId)
89+
90+
return {'content': content, 'widgets': widgets}

0 commit comments

Comments
 (0)