diff --git a/Working/govt/co.denver.py b/Working/govt/co.denver.py new file mode 100644 index 0000000..0220215 --- /dev/null +++ b/Working/govt/co.denver.py @@ -0,0 +1,66 @@ +import os, sys +from datetime import datetime +from dateutil import relativedelta + +sys.path.append('/var/www/digisnaxx.ado/scrapers') +import dtss +dtss.getReady() + +from time import sleep +from pprint import pprint as ppr +import pytz + +from events.models import Organization, Scraper +import events.digitools as digitools + +venue, created = Organization.objects.get_or_create( + name="Denver City Council", + city="Denver", + website="https://denver.legistar.com/Calendar.aspx", + is_venue=True + ) + +scraper,item_count_start,virtcal = digitools.getScraper(venue, venue.website, 'dia') + +event_type = "Gv" + +# Time Signatures +tz_str = " -0600 UTC" +DATETIME_FORMAT = '%m/%d/%Y %I:%M %p %z %Z' +DATETIME_FORMAT_2 = '%B %d, %Y' + +def get_events(ps, event_type): + print("Getting events ...") + contents = ps.xpath('.//*/tr[@class="rgRow"]') + for c in contents: + try: + event = {} + event['scraper'] = scraper + event['link'] = venue.website + event['calendars'] = [scraper.calendar] + event['title'] = c.xpath('.//*/a/text()')[0] + event['time'] = c.xpath('.//*/span/text()')[2] + event['date'] = c.xpath('.//td[@class="rgSorted"]/text()')[0] + event['dateStamp'] = datetime.strptime(event['date']+" "+event['time'] + tz_str, DATETIME_FORMAT) + ppr(event) + digitools.createBasicEvent(event, event_type, venue) + scraper.items+=1 + except Exception as e: + print(e) + ppr(event) + print("\n\n+++\n\n") + +if len(sys.argv) >= 2: + arg1 = sys.argv[1] + br = digitools.getBrowser(arg1) +else: + print("No run_env") + quit() + +ps = digitools.getSource(br, venue.website) +sleep(1) +get_events(ps, "Gv") +sleep(2) + +digitools.updateScraper(scraper, item_count_start) +br.close() \ No newline at end of file diff --git a/Working/govt/ma.boston.citycouncil.py b/Working/govt/ma.boston.citycouncil.py index 8adbe6a..1ebe1e1 100644 --- a/Working/govt/ma.boston.citycouncil.py +++ b/Working/govt/ma.boston.citycouncil.py @@ -20,13 +20,13 @@ venue, created = Organization.objects.get_or_create( is_venue=True ) -scraper,item_count_start,virtcal = digitools.getScraper(venue, 'bos') +scraper,item_count_start,virtcal = digitools.getScraper(venue, venue.website, 'bos') event_type = "Gv" # Time Signatures -tz = pytz.timezone("US/Eastern") -DATETIME_FORMAT = '%B %d, %Y %I:%M%p' +tz_str = " -0500 UTC" +DATETIME_FORMAT = '%B %d, %Y %I:%M%p %z %Z' def get_events(ps, event_type): print("Getting events ...") @@ -40,7 +40,7 @@ def get_events(ps, event_type): event['title'] = c.xpath('.//*/div[@class="n-li-t"]/a/text()')[0] event['link'] = venue.website + c.xpath('.//*/div[@class="n-li-t"]/a/@href')[0] event['date'] = c.xpath('.//*/li[@class="dl-i"]/span[@class="dl-d"]/text()')[0].replace('\n', '').split("-")[0].strip() - event['dateStamp'] = datetime.strptime(event['date'], DATETIME_FORMAT) + event['dateStamp'] = datetime.strptime(event['date'] + tz_str, DATETIME_FORMAT) digitools.createBasicEvent(event, event_type, venue) ppr(event) scraper.items+=1 diff --git a/Working/govt/mn.legislature.py b/Working/govt/mn.legislature.py index 2ba91a8..f0a6271 100644 --- a/Working/govt/mn.legislature.py +++ b/Working/govt/mn.legislature.py @@ -35,8 +35,8 @@ except Exception as e: print("Scraper: ", scraper) tz = pytz.timezone("US/Central") - -DATETIME_FORMAT = '%A, %B %d, %Y %I:%M %p' +tz_str = " -0600 UTC" +DATETIME_FORMAT = '%A, %B %d, %Y %I:%M %p %z %Z' # Set initial variables for City, etc calendar_url = 'https://www.leg.mn.gov/cal?type=all' @@ -76,8 +76,8 @@ for hE in houseEvents: show_title = title, show_link = link, show_date = datetime.strptime(dateTime, DATETIME_FORMAT), - show_day = datetime.strptime(dateTime, DATETIME_FORMAT).date(), - more_details = details['location'], + show_day = datetime.strptime(dateTime + tz_str, DATETIME_FORMAT).date(), + # more_details = details['location'], venue = venue, scraper = scraper ) @@ -113,8 +113,8 @@ for sE in senateEvents: show_title = title, show_link = link, show_date = datetime.strptime(dateTime, DATETIME_FORMAT), - show_day = datetime.strptime(dateTime, DATETIME_FORMAT).date(), - more_details = details['location'], + show_day = datetime.strptime(dateTime + tz_str, DATETIME_FORMAT).date(), + # more_details = details['location'], venue = venue, scraper = scraper ) @@ -147,8 +147,8 @@ for cE in commEvents: show_title = title, show_link = link, show_date = datetime.strptime(dateTime, DATETIME_FORMAT), - show_day = datetime.strptime(dateTime, DATETIME_FORMAT).date(), - more_details = details['location'], + show_day = datetime.strptime(dateTime + tz_str, DATETIME_FORMAT).date(), + # more_details = details['location'], venue = venue, scraper = scraper ) diff --git a/Working/govt/mn.mngov.py b/Working/govt/mn.mngov.py index f926c43..3a89434 100644 --- a/Working/govt/mn.mngov.py +++ b/Working/govt/mn.mngov.py @@ -49,6 +49,8 @@ gcal = iCalendar.from_ical(objIcalData.text) cfpa_events = [] tz = pytz.timezone("US/Central") +tz_str = " -0600 UTC" + for component in gcal.walk(): event = {} @@ -84,8 +86,8 @@ for component in gcal.walk(): event_type = event_type, show_title = event['strSummary'], show_link = venue.website, - show_date = event['dateStart']-td, - show_day = event['dateStart']-td, + show_date = event['dateStart'], + show_day = event['dateStart'], more_details = event["details"], venue = venue ) diff --git a/Working/govt/mn.mpls.citycouncil.py b/Working/govt/mn.mpls.citycouncil.py index 8ac33c2..6127145 100644 --- a/Working/govt/mn.mpls.citycouncil.py +++ b/Working/govt/mn.mpls.citycouncil.py @@ -36,11 +36,15 @@ except Exception as e: scraper = Scraper.objects.get(name="Mpls City Council") print("Scraper: ", scraper) -DATETIME_FORMAT = '%Y-%m-%dT%H:%M:%S' +DATETIME_FORMAT = '%Y-%m-%dT%H:%M:%S %z %Z' tz = pytz.timezone("US/Central") + td = timedelta(days=2) odt = datetime.now() - td +tz_str = " -0600 UTC" + + month = odt.strftime("%b") day = int(datetime.now().day) @@ -74,7 +78,7 @@ for event in new_events: e = {} e['title'] = event['CommitteeName'] e['link'] = scraper.website - e['dateStamp'] = datetime.strptime(event['MeetingTime'], DATETIME_FORMAT) + e['dateStamp'] = datetime.strptime(event['MeetingTime'] + tz_str, DATETIME_FORMAT) e['agendaStatus'] = event['AgendaStatus'] e['address'] = event['Address'] e['description'] = event['Description'] diff --git a/Working/govt/mn.stp.citycouncil.py b/Working/govt/mn.stp.citycouncil.py index eb0280f..bd17235 100644 --- a/Working/govt/mn.stp.citycouncil.py +++ b/Working/govt/mn.stp.citycouncil.py @@ -32,8 +32,9 @@ except Exception as e: print("Scraper: ", scraper) tz = pytz.timezone("US/Central") +tz_str = " -0600 UTC" -DATETIME_FORMAT = '%B %d, %Y at %I:%M %p' +DATETIME_FORMAT = '%B %d, %Y at %I:%M %p %z %Z' calendar_url = 'https://www.stpaul.gov/calendar' city_site = "https://www.stpaul.gov" @@ -64,7 +65,7 @@ def getEvents(br): event_type = 'Gv', show_title = title, show_link = link, - show_date = datetime.strptime(dateTime, DATETIME_FORMAT), + show_date = datetime.strptime(dateTime + tz_str, DATETIME_FORMAT), show_day = datetime.strptime(dateTime, DATETIME_FORMAT), venue = venue, scraper = scraper diff --git a/Working/govt/or.portland.py b/Working/govt/or.portland.py index 894c03d..3176d11 100644 --- a/Working/govt/or.portland.py +++ b/Working/govt/or.portland.py @@ -20,14 +20,16 @@ venue, created = Organization.objects.get_or_create( is_venue=True ) -scraper,item_count_start,virtcal = digitools.getScraper(venue, 'pdx') +scraper,item_count_start,virtcal = digitools.getScraper(venue, venue.website, 'pdx') event_type = "Gv" # Time Signatures tz = pytz.timezone("US/Eastern") -DATETIME_FORMAT = '%B %d, %Y %I:%M %p' -DATETIME_FORMAT_2 = '%B %d, %Y' +tz_str = " -0800 UTC" + +DATETIME_FORMAT = '%B %d, %Y %I:%M %p %z %Z' +DATETIME_FORMAT_2 = '%B %d, %Y %z %Z' def get_events(ps, event_type): print("Getting events ...") @@ -44,9 +46,9 @@ def get_events(ps, event_type): event['time'] = c.xpath('.//*/span[@class="pe-4"]/text()')[0].replace("\n", "").strip() # event['time2'] = c.xpath('.//*/span[@class="pe-4"]/text()') try: - event['dateStamp'] = datetime.strptime(event['date']+" "+event['time'], DATETIME_FORMAT) + event['dateStamp'] = datetime.strptime(event['date']+" "+event['time'] + tz_str, DATETIME_FORMAT) except: - event['dateStamp'] = datetime.strptime(event['date'], DATETIME_FORMAT_2) + event['dateStamp'] = datetime.strptime(event['date'] + tz_str, DATETIME_FORMAT_2) # ppr(event) diff --git a/Working/govt/pa.philadelpha.py b/Working/govt/pa.philadelpha.py index a0cda0f..0fa226a 100644 --- a/Working/govt/pa.philadelpha.py +++ b/Working/govt/pa.philadelpha.py @@ -20,13 +20,14 @@ venue, created = Organization.objects.get_or_create( is_venue=True ) -scraper,item_count_start,virtcal = digitools.getScraper(venue, 'phl') +scraper,item_count_start,virtcal = digitools.getScraper(venue, venue.website, 'phl') event_type = "Gv" # Time Signatures tz = pytz.timezone("US/Eastern") -DATETIME_FORMAT = '%m/%d/%Y %I:%M %p' +tz_str = " -0500 UTC" +DATETIME_FORMAT = '%m/%d/%Y %I:%M %p %z %Z' DATETIME_FORMAT_2 = '%B %d, %Y' def get_events(ps, event_type): @@ -41,7 +42,7 @@ def get_events(ps, event_type): event['title'] = c.xpath('.//*/a/text()')[0] event['time'] = c.xpath('.//*/span/text()')[2] event['date'] = c.xpath('.//td[@class="rgSorted"]/text()')[0] - event['dateStamp'] = datetime.strptime(event['date']+" "+event['time'], DATETIME_FORMAT) + event['dateStamp'] = datetime.strptime(event['date']+" "+event['time'] + tz_str, DATETIME_FORMAT) # ppr(event) digitools.createBasicEvent(event, event_type, venue) scraper.items+=1 diff --git a/Working/iCal/col.mde.yoga.py b/Working/iCal/col.mde.yoga.py new file mode 100644 index 0000000..3545d49 --- /dev/null +++ b/Working/iCal/col.mde.yoga.py @@ -0,0 +1,53 @@ +import requests, os, sys +from icalendar import Calendar as iCalendar, Event + +from datetime import datetime, timedelta +from dateutil import relativedelta +td = relativedelta.relativedelta(hours=5) + +from pprint import pprint as ppr +import pytz + +sys.path.append('/var/www/digisnaxx.ado/scrapers') +import dtss +dtss.getReady() + +from events.models import Event as DSEvent, Organization, Scraper, Calendar +import events.digitools as digitools + +venue, created = Organization.objects.get_or_create( + name="Yoga MDE", + city="Medellin", + website="https://digisnaxx.com/", + ) + +try: + scraper, created = Scraper.objects.get_or_create( + name="Yoga MDE", + website="https://calendar.google.com/calendar/ical/721a61e06e9a96b7bd30cdb7439aa7791829c316bb8b77237ea93cf41d5396b4%40group.calendar.google.com/public/basic.ics", + calendar = Calendar.objects.get(shortcode='mde'), + items = 0, + new_items = 0, + last_ran = datetime.now(), + ) +except Exception as e: + print(e) + scraper = Scraper.objects.get(name=venue.name) + +item_count_start = scraper.items +objIcalData = requests.get(scraper.website) +gcal = iCalendar.from_ical(objIcalData.text.strip()) +counter = 0 +digitools.getiCalRepeateEvents(gcal, scraper, venue, "Ex", "mde") +digitools.updateScraper(scraper, item_count_start) + +new_time = datetime.now() - timedelta(days=1) +right_bound_time = datetime.now() + timedelta(days=45) +events = DSEvent.objects.filter(show_date__lte=new_time) +events1 = DSEvent.objects.filter(show_date__gte=right_bound_time) + +for e in events: + e.delete() + +for e in events1: + e.delete() diff --git a/Working/iCal/col.mde.yoga.py~ b/Working/iCal/col.mde.yoga.py~ new file mode 100644 index 0000000..336d676 --- /dev/null +++ b/Working/iCal/col.mde.yoga.py~ @@ -0,0 +1,55 @@ +import requests, os, sys +from icalendar import Calendar as iCalendar, Event + +from datetime import datetime, timedelta +from dateutil import relativedelta +td = relativedelta.relativedelta(hours=5) + +from pprint import pprint as ppr +import pytz + +sys.path.append('/var/www/digisnaxx.ado/scrapers') +import dtss +dtss.getReady() + +from events.models import Event as DSEvent, Organization, Scraper, Calendar +import events.digitools as digitools + +venue, created = Organization.objects.get_or_create( + name="idioki", + city="Medellin", + website="https://idioki.com/", + ) + +try: + scraper, created = Scraper.objects.get_or_create( + name="Yoga MDE", + website="", + calendar = Calendar.objects.get(shortcode='mde'), + items = 0, + new_items = 0, + last_ran = datetime.now(), + ) +except Exception as e: + print(e) + scraper = Scraper.objects.get(name=venue.name) + +event_type = "Mu" +item_count_start = scraper.items +objIcalData = requests.get(scraper.website) +gcal = iCalendar.from_ical(objIcalData.text) + +counter = 0 +digitools.getiCalRepeateEvents(gcal, scraper, venue, "Ed", "mde") +digitools.updateScraper(scraper, item_count_start) + +new_time = datetime.now() - timedelta(days=1) +right_bound_time = datetime.now() + timedelta(days=45) +events = DSEvent.objects.filter(show_date__lte=new_time) +events1 = DSEvent.objects.filter(show_date__gte=right_bound_time) + +for e in events: + e.delete() + +for e in events1: + e.delete() diff --git a/Working/iCal/col.medellin.py b/Working/iCal/col.medellin.py index 750795c..03f08aa 100644 --- a/Working/iCal/col.medellin.py +++ b/Working/iCal/col.medellin.py @@ -1,7 +1,7 @@ import requests, os, sys from icalendar import Calendar as iCalendar, Event -from datetime import datetime +from datetime import datetime, timedelta from dateutil import relativedelta td = relativedelta.relativedelta(hours=5) @@ -34,13 +34,11 @@ except Exception as e: print(e) scraper = Scraper.objects.get(name=venue.name) -event_type = "Mu" item_count_start = scraper.items objIcalData = requests.get(scraper.website) gcal = iCalendar.from_ical(objIcalData.text) - counter = 0 -digitools.getiCalRepeateEvents(gcal, scraper, venue, "Ed", cal) +digitools.getiCalRepeateEvents(gcal, scraper, venue, "Ed", "mde") digitools.updateScraper(scraper, item_count_start) new_time = datetime.now() - timedelta(days=1) @@ -52,4 +50,4 @@ for e in events: e.delete() for e in events1: - e.delete() \ No newline at end of file + e.delete() diff --git a/Working/iCal/df.online_events.py b/Working/iCal/df.online_events.py index 7ad133a..4f0e73f 100644 --- a/Working/iCal/df.online_events.py +++ b/Working/iCal/df.online_events.py @@ -1,7 +1,7 @@ import requests, os, sys from icalendar import Calendar as iCalendar, Event -from datetime import datetime +from datetime import datetime, timedelta from dateutil import relativedelta td = relativedelta.relativedelta(hours=5) @@ -40,17 +40,18 @@ objIcalData = requests.get(scraper.website) gcal = iCalendar.from_ical(objIcalData.text) counter = 0 - -digitools.getiCalRepeateEvents(gcal, scraper, venue, "Ed", cal) +print("Got Gcal") +digitools.getiCalRepeateEvents(gcal, scraper, venue, "Ed", "000") +print("Got EVents") digitools.updateScraper(scraper, item_count_start) +print("Updated") +# new_time = datetime.now() - timedelta(days=1) +# right_bound_time = datetime.now() + timedelta(days=45) +# events = DSEvent.objects.filter(show_date__lte=new_time) +# events1 = DSEvent.objects.filter(show_date__gte=right_bound_time) -new_time = datetime.now() - timedelta(days=1) -right_bound_time = datetime.now() + timedelta(days=45) -events = DSEvent.objects.filter(show_date__lte=new_time) -events1 = DSEvent.objects.filter(show_date__gte=right_bound_time) +# for e in events: +# e.delete() -for e in events: - e.delete() - -for e in events1: - e.delete() \ No newline at end of file +# for e in events1: +# e.delete() diff --git a/Working/iCal/il.chicago.citycouncil.py b/Working/iCal/il.chicago.citycouncil.py index 553373c..fd2ef13 100644 --- a/Working/iCal/il.chicago.citycouncil.py +++ b/Working/iCal/il.chicago.citycouncil.py @@ -21,13 +21,19 @@ venue, created = Organization.objects.get_or_create( website="https://chicityclerkelms.chicago.gov/Meetings/", ) -website="https://calendar.google.com/calendar/ical/chicagolegislativereference%40gmail.com/public/basic.ics", +website="https://calendar.google.com/calendar/ical/chicagolegislativereference%40gmail.com/public/basic.ics" +# website="https://calendar.google.com/calendar/ical/chicagolegislativereference%40gmail.com/public/basic.ics" scraper,item_count_start,virtcal = digitools.getScraper(venue, website, 'chi') - +print("Got Scraper") event_type = "Gv" item_count_start = scraper.items -objIcalData = requests.get(scraper.website) + +objIcalData = requests.get(website) +print("Got Obj") gcal = iCalendar.from_ical(objIcalData.text) + +print("Got Gcal") events = digitools.getiCalEvents(gcal, scraper, venue, event_type) -digitools.buildiCalEvents(events, event_type) +print("Got Events") +digitools.buildiCalEvents(events, event_type, scraper, venue) digitools.updateScraper(scraper, item_count_start) \ No newline at end of file diff --git a/Working/iCal/mn.mpls.bunkers.py b/Working/iCal/mn.mpls.bunkers.py index 90c07da..8cf882b 100644 --- a/Working/iCal/mn.mpls.bunkers.py +++ b/Working/iCal/mn.mpls.bunkers.py @@ -32,5 +32,5 @@ objIcalData = requests.get(scraper.website) gcal = iCalendar.from_ical(objIcalData.text) events = digitools.getiCalEvents(gcal, scraper, venue, event_type) -digitools.buildiCalEvents(events, event_type) +digitools.buildiCalEvents(events, event_type, scraper, venue) digitools.updateScraper(scraper, item_count_start) diff --git a/Working/iCal/mn.mpls.cafac.py b/Working/iCal/mn.mpls.cafac.py index 0a73e79..8ffd649 100644 --- a/Working/iCal/mn.mpls.cafac.py +++ b/Working/iCal/mn.mpls.cafac.py @@ -28,5 +28,5 @@ item_count_start = scraper.items objIcalData = requests.get(scraper.website) gcal = iCalendar.from_ical(objIcalData.text) events = digitools.getiCalEvents(gcal, scraper, venue, event_type) -digitools.buildiCalEvents(events, event_type) +digitools.buildiCalEvents(events, event_type, scraper, venue) digitools.updateScraper(scraper, item_count_start) diff --git a/Working/iCal/mn.mpls.eagles.py b/Working/iCal/mn.mpls.eagles.py index cdfc3ba..af3c358 100644 --- a/Working/iCal/mn.mpls.eagles.py +++ b/Working/iCal/mn.mpls.eagles.py @@ -28,5 +28,5 @@ item_count_start = scraper.items objIcalData = requests.get(scraper.website) gcal = iCalendar.from_ical(objIcalData.text) events = digitools.getiCalEvents(gcal, scraper, venue, event_type) -digitools.buildiCalEvents(events, event_type) +digitools.buildiCalEvents(events, event_type, scraper, venue) digitools.updateScraper(scraper, item_count_start) \ No newline at end of file diff --git a/Working/iCal/mn.mpls.socialablecider.py b/Working/iCal/mn.mpls.socialablecider.py index a163558..c3f3def 100644 --- a/Working/iCal/mn.mpls.socialablecider.py +++ b/Working/iCal/mn.mpls.socialablecider.py @@ -28,5 +28,5 @@ item_count_start = scraper.items objIcalData = requests.get(scraper.website) gcal = iCalendar.from_ical(objIcalData.text) events = digitools.getiCalEvents(gcal, scraper, venue, "Mu") -digitools.buildiCalEvents(events, event_type) +digitools.buildiCalEvents(events, event_type, scraper, venue) digitools.updateScraper(scraper, item_count_start) \ No newline at end of file diff --git a/Working/iCal/mn.mpls.terminalbar.py b/Working/iCal/mn.mpls.terminalbar.py index a5aee93..3f1c1b6 100644 --- a/Working/iCal/mn.mpls.terminalbar.py +++ b/Working/iCal/mn.mpls.terminalbar.py @@ -29,5 +29,5 @@ item_count_start = scraper.items objIcalData = requests.get(scraper.website) gcal = iCalendar.from_ical(objIcalData.text) events = digitools.getiCalEvents(gcal, scraper, venue, event_type) -digitools.buildiCalEvents(events, event_type) +digitools.buildiCalEvents(events, event_type, scraper, venue) digitools.updateScraper(scraper, item_count_start) \ No newline at end of file diff --git a/Working/iCal/mn.stp.cfpa.py b/Working/iCal/mn.stp.cfpa.py index 2b6422f..b363bf7 100644 --- a/Working/iCal/mn.stp.cfpa.py +++ b/Working/iCal/mn.stp.cfpa.py @@ -28,5 +28,5 @@ item_count_start = scraper.items objIcalData = requests.get(scraper.website) gcal = iCalendar.from_ical(objIcalData.text) events = digitools.getiCalEvents(gcal, scraper, venue, event_type) -digitools.buildiCalEvents(events, event_type) +digitools.buildiCalEvents(events, event_type, scraper, venue) digitools.updateScraper(scraper, item_count_start) \ No newline at end of file diff --git a/Working/iCal/mn.stp.whitesquirrel.py b/Working/iCal/mn.stp.whitesquirrel.py index 3a91ffa..37f0211 100644 --- a/Working/iCal/mn.stp.whitesquirrel.py +++ b/Working/iCal/mn.stp.whitesquirrel.py @@ -28,6 +28,9 @@ scraper,item_count_start,virtcal = digitools.getScraper(venue, website, 'msp') item_count_start = scraper.items objIcalData = requests.get(scraper.website) gcal = iCalendar.from_ical(objIcalData.content) +print("Got gcal") events = digitools.getiCalEvents(gcal, scraper, venue, event_type) -digitools.buildiCalEvents(events, event_type) +print("Got Events") +digitools.buildiCalEvents(events, event_type, scraper, venue) +print("Built Events") digitools.updateScraper(scraper, item_count_start) \ No newline at end of file diff --git a/Working/venues/au.vi.arenawien.py b/Working/venues/au.vi.arenawien.py new file mode 100644 index 0000000..1c957c3 --- /dev/null +++ b/Working/venues/au.vi.arenawien.py @@ -0,0 +1,86 @@ +import os, sys +from datetime import datetime, timedelta +from dateutil import relativedelta + +sys.path.append('/var/www/digisnaxx.ado/scrapers') +import dtss +dtss.getReady() + +from time import sleep +from pprint import pprint as ppr +import pytz + +from selenium.webdriver.common.by import By + +from events.models import Organization, Scraper, Calendar, Event +import events.digitools as digitools + +tz_str = "+0100 UTC" +DATETIME_FORMAT = '%B %d %Y %H:%M %z %Z' + +venue, created = Organization.objects.get_or_create( + name="Arena Wien", + city="Vienna", + website="https://arena.wien/Home/Programm", + is_venue = True + ) + +scraper,item_count_start,virtcal = digitools.getScraper(venue, venue.website, 'vie') +scraper.items = 0 +scraper.save() + +def getSite(br, website): + ps = digitools.getSource(br, website) + get_events(ps, "Mu") + sleep(3) + +def get_events(ps, event_type): + contents = ps.xpath('.//*/div[@class="suite_calRowContainer "]') + for c in contents: + try: + event = {} + date = c.xpath('.//*/span[@class="suite_datePlate"]/span/text()') + time = c.xpath('.//*/span[@class="col-md-2 suite_EvenTime"]/span/text()') + time = [x.replace("\n", "").strip() for x in time][2] + day, month, year = date[0].strip(), date[2].split("|")[0].replace(".", "").strip(), date[2].split("|")[1].strip() + month = digitools.translateMonth(month) + event['date'] = (' ').join([month, day, year, time, tz_str]) + event['scraper'] = scraper + event['calendars'] = [scraper.calendar] + event['title'] = c.xpath('.//*/span[@class="Event_H1"]/text()')[0] + try: + event['dateStamp'] = datetime.strptime(event['date'], DATETIME_FORMAT) + except Exception as e: + print(e) + pass + event['link'] = c.xpath('.//a/@href')[0] + digitools.createBasicEvent(event, "Mu", venue) + scraper.items+=1 + except Exception as e: + print("\nError: ", e) + ppr(event) + # print("\n+++\n") + pass + +if len(sys.argv) >= 2: + arg1 = sys.argv[1] + br = digitools.getBrowser(arg1) +else: + print("No run_env") + br.close() + quit() + +month = datetime.now().month +year = datetime.now().year + +odt_next_month = datetime.now() + relativedelta.relativedelta(months=1) +next_month = odt_next_month.month + +website = "https://arena.wien/Home/Programm#data_abonnement=-1&data_month={}&data_year={}".format(str(month), str(year)) +website_2 = "https://arena.wien/Home/Programm#data_abonnement=-1&data_month={}&data_year={}".format(str(next_month), str(year)) + +getSite(br,website) +getSite(br,website_2) + +digitools.updateScraper(scraper, item_count_start) +br.close() diff --git a/Working/venues/au.vi.vienna-city.py b/Working/venues/au.vi.vienna-city.py new file mode 100644 index 0000000..5b9f08c --- /dev/null +++ b/Working/venues/au.vi.vienna-city.py @@ -0,0 +1,81 @@ +import os, sys +from datetime import datetime, timedelta +from dateutil import relativedelta + +sys.path.append('/var/www/digisnaxx.ado/scrapers') +import dtss +dtss.getReady() + +from time import sleep +from pprint import pprint as ppr +import pytz + +from selenium.webdriver.common.by import By + +from events.models import Organization, Scraper, Calendar, Event +import events.digitools as digitools + +tz_str = "+0100 UTC" +DATETIME_FORMAT = '%B %d %Y %H:%M %z %Z' + +venue, created = Organization.objects.get_or_create( + name="City Site", + city="Vienna", + website="https://www.wien.gv.at/", + is_venue = True + ) + +scraper,item_count_start,virtcal = digitools.getScraper(venue, venue.website, 'vie') +scraper.items = 0 +scraper.save() + +def getSite(br, website): + ps = digitools.getSource(br, website) + get_events(ps, "Mu") + sleep(3) + +def get_events(ps, event_type): + contents = ps.xpath('.//*/wm-card') + for c in contents: + try: + event = {} + date = c.xpath('.//*/ul/li/text()') + # time = c.xpath('.//*/span[@class="col-md-2 suite_EvenTime"]/span/text()') + # time = [x.replace("\n", "").strip() for x in time][2] + # day, month, year = date[0].strip(), date[2].split("|")[0].replace(".", "").strip(), date[2].split("|")[1].strip() + # month = digitools.translateMonth(month) + event['date'] = (' ').join([month, day, year, time, tz_str]) + event['scraper'] = scraper + event['calendars'] = [scraper.calendar] + event['title'] = c.xpath('.//*/h3/a/text()')[0] + try: + event['dateStamp'] = datetime.strptime(event['date'], DATETIME_FORMAT) + except Exception as e: + print(e) + pass + event['link'] = c.xpath('.//a/@href')[0] + digitools.createBasicEvent(event, "Mu", venue) + scraper.items+=1 + except Exception as e: + print("\nError: ", e) + ppr(event) + # print("\n+++\n") + pass + +if len(sys.argv) >= 2: + arg1 = sys.argv[1] + br = digitools.getBrowser(arg1) +else: + print("No run_env") + br.close() + quit() + +site_append = "veranstaltungen/suche?q=&facet={}&page={}".format('this month', 1) + +website = venue.website + site_append + +getSite(br,website) +# getSite(br,website_2) + +digitools.updateScraper(scraper, item_count_start) +br.close() diff --git a/Working/venues/au.vie.flex.py b/Working/venues/au.vie.flex.py new file mode 100644 index 0000000..f4da52b --- /dev/null +++ b/Working/venues/au.vie.flex.py @@ -0,0 +1,77 @@ +import os, sys +from datetime import datetime, timedelta +from dateutil import relativedelta + +sys.path.append('/var/www/digisnaxx.ado/scrapers') +import dtss +dtss.getReady() + +from time import sleep +from pprint import pprint as ppr +import pytz + +from selenium.webdriver.common.by import By + +from events.models import Organization, Scraper, Calendar, Event +import events.digitools as digitools + +tz_str = "+0100 UTC" +DATETIME_FORMAT = '%b %d %Y %H:%M %z %Z' + +venue, created = Organization.objects.get_or_create( + name="Flex", + city="Vienna", + website="https://flex.at/", + is_venue = True + ) + +scraper,item_count_start,virtcal = digitools.getScraper(venue, venue.website, 'vie') +scraper.items = 0 +scraper.save() + +def getSite(br, website): + ps = digitools.getSource(br, website) + get_events(ps, "Mu") + sleep(3) + +def get_events(ps, event_type): + contents = ps.xpath('.//*/div[@class="ectbe-inner-wrapper ectbe-simple-event "]') + for c in contents: + try: + event = {} + date = c.xpath('.//div[@class="ectbe-date-wrp elementor-repeater-item-dd81c19"]/span/text()') + time = c.xpath('.//*/div[@class="ectbe-evt-time elementor-repeater-item-fd61cbc"]/text()')[0].split('-')[0].strip() + year = datetime.now().year + if date[1] == 'März': + date[1] = "Mar" + event['date'] = (' ').join([date[1].replace(".", ""), date[0], str(year), time, tz_str]) + event['scraper'] = scraper + event['calendars'] = [scraper.calendar] + event['title'] = c.xpath('.//*/h2/text()')[0] + try: + event['dateStamp'] = datetime.strptime(event['date'], DATETIME_FORMAT) + except Exception as e: + print(e) + pass + event['link'] = c.xpath('.//a[@class="ectbe-evt-read-more"]/@href')[0] + digitools.createBasicEvent(event, "Mu", venue) + scraper.items+=1 + # ppr(event) + except Exception as e: + print("\nError: ", e) + ppr(event) + # print("\n+++\n") + pass + +if len(sys.argv) >= 2: + arg1 = sys.argv[1] + br = digitools.getBrowser(arg1) +else: + print("No run_env") + br.close() + quit() + +getSite(br, venue.website) + +digitools.updateScraper(scraper, item_count_start) +br.close() diff --git a/Working/venues/il.chi.emptybottle.py b/Working/venues/il.chi.emptybottle.py new file mode 100644 index 0000000..5122d56 --- /dev/null +++ b/Working/venues/il.chi.emptybottle.py @@ -0,0 +1,66 @@ +import os, sys +from datetime import datetime +from dateutil import relativedelta + +sys.path.append('/var/www/digisnaxx.ado/scrapers') +import dtss +dtss.getReady() + +from time import sleep +from pprint import pprint as ppr +import pytz + +from events.models import Organization, Scraper, Calendar, Event +import events.digitools as digitools + +tz_str = "-0600 UTC" +DATETIME_FORMAT = '%a %B %d %Y %I:%M%p %z %Z' + +venue, created = Organization.objects.get_or_create( + name="Empty Bottle", + city="Chicago", + website="https://www.emptybottle.com/", + is_venue = True + ) + +scraper,item_count_start,virtcal = digitools.getScraper(venue, venue.website, 'chi') +scraper.items = 0 +scraper.save() + +def get_events(ps, event_type): + contents = ps.xpath('.//*/div[@class="eb-item"]') + for c in contents: + try: + event = {} + date = c.xpath('.//*/div[@class="date"]/text()')[0] + time = c.xpath('.//*/div[@class="start-time"]/text()')[0] + year = datetime.now().year + event['date'] = (' ').join([date, str(year), time, tz_str]) + event['scraper'] = scraper + event['calendars'] = [scraper.calendar] + event['title'] = c.xpath('.//*/div[@class="title"]/text()')[0] + event['venue'] = c.xpath('.//*/a[@class="venue"]/text()')[0] + event['dateStamp'] = datetime.strptime(event['date'], DATETIME_FORMAT) + event['link'] = venue.website + if event['venue'] == 'Empty Bottle': + digitools.createBasicEvent(event, "Mu", venue) + scraper.items+=1 + except Exception as e: + print("\nError: ", e) + # ppr(event) + pass + +if len(sys.argv) >= 2: + arg1 = sys.argv[1] + br = digitools.getBrowser(arg1) +else: + print("No run_env") + br.close() + quit() + +ps = digitools.getSource(br, venue.website) +get_events(ps, "Mu") +sleep(3) + +digitools.updateScraper(scraper, item_count_start) +br.close() diff --git a/Working/venues/il.chi.hideout.py b/Working/venues/il.chi.hideout.py new file mode 100644 index 0000000..4c69fdb --- /dev/null +++ b/Working/venues/il.chi.hideout.py @@ -0,0 +1,68 @@ +import os, sys +from datetime import datetime +from dateutil import relativedelta + +sys.path.append('/var/www/digisnaxx.ado/scrapers') +import dtss +dtss.getReady() + +from time import sleep +from pprint import pprint as ppr +import pytz + +from events.models import Organization, Scraper, Calendar, Event +import events.digitools as digitools + +tz = pytz.timezone("US/Central") +tz_str = "-0600 UTC" +DATETIME_FORMAT = '%a, %b %d, %Y %I:%M%p %z %Z' +DATETIME_FORMAT_2 = '%a, %b %d, %Y %I %p %z %Z' + +venue, created = Organization.objects.get_or_create( + name="Hideout - Chicago", + city="Chicago", + website="https://hideoutchicago.com/", + is_venue = True + ) + +scraper,item_count_start,virtcal = digitools.getScraper(venue, venue.website, 'chi') +scraper.items = 0 +scraper.save() + +def get_events(ps, event_type): + contents = ps.xpath('.//*/div[@class="col-12 eventWrapper rhpSingleEvent py-4 px-0 rhp-event__single-event--list"]') + for c in contents: + try: + event = {} + date = c.xpath('.//*/div[@id="eventDate"]/text()')[0].replace("\n", "").replace("\t", "") + time = c.xpath('.//*/span[@class="font0by75 fontWeight500 lineHeight15 rhp-event__time-text--list"]/text()')[0].split("//")[1].replace("Doors: ", "").replace("\n", "").replace("\t", "") + event['date'] = (' ').join([date, time, tz_str]) + event['scraper'] = scraper + event['calendars'] = [scraper.calendar] + event['title'] = c.xpath('.//*/a[@id="eventTitle"]/h2/text()')[0].replace("\n", "").replace("\t", "") + try: + event['dateStamp'] = datetime.strptime(event['date'], DATETIME_FORMAT) + except: + event['dateStamp'] = datetime.strptime(event['date'], DATETIME_FORMAT_2) + event['link'] = c.xpath('.//*/a[@id="eventTitle"]/@href')[0] + digitools.createBasicEvent(event, "Mu", venue) + scraper.items+=1 + except Exception as e: + print("\nError: ", e) + # ppr(event) + pass + +if len(sys.argv) >= 2: + arg1 = sys.argv[1] + br = digitools.getBrowser(arg1) +else: + print("No run_env") + br.close() + quit() + +ps = digitools.getSource(br, venue.website) +get_events(ps, "Mu") +sleep(3) + +digitools.updateScraper(scraper, item_count_start) +br.close() diff --git a/Working/venues/il.chi.reggies.py b/Working/venues/il.chi.reggies.py new file mode 100644 index 0000000..705f6a9 --- /dev/null +++ b/Working/venues/il.chi.reggies.py @@ -0,0 +1,76 @@ +import os, sys +from datetime import datetime +from dateutil import relativedelta + +sys.path.append('/var/www/digisnaxx.ado/scrapers') +import dtss +dtss.getReady() + +from time import sleep +from pprint import pprint as ppr +import pytz + +from events.models import Organization, Scraper, Calendar, Event +import events.digitools as digitools + +tz = pytz.timezone("US/Central") +tz_str = "-0600 UTC" +DATETIME_FORMAT = '%Y-%m-%d %I:%M %p %z %Z' +# DATETIME_FORMAT_2 = '%a, %b %d, %Y %I %p %z %Z' + +venue, created = Organization.objects.get_or_create( + name="Reggies", + city="Chicago", + website="https://www.reggieslive.com/", + is_venue = True + ) + +scraper,item_count_start,virtcal = digitools.getScraper(venue, venue.website, 'chi') +scraper.items = 0 +scraper.save() + +def get_events(ps, event_type): + contents = ps.xpath('.//*/article') + for c in contents: + try: + event = {} + date = c.xpath('.//*/time/@datetime')[0] + time = c.xpath('.//*/li[@class="first"]/text()')[0] + presented_by = c.xpath('.//*/p[@class="presented-by"]/text()')[0] + event['date'] = (' ').join([date, time, tz_str]) + event['scraper'] = scraper + event['calendars'] = [scraper.calendar] + event['title'] = c.xpath('.//*/hgroup/h2/text()')[0] + try: + event['dateStamp'] = datetime.strptime(event['date'], DATETIME_FORMAT) + except: + event['date'] = (' ').join([date, time.replace("Doors", "").strip(), tz_str]) + event['dateStamp'] = datetime.strptime(event['date'], DATETIME_FORMAT) + event['link'] = venue.website + if "omedy" in presented_by: + digitools.createBasicEvent(event, "Co", venue) + elif any(word in presented_by for word in ["game", "bingo", "Sports"]): + digitools.createBasicEvent(event, "Co", venue) + else: + digitools.createBasicEvent(event, "Mu", venue) + except Exception as e: + print("\nError: ", e) + # ppr(event) + pass + +if len(sys.argv) >= 2: + arg1 = sys.argv[1] + br = digitools.getBrowser(arg1) +else: + print("No run_env") + br.close() + quit() + + +themes = [] +ps = digitools.getSource(br, venue.website) +get_events(ps, "Mu") +sleep(1) + +digitools.updateScraper(scraper, item_count_start) +br.close() diff --git a/Working/venues/il.chi.subterranean.py b/Working/venues/il.chi.subterranean.py new file mode 100644 index 0000000..d7cc39a --- /dev/null +++ b/Working/venues/il.chi.subterranean.py @@ -0,0 +1,73 @@ +import os, sys +from datetime import datetime +from dateutil import relativedelta + +sys.path.append('/var/www/digisnaxx.ado/scrapers') +import dtss +dtss.getReady() + +from time import sleep +from pprint import pprint as ppr +import pytz + +from events.models import Organization, Scraper, Calendar, Event +import events.digitools as digitools + +tz = pytz.timezone("US/Central") +tz_str = "-0600 UTC" +DATETIME_FORMAT = '%a %b %d %Y %I:%M %p %z %Z' +# DATETIME_FORMAT_2 = '%a, %b %d, %Y %I %p %z %Z' + +venue, created = Organization.objects.get_or_create( + name="Subterranean", + city="Chicago", + website="https://subt.net/", + is_venue = True + ) + +scraper,item_count_start,virtcal = digitools.getScraper(venue, venue.website, 'chi') +scraper.items = 0 +scraper.save() + +def get_events(ps, event_type): + contents = ps.xpath('.//*/div[@class="event-info-block"]') + for c in contents: + try: + event = {} + date = c.xpath('.//p[@class="fs-18 bold mt-1r event-date"]/text()')[0] + time = c.xpath('.//*/span[@class="door-time"]/text()')[0].replace("Doors: ", "").replace("/", "").strip() + year = datetime.now().year + event['date'] = (' ').join([date, str(year), time, tz_str]) + event['scraper'] = scraper + event['calendars'] = [scraper.calendar] + event['title'] = c.xpath('.//p[@class="fs-18 bold mb-12 event-title"]/a/text()')[0] + try: + event['support'] = c.xpath('.//p[@class="fs-12 supporting-talent"]/text()')[0] + except: + pass + event['venue'] = c.xpath('.//p[@class="fs-12 venue"]/text()')[0] + event['dateStamp'] = datetime.strptime(event['date'], DATETIME_FORMAT) + event['link'] = venue.website + if len(event['support']) > 0: + event['new_title'] = event['title'] + " w/ " + event['support'] + digitools.createBasicEvent(event, "Mu", venue) + scraper.items+=1 + except Exception as e: + print("\nError: ", e) + # ppr(event) + pass + +if len(sys.argv) >= 2: + arg1 = sys.argv[1] + br = digitools.getBrowser(arg1) +else: + print("No run_env") + br.close() + quit() + +ps = digitools.getSource(br, venue.website) +get_events(ps, "Mu") +sleep(3) + +digitools.updateScraper(scraper, item_count_start) +br.close() diff --git a/Working/venues/il.chi.thaliahall.py b/Working/venues/il.chi.thaliahall.py new file mode 100644 index 0000000..c244d1c --- /dev/null +++ b/Working/venues/il.chi.thaliahall.py @@ -0,0 +1,67 @@ + +import os, sys +from datetime import datetime +from dateutil import relativedelta + +sys.path.append('/var/www/digisnaxx.ado/scrapers') +import dtss +dtss.getReady() + +from time import sleep +from pprint import pprint as ppr +import pytz + +from events.models import Organization, Scraper, Calendar, Event +import events.digitools as digitools + + +tz_str = "-0600 UTC" +DATETIME_FORMAT = '%a %B %d %Y %I:%M%p %z %Z' + +venue, created = Organization.objects.get_or_create( + name="Thalia Hall", + city="Chicago", + website="https://www.thaliahallchicago.com/", + is_venue = True + ) + +scraper,item_count_start,virtcal = digitools.getScraper(venue, venue.website, 'chi') +scraper.items = 0 +scraper.save() + +def get_events(ps, event_type): + contents = ps.xpath('.//*/div[@class="eb-item"]') + for c in contents: + try: + event = {} + date = c.xpath('.//*/div[@class="date"]/text()')[0] + time = c.xpath('.//*/div[@class="start-time"]/text()')[0].replace("Doors: ", "") + year = datetime.now().year + event['date'] = (' ').join([date, str(year), time, tz_str]) + event['scraper'] = scraper + event['calendars'] = [scraper.calendar] + event['title'] = c.xpath('.//*/div[@class="title"]/text()')[0] + event['venue'] = c.xpath('.//*/a[@class="venue"]/text()')[0] + event['dateStamp'] = datetime.strptime(event['date'], DATETIME_FORMAT) + event['link'] = venue.website + if event['venue'] == 'Thalia Hall': + digitools.createBasicEvent(event, "Mu", venue) + scraper.items+=1 + except Exception as e: + print("\nError: ", e) + pass + +if len(sys.argv) >= 2: + arg1 = sys.argv[1] + br = digitools.getBrowser(arg1) +else: + print("No run_env") + br.close() + quit() + +ps = digitools.getSource(br, venue.website) +get_events(ps, "Mu") +sleep(3) + +digitools.updateScraper(scraper, item_count_start) +br.close() diff --git a/Working/venues/ma.bos.asylum.py b/Working/venues/ma.bos.asylum.py new file mode 100644 index 0000000..6632a63 --- /dev/null +++ b/Working/venues/ma.bos.asylum.py @@ -0,0 +1,65 @@ +import os, sys +from datetime import datetime +from dateutil import relativedelta + +sys.path.append('/var/www/digisnaxx.ado/scrapers') +import dtss +dtss.getReady() + +from time import sleep +from pprint import pprint as ppr +import pytz + +from events.models import Organization, Scraper, Calendar, Event +import events.digitools as digitools + +tz_str = "-0500 UTC" +DATETIME_FORMAT = '%A, %B %d, %Y %I:%M %p %z %Z' + +venue, created = Organization.objects.get_or_create( + name="Asylum Comedy", + city="Boston", + website="https://calendar.improvasylum.com/", + is_venue = True + ) + +scraper,item_count_start,virtcal = digitools.getScraper(venue, venue.website, 'bos') +scraper.items = 0 +scraper.save() + +def get_events(ps, event_type): + contents = ps.xpath('.//*/div[@class="space-y-4"]') + for c in contents: + try: + event = {} + date = c.xpath('.//*/h3[@class="text-lg font-extrabold uppercase"]/text()')[0] + time = c.xpath('.//*/p[@class="flex items-center gap-2"]/text()')[0].split("-")[0] + venue_str = c.xpath('.//*/p[@class="flex items-center gap-2"]/text()')[1] + event['scraper'] = scraper + event['calendars'] = [scraper.calendar] + event['title'] = c.xpath('.//*/h4[@class="text-lg font-extrabold transition-colors"]/text()')[0] + event['date'] = [date, time, tz_str] + event['date'] = " ".join(event['date']) + event['dateStamp'] = datetime.strptime(event['date'], DATETIME_FORMAT) + event['link'] = venue.website + digitools.createBasicEvent(event, "Co", venue) + scraper.items+=1 + print("\nSuccessn") + except Exception as e: + print("\nError: ", e) + pass + +if len(sys.argv) >= 2: + arg1 = sys.argv[1] + br = digitools.getBrowser(arg1) +else: + print("No run_env") + br.close() + quit() + +ps = digitools.getSource(br, venue.website) +get_events(ps, "Co") +sleep(3) + +digitools.updateScraper(scraper, item_count_start) +br.close() diff --git a/Working/venues/ma.bos.jpyoga.py b/Working/venues/ma.bos.jpyoga.py new file mode 100644 index 0000000..85d673f --- /dev/null +++ b/Working/venues/ma.bos.jpyoga.py @@ -0,0 +1,68 @@ +import os, sys +from datetime import datetime +from dateutil import relativedelta + +sys.path.append('/var/www/digisnaxx.ado/scrapers') +import dtss +dtss.getReady() + +from time import sleep +from pprint import pprint as ppr +import pytz + +from events.models import Organization, Scraper, Calendar, Event +import events.digitools as digitools + +tz_str = "-0500 UTC" +DATETIME_FORMAT = '%A, %B %d %Y %I:%M %p %z %Z' + +venue, created = Organization.objects.get_or_create( + name="JP Centre Yoga", + city="Boston", + website="https://www.jpcentreyoga.com/yoga-class-schedule", + is_venue = True + ) + +scraper,item_count_start,virtcal = digitools.getScraper(venue, venue.website, 'bos') +scraper.items = 0 +scraper.save() + +def get_events(ps, event_type): + contents = ps.xpath('.//*/div[@class="bw-widget__day"]') + for cn in contents: + date = cn.xpath('.//div[1]/text()')[0] + events = cn.xpath('.//div[@class="bw-session"]') + for c in events: + try: + event = {} + time = c.xpath('.//*/time[@class="hc_starttime"]/text()')[0] + event['scraper'] = scraper + event['calendars'] = [scraper.calendar] + event['title'] = c.xpath('.//*/div[@class="bw-session__name"]/text()')[1].replace("\n", "").strip() + year = datetime.now().year + event['date'] = [date, str(year), time, tz_str] + event['date'] = " ".join(event['date']) + event['dateStamp'] = datetime.strptime(event['date'], DATETIME_FORMAT) + event['link'] = venue.website + event, created = digitools.createBasicEvent(event, "Ex", venue) + if "o n l i n e" in event.show_title: + event = digitools.add_calendar(event, "000") + scraper.items+=1 + except Exception as e: + print("\nError: ", e) + pass + +if len(sys.argv) >= 2: + arg1 = sys.argv[1] + br = digitools.getBrowser(arg1) +else: + print("No run_env") + br.close() + quit() + +ps = digitools.getSource(br, venue.website) +get_events(ps, "Co") +sleep(3) + +digitools.updateScraper(scraper, item_count_start) +br.close() diff --git a/Working/venues/ma.bos.mideast.py b/Working/venues/ma.bos.mideast.py new file mode 100644 index 0000000..055d1a3 --- /dev/null +++ b/Working/venues/ma.bos.mideast.py @@ -0,0 +1,70 @@ +import os, sys +from datetime import datetime +from dateutil import relativedelta + +sys.path.append('/var/www/digisnaxx.ado/scrapers') +import dtss +dtss.getReady() + +from time import sleep +from pprint import pprint as ppr +import pytz + +from events.models import Organization, Scraper, Calendar, Event +import events.digitools as digitools + +tz_str = "-0500 UTC" +DATETIME_FORMAT = '%m.%d %Y %I:%M%p %z %Z' + +venue, created = Organization.objects.get_or_create( + name="The Middle East", + city="Boston", + website="https://mideastclub.com/", + is_venue = True + ) + +scraper,item_count_start,virtcal = digitools.getScraper(venue, venue.website, 'bos') +scraper.items = 0 +scraper.save() + +def get_events(ps, event_type): + contents = ps.xpath('.//*/div[@class="tw-section"]/div[@class="row"]') + for c in contents: + try: + event = {} + date = c.xpath('.//*/span[@class="tw-event-date"]/text()')[0] + time = c.xpath('.//*/span[@class="tw-event-time"]/text()')[0].replace("Show: ", "") + year = datetime.now().year + event['scraper'] = scraper + event['calendars'] = [scraper.calendar] + event['title'] = c.xpath('.//*/div[@class="tw-name"]/a/text()')[0] + event['details'] = c.xpath('.//*/span[@class="tw-venue-name"]/text()')[0].replace("\n", "").strip() + event['date'] = [date, str(year), time, tz_str] + event['date'] = " ".join(event['date']) + event['dateStamp'] = datetime.strptime(event['date'], DATETIME_FORMAT) + event['link'] = c.xpath('.//*/div[@class="tw-info-price-buy-tix"]/a/@href')[0] + if "Middle East" in event['details']: + digitools.createBasicEvent(event, "Mu", venue) + scraper.items+=1 + ppr(event) + print("\n+++\n") + except Exception as e: + print("\nError: ", e) + pass + +if len(sys.argv) >= 2: + arg1 = sys.argv[1] + br = digitools.getBrowser(arg1) +else: + print("No run_env") + br.close() + quit() + +links = ["https://mideastclub.com/page/1/", "https://mideastclub.com/page/2/", "https://mideastclub.com/page/3/", "https://mideastclub.com/page/4/"] + +for link in links: + ps = digitools.getSource(br, link) + get_events(ps, "Co") + +digitools.updateScraper(scraper, item_count_start) +br.close() diff --git a/Working/venues/manual/data.json b/Working/venues/manual/data.json deleted file mode 100644 index 1fb8eca..0000000 --- a/Working/venues/manual/data.json +++ /dev/null @@ -1,1295 +0,0 @@ -[ - { - "link": "https://eventario.co/events/faltan-5-pa-las-doce-2/", - "title": "FALTAN 5 PA´ LAS DOCE", - "venue": "LA MECHA TEJO", - "venueLink": "https://eventario.co/places/la-mecha-tejo/", - "label": "Fiesta de Ciudad", - "dateTime": [ - "29/11/25 2:00 PM" - ], - "location": "Llanogrande, Antioquia", - "address": "Vía Guarne - Llano Grande, 054048 Rionegro" - }, - { - "link": "https://eventario.co/events/deja-el-miedo-a-hablar-en-publico/", - "title": "Deja el miedo a hablar en público", - "venue": "Indie Universe Hotel & Coliving", - "venueLink": "https://eventario.co/places/indie-universe-hotel-coliving/", - "label": "Conferencias y Charlas", - "dateTime": [ - "29/11/25 7:00 PM", - "13/12/25 9:00 AM", - "14/12/25 9:00 AM", - "15/12/25 9:00 AM" - ], - "location": "Medellín, Antioquia", - "address": "Av. Nutibara #71-25, Laureles - Estadio" - }, - { - "link": "https://eventario.co/events/intercambio-de-idiomas-en-casa-almarita-%ef%b8%8f/", - "title": "Intercambio de Idiomas en Casa Almarita ️", - "venue": "Casa Almarita", - "venueLink": "https://eventario.co/places/casa-almarita/", - "label": "Intercambio de idiomas", - "dateTime": [ - "29/11/25 7:00 PM", - "6/12/25 7:00 PM", - "13/12/25 7:00 PM", - "20/12/25 7:00 PM" - ], - "location": "Medellín, Antioquia", - "address": "Calle 48b 79-39, 050034 Medellín" - }, - { - "link": "https://eventario.co/events/alborada-tropical/", - "title": "Alborada Tropical", - "venue": "CANDELA Tropical Rooftop", - "venueLink": "https://eventario.co/places/candela-tropical-rooftop/", - "label": "Fiesta de Ciudad", - "dateTime": [ - "30/11/25 6:00 PM" - ], - "location": "Bello, Antioquia", - "address": "Cra. 52 #33-34, Obrero" - }, - { - "link": "https://eventario.co/events/alboreo-en-naufrago/", - "title": "ALBOREO en Náufrago", - "venue": "Náufrago Bar", - "venueLink": "https://eventario.co/places/naufrago-bar/", - "label": "Fiesta de Ciudad", - "dateTime": [ - "30/11/25 7:00 PM" - ], - "location": "Medellín, Antioquia", - "address": "Carrera 37 10a 29, 050021 Medellín" - }, - { - "link": "https://eventario.co/events/alborada-2025/", - "title": "ALBORADA 2025", - "venue": "Hostal del Cielo Medellin", - "venueLink": "https://eventario.co/places/hostal-del-cielo-medellin/", - "label": "Fiesta de Ciudad", - "dateTime": [ - "30/11/25 7:00 PM" - ], - "location": "Medellín, Antioquia", - "address": "Cl. 55 #127-46, San Javier La Loma" - }, - { - "link": "https://eventario.co/events/primer-aniversario/", - "title": "Primer Aniversario", - "venue": "Quereme", - "venueLink": "https://eventario.co/places/quereme/", - "label": "Fiesta de Ciudad", - "dateTime": [ - "30/11/25 8:00 PM" - ], - "location": "Antioquia", - "address": "Cra. 11 #9a-35, Medellin" - }, - { - "link": "https://eventario.co/events/fieston-de-alborada-en-coyo-taco/", - "title": "Fiestón de Alborada en Coyo Taco", - "venue": "Coyo Taco", - "venueLink": "https://eventario.co/places/coyo-taco/", - "label": "Fiesta de Ciudad", - "dateTime": [ - "30/11/25 10:00 PM" - ], - "location": "Medellín, Antioquia", - "address": "Carrera 35 8a-45, 050021 Medellín" - }, - { - "link": "https://eventario.co/events/comunidades-de-bienestar-y-kids/", - "title": "Comunidades de Bienestar y Kids", - "venue": "Centro Comercial Los Molinos", - "venueLink": "https://eventario.co/places/centro-comercial-los-molinos/", - "label": "Familia y Niños", - "dateTime": [ - "1/12/25 9:00 AM", - "3/12/25 9:00 AM", - "8/12/25 9:00 AM", - "10/12/25 9:00 AM" - ], - "location": "Medellín, Antioquia", - "address": "Carrera 82 30a-46, 050026 Medellín" - }, - { - "link": "https://eventario.co/events/de-que-vas-a-vivir-miamor-yo-no-quiero-trabajar/", - "title": "¿De qué vas a vivir miamor? - Yo no quiero trabajar", - "venue": "La Pascasia", - "venueLink": "https://eventario.co/places/la-pascasia/", - "label": "Conferencias y Charlas", - "dateTime": [ - "1/12/25 6:00 PM" - ], - "location": "Medellín, Antioquia", - "address": "Calle 47 43-88, 050016 Medellín" - }, - { - "link": "https://eventario.co/events/noche-de-juegos-game-night/", - "title": "Noche de juegos", - "venue": "Masaya Medellín", - "venueLink": "https://eventario.co/places/masaya-medellin/", - "label": "Juegos de Mesa", - "dateTime": [ - "1/12/25 8:00 PM", - "8/12/25 8:00 PM", - "15/12/25 8:00 PM" - ], - "location": "Medellín, Antioquia", - "address": "Cl. 8 #43a-89, El Poblado" - }, - { - "link": "https://eventario.co/events/gringo-tuesdays-language-exchange-medellin/", - "title": "Gringo Tuesdays Language Exchange Medellín", - "venue": "GringoTuesdays", - "venueLink": "https://eventario.co/organizadores/gringotuesdays/", - "label": "Intercambio de idiomas", - "dateTime": [ - "2/12/25 4:00 PM", - "9/12/25 4:00 PM", - "16/12/25 4:00 PM", - "23/12/25 4:00 PM" - ], - "location": "Medellín, Antioquia", - "address": "Teatro Victoria, Carrera 35" - }, - { - "link": "https://eventario.co/events/free-weekly-language-exchange-keeptalking/", - "title": "Free Weekly Language Exchange by KeepTalking", - "venue": "Barrio Sur Cafe Bar", - "venueLink": "https://eventario.co/places/barrio-sur-cafe-bar/", - "label": "Intercambio de idiomas", - "dateTime": [ - "2/12/25 7:00 PM", - "9/12/25 7:00 PM", - "16/12/25 7:00 PM", - "23/12/25 7:00 PM" - ], - "location": "Envigado, Antioquia", - "address": "Calle 30 Sur 43a 23, 055422 Envigado" - }, - { - "link": "https://eventario.co/events/open-magic/", - "title": "Open Magic", - "venue": "GABO Envigado", - "venueLink": "https://eventario.co/places/gabo-envigado/", - "label": "Feria y Salon", - "dateTime": [ - "3/12/25 12:00 PM", - "10/12/25 12:00 PM", - "17/12/25 12:00 PM", - "24/12/25 12:00 PM" - ], - "location": "Medellín, Antioquia", - "address": "Restaurante Gabo.mde Envigado, Calle 30 Sur" - }, - { - "link": "https://eventario.co/events/free-language-exchance/", - "title": "Free Language Exchance", - "venue": "Merli Rooftop", - "venueLink": "https://eventario.co/places/merli-rooftop/", - "label": "Intercambio de idiomas", - "dateTime": [ - "3/12/25 6:00 PM", - "10/12/25 6:00 PM", - "17/12/25 6:00 PM", - "24/12/25 6:00 PM" - ], - "location": "Medellín, Antioquia", - "address": "Carrera 43c 8 29, 050022 Medellín" - }, - { - "link": "https://eventario.co/events/regalos-con-proposito/", - "title": "REGALOS CON PROPÓSITO", - "venue": "Bodega Comfama", - "venueLink": "https://eventario.co/places/bodega-comfama/", - "label": "Familia y Niños", - "dateTime": [ - "5/12/25 11:00 AM", - "6/12/25 11:00 AM", - "7/12/25 11:00 AM" - ], - "location": "Medellín, Antioquia", - "address": "Bodega Recreación Comfama, Calle 62" - }, - { - "link": "https://eventario.co/events/antonieta-y-la-navidad/", - "title": "Antonieta y La Navidad", - "venue": "Teatro Manicomio de Muñecos", - "venueLink": "https://eventario.co/places/teatro-manicomio-de-munecos/", - "label": "Familia y Niños", - "dateTime": [ - "5/12/25 8:00 PM", - "6/12/25 5:00 PM", - "7/12/25 11:00 AM", - "12/12/25 8:00 PM" - ], - "location": "Medellín, Antioquia", - "address": "Cl. 32EE #82a26, Laureles - Estadio" - }, - { - "link": "https://eventario.co/events/comparsa-navidena/", - "title": "Comparsa Navideña", - "venue": "Centro Comercial Puerta del Norte", - "venueLink": "https://eventario.co/places/centro-comercial-puerta-del-norte/", - "label": "Familia y Niños", - "dateTime": [ - "7/12/25 4:00 PM" - ], - "location": "Bello, Antioquia", - "address": "Diagonal 55 #34-67, Bello" - }, - { - "link": "https://eventario.co/events/bazar-navideno-2025/", - "title": "BAZAR NAVIDEÑO 2025", - "venue": "Centro Comercial Monterrey", - "venueLink": "https://eventario.co/places/centro-comercial-monterrey/", - "label": "Mercado Artesanal", - "dateTime": [ - "9/12/25 9:00 AM", - "10/12/25 9:00 AM", - "11/12/25 9:00 AM", - "12/12/25 9:00 AM" - ], - "location": "Medellín, Antioquia", - "address": "Cra. 48 #10-45, El Poblado" - }, - { - "link": "https://eventario.co/events/parlin-en-la-montana/", - "title": "Parlín en la montaña", - "venue": "Centro Comercial Sandiego", - "venueLink": "https://eventario.co/places/centro-comercial-sandiego/", - "label": "Familia y Niños", - "dateTime": [], - "location": "Medellín, Antioquia", - "address": "Calle 33 42b 06, 050016 Medellín" - }, - { - "link": "https://eventario.co/events/feria-de-oficios-recuperar-los-gestos-del-hacer/", - "title": "Feria de Oficios: Recuperar los Gestos del Hacer", - "venue": "Exploratorio", - "venueLink": "https://eventario.co/places/exploratorio/", - "label": "Feria y Salon", - "dateTime": [ - "13/12/25 10:00 AM" - ], - "location": "Medellín, Antioquia", - "address": "Cl. 73 #52-100 #52- a, Aranjuez" - }, - { - "link": "https://eventario.co/events/fiesta-de-cuadra-el-traido/", - "title": "Fiesta de Cuadra 'El Traído'", - "venue": "Centauro Centro de Eventos", - "venueLink": "https://eventario.co/places/centauro-centro-de-eventos/", - "label": "Fiesta de Ciudad", - "dateTime": [ - "13/12/25 4:00 PM" - ], - "location": "Envigado, Antioquia", - "address": "Calle 49 #37 sur 130, Zona 1" - }, - { - "link": "https://eventario.co/events/guaro-a-dos-manos/", - "title": "GUARO A DOS MANOS", - "venue": "Mamasita Medallo", - "venueLink": "https://eventario.co/places/mamasita-medallo/", - "label": "Fiesta de Ciudad", - "dateTime": [ - "13/12/25 8:00 PM" - ], - "location": "Antioquia", - "address": "Cra 43D #10 - 77, El Poblado" - }, - { - "link": "https://eventario.co/events/faltan-5-pa-las-12/", - "title": "FALTAN 5 PA' LAS 12", - "venue": "Centro Comercial Sandiego", - "venueLink": "https://eventario.co/places/centro-comercial-sandiego/", - "label": "Feria y Salon", - "dateTime": [], - "location": "Medellín, Antioquia", - "address": "Calle 33 42b 06, 050016 Medellín" - }, - { - "link": "https://eventario.co/events/para-no-olvidar-recap-noticias-2025/", - "title": "Para no olvidar recap noticias 2025", - "venue": "LA KORTE", - "venueLink": "https://eventario.co/places/la-korte-bar-de-comedia/", - "label": "Conferencias y Charlas", - "dateTime": [ - "19/12/25 9:00 PM" - ], - "location": "Medellín, Antioquia", - "address": "Circular 4 71-84, 050031 Medellín" - }, - { - "link": "https://eventario.co/events/happy-new-waves/", - "title": "Happy New Waves", - "venue": "La Deriva Rooftop", - "venueLink": "https://eventario.co/places/la-deriva-rooftop/", - "label": "Fiesta de Ciudad", - "dateTime": [ - "31/12/25 6:00 PM" - ], - "location": "Medellín, Antioquia", - "address": "Calle 10b 37-29, 050021 Medellín" - }, - { - "link": "https://eventario.co/events/san-silvestre-2025/", - "title": "San Silvestre 2025", - "venue": "Terraza Municipal", - "venueLink": "https://eventario.co/places/terraza-municipal/", - "label": "Fiesta de Ciudad", - "dateTime": [ - "31/12/25 7:00 PM" - ], - "location": "Cartagena, Bolivar", - "address": "Cl. 24, Getsemaní" - }, - { - "link": "https://eventario.co/events/the-rite-of-candles/", - "title": "THE RITE OF CANDLES", - "venue": "Sabine Bistró & Lounge", - "venueLink": "https://eventario.co/places/sabine-bistro-lounge/", - "label": "Fiesta de Ciudad", - "dateTime": [ - "31/12/25 7:30 PM" - ], - "location": "Cartagena, Bolivar", - "address": "Cra. 11 #39-21, San Diego" - }, - { - "link": "https://eventario.co/events/abonanza-naufrago/", - "title": "Abonanza - Náufrago", - "venue": "Náufrago Bar", - "venueLink": "https://eventario.co/places/naufrago-bar/", - "label": "Fiesta de Ciudad", - "dateTime": [ - "31/12/25 9:00 PM" - ], - "location": "Medellín, Antioquia", - "address": "Carrera 37 10a 29, 050021 Medellín" - }, - { - "link": "https://eventario.co/events/hello-2026-lets-shine/", - "title": "HELLO 2026 LET'S SHINE!", - "venue": "Townhouse Cartagena", - "venueLink": "https://eventario.co/places/townhouse-cartagena/", - "label": "Fiesta de Ciudad", - "dateTime": [ - "31/12/25 9:00 PM" - ], - "location": "San José De La Montaña, Antioquia", - "address": "Cra. 7 #36-88, San Diego" - }, - { - "link": "https://eventario.co/events/expofitness-lifestyle-2026/", - "title": "Expofitness Lifestyle 2026", - "venue": "Plaza mayor", - "venueLink": "https://eventario.co/places/plaza-mayor/", - "label": "Feria y Salon", - "dateTime": [], - "location": "Medellín, Antioquia", - "address": "Cra. 57 #41-81, La Candelaria" - }, - { - "link": "https://eventario.co/events/planeta-salvaje-v10/", - "title": "PLANETA SALVAJE V10", - "venue": "Locación Secreta 7", - "venueLink": "https://eventario.co/places/locacion-secreta-7/", - "label": "DJ Set / Clubbing", - "dateTime": [ - "29/11/25 3:00 PM" - ], - "location": "Medellín, Antioquia", - "address": "Carrera 36 55-62, 050013 Medellín" - }, - { - "link": "https://eventario.co/events/calentamiento-decembrino/", - "title": "Calentamiento decembrino", - "venue": "MAMM Museo de Arte Moderno de Medellín", - "venueLink": "https://eventario.co/places/museo-de-arte-moderno-de-medellin/", - "label": "Concierto", - "dateTime": [ - "29/11/25 4:00 PM" - ], - "location": "Medellín, Antioquia", - "address": "Museo de Arte Moderno Sede Ciudad del Río, Carrera 44 #19A-100" - }, - { - "link": "https://eventario.co/events/la-eterna-gozaderia/", - "title": "La Eterna Gozaderia", - "venue": "Club Unión Medellín", - "venueLink": "https://eventario.co/places/club-union-medellin/", - "label": "DJ Set / Clubbing", - "dateTime": [ - "29/11/25 7:00 PM" - ], - "location": "Medellín, Antioquia", - "address": "Carrera 43a 1-50, 050021 Medellín" - }, - { - "link": "https://eventario.co/events/afrodicto-2/", - "title": "AFRODICTO", - "venue": "Afrodisia", - "venueLink": "https://eventario.co/places/afrodisia/", - "label": "DJ Set / Clubbing", - "dateTime": [ - "29/11/25 8:00 PM" - ], - "location": "Medellín, Antioquia", - "address": "Carrera 37 8a-79, 050021 Medellín" - }, - { - "link": "https://eventario.co/events/m-i-t-a/", - "title": "M.I.T.A.", - "venue": "Sonorama", - "venueLink": "https://eventario.co/places/sonorama/", - "label": "DJ Set / Clubbing", - "dateTime": [ - "29/11/25 9:00 PM" - ], - "location": "Medellín, Antioquia", - "address": "Cra. 37 #10-37, El Poblado" - }, - { - "link": "https://eventario.co/events/tropikal-beat/", - "title": "TROPIKAL BEAT", - "venue": "Eminence", - "venueLink": "https://eventario.co/places/eminence/", - "label": "Concierto", - "dateTime": [ - "29/11/25 9:00 PM" - ], - "location": "Medellín, Antioquia", - "address": "Calle 25 43g-25, 050021 Medellín" - }, - { - "link": "https://eventario.co/events/10-anos-la-ciudad-maldita/", - "title": "10 AÑOS ANIVERSARIO LA CIUDAD MALDITA", - "venue": "El Callejón", - "venueLink": "https://eventario.co/places/el-callejon/", - "label": "Concierto", - "dateTime": [ - "6/12/25 8:00 PM" - ], - "location": "Envigado, Antioquia", - "address": "Cra. 42 #39 Sur-6, Zona 7" - }, - { - "link": "https://eventario.co/events/medallo-rumba-fest-2025/", - "title": "Medallo Rumba Fest 2025", - "venue": "Aeroparque Juan Pablo II", - "venueLink": "https://eventario.co/places/aeroparque-juan-pablo-ii/", - "label": "Festival", - "dateTime": [ - "29/11/25 9:00 AM" - ], - "location": "Medellín, Antioquia", - "address": "Aeroparque Juan Pablo II, Carrera 70" - }, - { - "link": "https://eventario.co/events/mas-mujeres-musicas-fest-2025/", - "title": "Más Mujeres Músicas Fest 2025", - "venue": "Museo Casa de la Memoria", - "venueLink": "https://eventario.co/places/museo-casa-de-la-memoria/", - "label": "Festival", - "dateTime": [ - "29/11/25 2:00 PM" - ], - "location": "n/a", - "address": [] - }, - { - "link": "https://eventario.co/events/made-in-medellin/", - "title": "Made In Medellín", - "venue": "Estadio Atanasio Girardot", - "venueLink": "https://eventario.co/places/estadio-atanasio-girardot/", - "label": "Concierto", - "dateTime": [ - "29/11/25 6:00 PM" - ], - "location": "Medellín, Antioquia", - "address": "Carrera 70 48-373, 050034 Medellín" - }, - { - "link": "https://eventario.co/events/predecembrina-rock-en-espanol/", - "title": "PreDecembrina & Rock en Español", - "venue": "Café Cliché", - "venueLink": "https://eventario.co/places/cafe-cliche/", - "label": "Concierto", - "dateTime": [ - "29/11/25 8:00 PM" - ], - "location": "Medellín, Antioquia", - "address": "Cra. 77 #39B 45, Laureles - Estadio" - }, - { - "link": "https://eventario.co/events/salsa-underground-vol-6/", - "title": "Salsa Underground Vol 6.", - "venue": "TIBIRI BAR", - "venueLink": "https://eventario.co/places/tibiri-bar/", - "label": "DJ Set / Clubbing", - "dateTime": [ - "29/11/25 9:00 PM" - ], - "location": "Medellín, Antioquia", - "address": "El Tíbiri, Avenida San Juan" - }, - { - "link": "https://eventario.co/events/noche-de-karaoke/", - "title": "Noche de Karaoke", - "venue": "Casa Cultural La Trilla", - "venueLink": "https://eventario.co/places/casa-cultural-la-trilla/", - "label": "Karaoké", - "dateTime": [ - "29/11/25 9:30 PM", - "6/12/25 9:30 PM", - "13/12/25 9:30 PM", - "20/12/25 9:30 PM" - ], - "location": "Medellín, Antioquia", - "address": "Calle 44a 73-60, 050031 Medellín" - }, - { - "link": "https://eventario.co/events/francis-mercier-soley/", - "title": "FRANCIS MERCIER- SOLÈY", - "venue": "Orquideorama", - "venueLink": "https://eventario.co/places/orquideorama/", - "label": "Festival", - "dateTime": [ - "30/11/25 11:00 AM" - ], - "location": "Medellín, Antioquia", - "address": "Cl. 41 #40A-26, Aranjuez" - }, - { - "link": "https://eventario.co/events/la-previa-de-la-alborada/", - "title": "LA PREVIA DE LA ALBORADA", - "venue": "OCCA", - "venueLink": "https://eventario.co/places/occa/", - "label": "Concierto", - "dateTime": [ - "30/11/25 3:00 PM" - ], - "location": "Medellín, Antioquia", - "address": "Calle 20 Sur 27-55, 050022 Medellín" - }, - { - "link": "https://eventario.co/events/domingos-de-los-60s-en-badalona-bar/", - "title": "Domingos de los 60's en Badalona Bar", - "venue": "Badalona Café Bar", - "venueLink": "https://eventario.co/places/badalona-cafe-bar/", - "label": "DJ Set / Clubbing", - "dateTime": [ - "30/11/25 4:00 PM", - "7/12/25 4:00 PM", - "14/12/25 4:00 PM", - "21/12/25 4:00 PM" - ], - "location": "Envigado, Antioquia", - "address": "Transversal 32a Sur 31d 19, 055422 Envigado" - }, - { - "link": "https://eventario.co/events/tardeo-chill-en-el-rooftop/", - "title": "¡Tardeo Chill en el rooftop!", - "venue": "Masaya Medellín", - "venueLink": "https://eventario.co/places/masaya-medellin/", - "label": "DJ Set / Clubbing", - "dateTime": [ - "30/11/25 4:00 PM", - "7/12/25 4:00 PM", - "14/12/25 4:00 PM", - "21/12/25 4:00 PM" - ], - "location": "Medellín, Antioquia", - "address": "Calle 8 43a-89, 050022 Medellín" - }, - { - "link": "https://eventario.co/events/franky-wah/", - "title": "Franky Wah", - "venue": "Orquideorama", - "venueLink": "https://eventario.co/places/orquideorama/", - "label": "DJ Set / Clubbing", - "dateTime": [ - "30/11/25 6:00 PM" - ], - "location": "Medellín, Antioquia", - "address": "Cl. 41 #40A-26, Aranjuez" - }, - { - "link": "https://eventario.co/events/karaoke-night-en-bololoi-masaya/", - "title": "Karaoké Night en Bololoi, Masaya!", - "venue": "Masaya Medellín", - "venueLink": "https://eventario.co/places/masaya-medellin/", - "label": "Karaoké", - "dateTime": [ - "30/11/25 8:00 PM", - "7/12/25 8:00 PM", - "14/12/25 8:00 PM", - "21/12/25 8:00 PM" - ], - "location": "Medellín, Antioquia", - "address": "Cl. 8 #43a-89, El Poblado" - }, - { - "link": "https://eventario.co/events/lunes-de-salsa/", - "title": "LUNES DE SALSA", - "venue": "la buyeson", - "venueLink": "https://eventario.co/organizadores/la-buyeson/", - "label": "DJ Set / Clubbing", - "dateTime": [ - "1/12/25 8:00 PM", - "8/12/25 8:00 PM", - "15/12/25 8:00 PM", - "22/12/25 8:00 PM" - ], - "location": "Medellín, Antioquia", - "address": "Socialtel Medellin, Carrera 32d" - }, - { - "link": "https://eventario.co/events/tardes-en%c2%b7cantadas/", - "title": "Tardes En·Cantadas", - "venue": "El Solar del Águila", - "venueLink": "https://eventario.co/places/el-solar-del-aguila/", - "label": "Concierto", - "dateTime": [ - "3/12/25 4:00 PM", - "10/12/25 4:00 PM", - "17/12/25 4:00 PM", - "24/12/25 4:00 PM" - ], - "location": "Medellín, Antioquia", - "address": "Calle 59 45d-1, 050012 Medellín" - }, - { - "link": "https://eventario.co/events/noche-de-karaoke-en-bolero-bar/", - "title": "Noche de Karaoke en Bolero Bar", - "venue": "Bolero Bar Medellin", - "venueLink": "https://eventario.co/places/bolero-bar-medellin/", - "label": "Karaoké", - "dateTime": [ - "3/12/25 8:00 PM", - "10/12/25 8:00 PM" - ], - "location": "Medellín, Antioquia", - "address": "Cra. 67B #51a-98, Laureles - Estadio" - }, - { - "link": "https://eventario.co/events/jueves-de-tbt-en-la-mecha/", - "title": "JUEVES DE TBT EN LA MECHA", - "venue": "LA MECHA TEJO", - "venueLink": "https://eventario.co/places/la-mecha-tejo/", - "label": "Karaoké", - "dateTime": [ - "4/12/25 12:00 PM", - "11/12/25 12:00 PM", - "18/12/25 12:00 PM", - "25/12/25 12:00 PM" - ], - "location": "Guarne, Antioquia", - "address": "Vía Guarne - Llano Grande, 054048 Rionegro" - }, - { - "link": "https://eventario.co/events/concierto-de-navidad/", - "title": "CONCIERTO DE NAVIDAD", - "venue": "Volver Siempre Volver", - "venueLink": "https://eventario.co/places/volver-siempre-volver/", - "label": "Concierto", - "dateTime": [ - "4/12/25 5:30 PM" - ], - "location": "Envigado, Antioquia", - "address": "Vía al aeropuerto, Av. Las Palmas" - }, - { - "link": "https://eventario.co/events/dj-set-y-vinilos/", - "title": "Dj Set y Vinilos", - "venue": "Víbora Sound System", - "venueLink": "https://eventario.co/places/vibora-sound-system/", - "label": "DJ Set / Clubbing", - "dateTime": [ - "29/11/25 6:00 PM", - "4/12/25 6:00 PM", - "5/12/25 6:00 PM", - "6/12/25 6:00 PM" - ], - "location": "Medellín, Antioquia", - "address": "Calle 10a 37-64, 050021 Medellín" - }, - { - "link": "https://eventario.co/events/rhythm-dough/", - "title": "Rhythm dough", - "venue": "Sandra Jaramillo", - "venueLink": "https://eventario.co/organizadores/sandra-jaramillo/", - "label": "DJ Set / Clubbing", - "dateTime": [ - "4/12/25 7:00 PM", - "11/12/25 7:00 PM", - "18/12/25 7:00 PM", - "25/12/25 7:00 PM" - ], - "location": "Medellín, Antioquia", - "address": "Rama Sound Garden, Carrera 48" - }, - { - "link": "https://eventario.co/events/cuentos-de-hilo-con-natalia-ramirez/", - "title": "Cuentos de hilo con Natalia Ramírez", - "venue": "VIVAPALABRA", - "venueLink": "https://eventario.co/places/vivapalabra/", - "label": "Cultura", - "dateTime": [ - "29/11/25 4:00 PM" - ], - "location": "Medellín, Antioquia", - "address": "Calle 55 #43-63, La Candelaria" - }, - { - "link": "https://eventario.co/events/la-gringada-de-sefora/", - "title": "La gringada de Séfora", - "venue": "VIVAPALABRA", - "venueLink": "https://eventario.co/places/vivapalabra/", - "label": "Cultura", - "dateTime": [ - "29/11/25 7:30 PM" - ], - "location": "Medellín, Antioquia", - "address": "Calle 55 #43-63, La Candelaria" - }, - { - "link": "https://eventario.co/events/social-de-salsa/", - "title": "SOCIAL DE SALSA", - "venue": "Posada León", - "venueLink": "https://eventario.co/places/posada-leon/", - "label": "Baile", - "dateTime": [ - "3/12/25 7:30 PM" - ], - "location": "Medellín, Antioquia", - "address": "Posada León, Carrera 35" - }, - { - "link": "https://eventario.co/events/el-show-de-rudolf-medellin-y-la-luz-del-corazon/", - "title": "EL SHOW DE RUDOLF, Medellín y la luz del corazón", - "venue": "Teatro el Tesoro", - "venueLink": "https://eventario.co/places/teatro-el-tesoro/", - "label": "Cultura", - "dateTime": [], - "location": "Medellín, Antioquia", - "address": "Teatro El Tesoro, Carrera 25a" - }, - { - "link": "https://eventario.co/events/raspa-las-4-fiestas/", - "title": "Raspa las 4 FIESTAS", - "venue": "La Chula Cartagena", - "venueLink": "https://eventario.co/places/la-chula-cartagena/", - "label": "Cultura", - "dateTime": [ - "29/11/25 9:00 AM" - ], - "location": "Cartagena, Bolivar", - "address": "Av. Escallon, Dg. 35 #34-63" - }, - { - "link": "https://eventario.co/events/tour-centro-de-francia-a-medellin/", - "title": "Tour Centro - De Francia a Medellín", - "venue": "Alianza Francesa Medellín", - "venueLink": "https://eventario.co/places/alianza-francesa-medellin/", - "label": "Cultura", - "dateTime": [ - "29/11/25 10:00 AM" - ], - "location": "n/a", - "address": "Edificio Porvenir, Av El Poblado" - }, - { - "link": "https://eventario.co/events/recorrido-comentado-mamm/", - "title": "Recorrido comentado con Mediadores MAMM", - "venue": "MAMM Museo de Arte Moderno de Medellín", - "venueLink": "https://eventario.co/places/museo-de-arte-moderno-de-medellin/", - "label": "Cultura", - "dateTime": [ - "29/11/25 3:00 PM", - "6/12/25 3:00 PM", - "13/12/25 3:00 PM", - "20/12/25 3:00 PM" - ], - "location": "Medellín, Antioquia", - "address": "Museo de Arte Moderno Sede Ciudad del Río, Carrera 44 #19A-100" - }, - { - "link": "https://eventario.co/events/la-comedy-surprise/", - "title": "La Comedy Surprise", - "venue": "LA KORTE", - "venueLink": "https://eventario.co/places/la-korte-bar-de-comedia/", - "label": "Comedia y Stand Up", - "dateTime": [ - "29/11/25 7:00 PM", - "6/12/25 7:00 PM", - "13/12/25 7:00 PM", - "20/12/25 7:00 PM" - ], - "location": "Medellín, Antioquia", - "address": "Cq. 4 #71-84, Laureles" - }, - { - "link": "https://eventario.co/events/la-masa-moya-con-leche-y-panela/", - "title": "LA MASA MOYA CON LECHE Y PANELA", - "venue": "Boom stand-up", - "venueLink": "https://eventario.co/places/boom-stand-up/", - "label": "Comedia y Stand Up", - "dateTime": [ - "29/11/25 9:00 PM" - ], - "location": "Medellín, Antioquia", - "address": "Cl. 26 #43g-30, El Poblado" - }, - { - "link": "https://eventario.co/events/ii-taller-de-fotografia-percepcion-visual/", - "title": "II Taller de Fotografía: Percepción Visual", - "venue": "Centro de Formacion de la Cooperacion Española", - "venueLink": "https://eventario.co/places/centro-de-formacion-de-la-cooperacion-espanola/", - "label": "Cultura", - "dateTime": [ - "30/11/25 9:00 AM" - ], - "location": "Cartagena, Bolivar", - "address": "Cl. 36 #2-74, El Centro" - }, - { - "link": "https://eventario.co/events/en-el-barrio/", - "title": "EN EL BARRIO", - "venue": "Centro Cultural Caribe", - "venueLink": "https://eventario.co/places/centro-cultural-caribe/", - "label": "Cultura", - "dateTime": [ - "30/11/25 2:00 PM" - ], - "location": "Itagui, Antioquia", - "address": "Cra. 50 #52-77, Villa Paula" - }, - { - "link": "https://eventario.co/events/navidad-en-espiral/", - "title": "Navidad en espiral", - "venue": "Teatro Metropolitano José Gutiérrez Gómez", - "venueLink": "https://eventario.co/places/teatro-metropolitano-jose-gutierrez-gomez/", - "label": "Cultura", - "dateTime": [ - "30/11/25 5:00 PM" - ], - "location": "Medellín, Antioquia", - "address": "Cl. 41 #57-30, La Candelaria" - }, - { - "link": "https://eventario.co/events/los-dioses-de-la-impro/", - "title": "Los Dioses de la impro", - "venue": "LA KORTE", - "venueLink": "https://eventario.co/places/la-korte-bar-de-comedia/", - "label": "Comedia y Stand Up", - "dateTime": [ - "30/11/25 7:00 PM", - "7/12/25 7:00 PM", - "14/12/25 7:00 PM", - "21/12/25 7:00 PM" - ], - "location": "Medellín, Antioquia", - "address": "Cq. 4 #71-84, Laureles" - }, - { - "link": "https://eventario.co/events/el-tribunal-de-los-necios/", - "title": "El tribunal de los necios", - "venue": "LA KORTE", - "venueLink": "https://eventario.co/places/la-korte-bar-de-comedia/", - "label": "Comedia y Stand Up", - "dateTime": [ - "30/11/25 7:00 PM", - "7/12/25 7:00 PM", - "14/12/25 7:00 PM", - "21/12/25 7:00 PM" - ], - "location": "Medellín, Antioquia", - "address": "Cq. 4 #71-84, Laureles" - }, - { - "link": "https://eventario.co/events/language-exchange%f0%9f%8c%8e%f0%9f%8c%bb/", - "title": "LANGUAGE EXCHANGE????????", - "venue": "Floras black coffee", - "venueLink": "https://eventario.co/places/floras-black-coffee/", - "label": "Cultura", - "dateTime": [ - "30/11/25 7:30 PM", - "1/12/25 7:30 PM", - "3/12/25 7:30 PM", - "7/12/25 7:30 PM" - ], - "location": "Antioquia", - "address": "Cra. 48 #7-282, El Poblado" - }, - { - "link": "https://eventario.co/events/lunes-noche-bachatera/", - "title": "Lunes Noche Bachatera", - "venue": "Blood Dance Company", - "venueLink": "https://eventario.co/places/blood-dance-company/", - "label": "Baile", - "dateTime": [ - "1/12/25 8:30 PM", - "8/12/25 8:30 PM", - "15/12/25 8:30 PM", - "22/12/25 8:30 PM" - ], - "location": "Medellín, Antioquia", - "address": "Carrera 81 36-44, 050031 Medellín" - }, - { - "link": "https://eventario.co/events/kriminales-open-mic/", - "title": "Kriminales Open Mic", - "venue": "LA KORTE", - "venueLink": "https://eventario.co/places/la-korte-bar-de-comedia/", - "label": "Comedia y Stand Up", - "dateTime": [ - "2/12/25 7:00 PM", - "9/12/25 7:00 PM", - "16/12/25 7:00 PM", - "23/12/25 7:00 PM" - ], - "location": "Medellín, Antioquia", - "address": "Cq. 4 #71-84, Laureles" - }, - { - "link": "https://eventario.co/events/colombian-music-night-2/", - "title": "COLOMBIAN MUSIC NIGHT", - "venue": "Milo Borja", - "venueLink": "https://eventario.co/organizadores/milo-borja/", - "label": "Baile", - "dateTime": [ - "2/12/25 8:00 PM", - "9/12/25 8:00 PM", - "16/12/25 8:00 PM", - "23/12/25 8:00 PM" - ], - "location": "Medellín, Antioquia", - "address": "La República Restaurante Bar, Calle 10" - }, - { - "link": "https://eventario.co/events/el-caballero-y-su-escudero-al-rescate-de-la-ortografia/", - "title": "El Caballero y su Escudero al rescate de la Ortografía", - "venue": "Auditorio Monseñor Nelson Sierra Pérez", - "venueLink": "https://eventario.co/places/auditorio-monsenor-nelson-sierra-perez/", - "label": "Cultura", - "dateTime": [ - "3/12/25 3:50 PM" - ], - "location": "Envigado, Antioquia", - "address": "Cl 38A Sur #45a-80, Zona 8" - }, - { - "link": "https://eventario.co/events/clases-de-porro/", - "title": "CLASES DE PORRO", - "venue": "Centro Comercial Terminal Sur", - "venueLink": "https://eventario.co/places/centro-comercial-terminal-sur/", - "label": "Baile", - "dateTime": [ - "3/12/25 6:30 PM", - "10/12/25 6:30 PM", - "17/12/25 6:30 PM", - "24/12/25 6:30 PM" - ], - "location": "Medellín, Antioquia", - "address": "Carrera 65 8b 91, 050024 Medellín" - }, - { - "link": "https://eventario.co/events/noches-de-impro/", - "title": "Noches de Impro", - "venue": "LA KORTE", - "venueLink": "https://eventario.co/places/la-korte-bar-de-comedia/", - "label": "Comedia y Stand Up", - "dateTime": [ - "3/12/25 7:00 PM", - "10/12/25 7:00 PM", - "17/12/25 7:00 PM", - "24/12/25 7:00 PM" - ], - "location": "Medellín, Antioquia", - "address": "Cq. 4 #71-84, Laureles" - }, - { - "link": "https://eventario.co/events/club-de-pintura-sensibilizacion-al-arte/", - "title": "Club de pintura - sensibilización al arte", - "venue": "Casa Cultural La Trilla", - "venueLink": "https://eventario.co/places/casa-cultural-la-trilla/", - "label": "Cultura", - "dateTime": [ - "3/12/25 7:00 PM", - "10/12/25 7:00 PM", - "17/12/25 7:00 PM", - "24/12/25 7:00 PM" - ], - "location": "Medellín, Antioquia", - "address": "Calle 44a 73-60, 050031 Medellín" - }, - { - "link": "https://eventario.co/events/miercoles-secretos/", - "title": "MIERCOLES SECRETOS", - "venue": "La Casa De Ruby", - "venueLink": "https://eventario.co/places/la-casa-de-ruby/", - "label": "Baile", - "dateTime": [ - "3/12/25 8:30 PM", - "10/12/25 8:30 PM", - "17/12/25 8:30 PM", - "24/12/25 8:30 PM" - ], - "location": "Medellín, Antioquia", - "address": "Calle 10 33-21, 050021 Medellín" - }, - { - "link": "https://eventario.co/events/toma-tu-tomate-2/", - "title": "Toma tu Tomate", - "venue": "LA KORTE", - "venueLink": "https://eventario.co/places/la-korte-bar-de-comedia/", - "label": "Comedia y Stand Up", - "dateTime": [ - "3/12/25 9:00 PM", - "10/12/25 9:00 PM", - "17/12/25 9:00 PM", - "24/12/25 9:00 PM" - ], - "location": "Medellín, Antioquia", - "address": "Cq. 4 #71-84, Laureles" - }, - { - "link": "https://eventario.co/events/actividad-de-pintura-y-vino-%f0%9f%8e%a8%f0%9f%96%8c%ef%b8%8f%f0%9f%8d%b7/", - "title": "Actividad De Pintura Y Vino ????????️????", - "venue": "Floras black coffee", - "venueLink": "https://eventario.co/places/floras-black-coffee/", - "label": "Cultura", - "dateTime": [ - "29/11/25 4:00 PM", - "2/12/25 4:00 PM", - "4/12/25 4:00 PM", - "6/12/25 4:00 PM" - ], - "location": "Medellín, Antioquia", - "address": "Flora's Black Coffee, Mall las vegas TERRAZA - ROOFTOP" - }, - { - "link": "https://eventario.co/events/a-tomarse-una-pola-con-los-parceros/", - "title": "A tomarse una Pola con los Parceros", - "venue": "La Cellar Club", - "venueLink": "https://eventario.co/places/la-cellar-club/", - "label": "Baile", - "dateTime": [ - "4/12/25 6:00 PM", - "11/12/25 6:00 PM", - "18/12/25 6:00 PM", - "25/12/25 6:00 PM" - ], - "location": "Medellín, Antioquia", - "address": "Calle 27 43f 79, 050021 Medellín" - }, - { - "link": "https://eventario.co/events/joyas-colombianas-dinner-show/", - "title": "Joyas Colombianas Dinner & Show", - "venue": "Restaurante Marmoleo", - "venueLink": "https://eventario.co/places/restaurante-marmoleo/", - "label": "Cultura", - "dateTime": [ - "4/12/25 7:00 PM", - "11/12/25 7:00 PM", - "18/12/25 7:00 PM", - "25/12/25 7:00 PM" - ], - "location": "Medellín, Antioquia", - "address": "Carrera 11 #9a Sur-180, Medellín" - }, - { - "link": "https://eventario.co/events/reinas-de-la-comedia/", - "title": "Reinas de la Comedia", - "venue": "LA KORTE", - "venueLink": "https://eventario.co/places/la-korte-bar-de-comedia/", - "label": "Comedia y Stand Up", - "dateTime": [ - "4/12/25 7:00 PM", - "11/12/25 7:00 PM", - "18/12/25 7:00 PM", - "25/12/25 7:00 PM" - ], - "location": "Medellín, Antioquia", - "address": "Cq. 4 #71-84, Laureles" - }, - { - "link": "https://eventario.co/events/el-parche-del-chicharron/", - "title": "EL PARCHE DEL CHICHARRON", - "venue": "Centauro Centro de Eventos", - "venueLink": "https://eventario.co/places/centauro-centro-de-eventos/", - "label": "Cultura", - "dateTime": [], - "location": "Envigado, Antioquia", - "address": "Calle 49 #37 sur 130, Zona 1" - }, - { - "link": "https://eventario.co/events/bestias-de-la-comedia-medellin/", - "title": "Bestias de la Comedia - Medellín", - "venue": "LA KORTE", - "venueLink": "https://eventario.co/places/la-korte-bar-de-comedia/", - "label": "Comedia y Stand Up", - "dateTime": [ - "5/12/25 7:00 PM", - "12/12/25 7:00 PM", - "19/12/25 7:00 PM", - "26/12/25 7:00 PM" - ], - "location": "Medellín, Antioquia", - "address": "Cq. 4 #71-84, Laureles" - }, - { - "link": "https://eventario.co/events/salsa-fever/", - "title": "SALSA FEVER", - "venue": "Blood Dance Company", - "venueLink": "https://eventario.co/places/blood-dance-company/", - "label": "Baile", - "dateTime": [ - "5/12/25 8:30 PM", - "12/12/25 8:30 PM", - "19/12/25 8:30 PM", - "26/12/25 8:30 PM" - ], - "location": "Medellín, Antioquia", - "address": "Carrera 81 36-44, 050031 Medellín" - }, - { - "link": "https://eventario.co/events/humor-etilico-drink-cast/", - "title": "Humor Etílico, Drink-Cast", - "venue": "LA KORTE", - "venueLink": "https://eventario.co/places/la-korte-bar-de-comedia/", - "label": "Comedia y Stand Up", - "dateTime": [ - "5/12/25 9:00 PM" - ], - "location": "Medellín, Antioquia", - "address": "Circular 4 71-84, 050031 Medellín" - }, - { - "link": "https://eventario.co/events/terapia-de-choque-medellin/", - "title": "Terapia de Choque - Medellín", - "venue": "LA KORTE", - "venueLink": "https://eventario.co/places/la-korte-bar-de-comedia/", - "label": "Comedia y Stand Up", - "dateTime": [ - "5/12/25 9:00 PM", - "12/12/25 9:00 PM", - "19/12/25 9:00 PM", - "26/12/25 9:00 PM" - ], - "location": "Medellín, Antioquia", - "address": "Cq. 4 #71-84, Laureles" - }, - { - "link": "https://eventario.co/events/un-show-de-medio-pelo/", - "title": "Un show de medio pelo", - "venue": "LA KORTE", - "venueLink": "https://eventario.co/places/la-korte-bar-de-comedia/", - "label": "Comedia y Stand Up", - "dateTime": [ - "12/12/25 9:00 PM" - ], - "location": "Medellín, Antioquia", - "address": "Circular 4 71-84, 050031 Medellín" - }, - { - "link": "https://eventario.co/events/feria-de-oficios/", - "title": "Feria de Oficios", - "venue": "Parque Explora", - "venueLink": "https://eventario.co/places/parque-explora/", - "label": "Cultura", - "dateTime": [ - "13/12/25 10:00 AM" - ], - "location": "Medellín, Antioquia", - "address": "Carrera 53 73 75, 050010 Medellín" - }, - { - "link": "https://eventario.co/events/todo-sobre-ruedas/", - "title": "Todo sobre ruedas", - "venue": "LA KORTE", - "venueLink": "https://eventario.co/places/la-korte-bar-de-comedia/", - "label": "Comedia y Stand Up", - "dateTime": [ - "13/12/25 9:00 PM" - ], - "location": "Medellín, Antioquia", - "address": "Circular 4 71-84, 050031 Medellín" - }, - { - "link": "https://eventario.co/events/free-comedy-fest-medallo/", - "title": "FREE COMEDY FEST MEDALLO", - "venue": "Teatro Universidad de Medellín", - "venueLink": "https://eventario.co/places/teatro-universidad-de-medellin/", - "label": "Comedia y Stand Up", - "dateTime": [ - "17/12/25 7:00 PM" - ], - "location": "Medellín, Antioquia", - "address": "Carrera 87 #30-65, Medellín" - }, - { - "link": "https://eventario.co/events/navidad-en-andres/", - "title": "Navidad en Andrés", - "venue": "Andrés Carne de Res Cartagena", - "venueLink": "https://eventario.co/places/andres-carne-de-res-cartagena/", - "label": "Cultura", - "dateTime": [ - "24/12/25 7:00 PM" - ], - "location": "Cartagena, Bolivar", - "address": "Carrera 11, Cl. de la Serrezuela #39 - 21" - }, - { - "link": "https://eventario.co/events/gran-cena-de-san-silvestre/", - "title": "Gran Cena de San Silvestre", - "venue": "Hotel Las Américas Cartagena", - "venueLink": "https://eventario.co/places/hotel-las-americas-cartagena/", - "label": "Cultura", - "dateTime": [ - "31/12/25 6:00 PM" - ], - "location": "Cartagena, Bolivar", - "address": "Anillo Vial, Sector" - }, - { - "link": "https://eventario.co/events/probando-probando-finura/", - "title": "Probando Probando Finura", - "venue": "Teatro el Tesoro", - "venueLink": "https://eventario.co/places/teatro-el-tesoro/", - "label": "Comedia y Stand Up", - "dateTime": [ - "7/02/26 7:00 PM" - ], - "location": "Medellín, Antioquia", - "address": "Cra. 25a #1A Sur - 45, El Poblado" - }, - { - "link": "https://eventario.co/events/medellin-street-art-festival/", - "title": "Medellín Street Art Festival", - "venue": "Medellín Street Art Festival", - "venueLink": "https://eventario.co/places/medellin-street-art-festival/", - "label": "Cultura", - "dateTime": [], - "location": "Medellín, Antioquia", - "address": "Street Art Colombia, Calle 10b" - }, - { - "link": "https://eventario.co/events/maridaje-sabor-y-fiesta-2025/", - "title": "MARIDAJE SABOR Y FIESTA 2025", - "venue": "Plaza mayor", - "venueLink": "https://eventario.co/places/plaza-mayor/", - "label": "Cultura", - "dateTime": [], - "location": "Medellín, Antioquia", - "address": "Cra. 57 #41-81, La Candelaria" - } -] \ No newline at end of file diff --git a/Working/venues/manual/data.updated.json b/Working/venues/manual/data.updated.json deleted file mode 100644 index f2904c6..0000000 --- a/Working/venues/manual/data.updated.json +++ /dev/null @@ -1,1471 +0,0 @@ -[ - { - "link": "https://eventario.co/events/faltan-5-pa-las-doce-2/", - "title": "FALTAN 5 PA´ LAS DOCE", - "venue": "LA MECHA TEJO", - "venueLink": "https://eventario.co/places/la-mecha-tejo/", - "label": "Fiesta de Ciudad", - "dateTime": [ - "29/11/25 2:00 PM" - ], - "location": "Llanogrande, Antioquia", - "address": "Vía Guarne - Llano Grande, 054048 Rionegro", - "category": "Mu", - "city": "Llanogrande" - }, - { - "link": "https://eventario.co/events/deja-el-miedo-a-hablar-en-publico/", - "title": "Deja el miedo a hablar en público", - "venue": "Indie Universe Hotel & Coliving", - "venueLink": "https://eventario.co/places/indie-universe-hotel-coliving/", - "label": "Conferencias y Charlas", - "dateTime": [ - "29/11/25 7:00 PM", - "13/12/25 9:00 AM", - "14/12/25 9:00 AM", - "15/12/25 9:00 AM" - ], - "location": "Medellín, Antioquia", - "address": "Av. Nutibara #71-25, Laureles - Estadio", - "category": "Ed", - "city": "Medellín" - }, - { - "link": "https://eventario.co/events/intercambio-de-idiomas-en-casa-almarita-%ef%b8%8f/", - "title": "Intercambio de Idiomas en Casa Almarita ️", - "venue": "Casa Almarita", - "venueLink": "https://eventario.co/places/casa-almarita/", - "label": "Intercambio de idiomas", - "dateTime": [ - "29/11/25 7:00 PM", - "6/12/25 7:00 PM", - "13/12/25 7:00 PM", - "20/12/25 7:00 PM" - ], - "location": "Medellín, Antioquia", - "address": "Calle 48b 79-39, 050034 Medellín", - "category": "Ed", - "city": "Medellín" - }, - { - "link": "https://eventario.co/events/alborada-tropical/", - "title": "Alborada Tropical", - "venue": "CANDELA Tropical Rooftop", - "venueLink": "https://eventario.co/places/candela-tropical-rooftop/", - "label": "Fiesta de Ciudad", - "dateTime": [ - "30/11/25 6:00 PM" - ], - "location": "Bello, Antioquia", - "address": "Cra. 52 #33-34, Obrero", - "category": "Mu", - "city": "Bello" - }, - { - "link": "https://eventario.co/events/alboreo-en-naufrago/", - "title": "ALBOREO en Náufrago", - "venue": "Náufrago Bar", - "venueLink": "https://eventario.co/places/naufrago-bar/", - "label": "Fiesta de Ciudad", - "dateTime": [ - "30/11/25 7:00 PM" - ], - "location": "Medellín, Antioquia", - "address": "Carrera 37 10a 29, 050021 Medellín", - "category": "Mu", - "city": "Medellín" - }, - { - "link": "https://eventario.co/events/alborada-2025/", - "title": "ALBORADA 2025", - "venue": "Hostal del Cielo Medellin", - "venueLink": "https://eventario.co/places/hostal-del-cielo-medellin/", - "label": "Fiesta de Ciudad", - "dateTime": [ - "30/11/25 7:00 PM" - ], - "location": "Medellín, Antioquia", - "address": "Cl. 55 #127-46, San Javier La Loma", - "category": "Mu", - "city": "Medellín" - }, - { - "link": "https://eventario.co/events/primer-aniversario/", - "title": "Primer Aniversario", - "venue": "Quereme", - "venueLink": "https://eventario.co/places/quereme/", - "label": "Fiesta de Ciudad", - "dateTime": [ - "30/11/25 8:00 PM" - ], - "location": "Antioquia", - "address": "Cra. 11 #9a-35, Medellin", - "category": "Mu", - "city": "Antioquia" - }, - { - "link": "https://eventario.co/events/fieston-de-alborada-en-coyo-taco/", - "title": "Fiestón de Alborada en Coyo Taco", - "venue": "Coyo Taco", - "venueLink": "https://eventario.co/places/coyo-taco/", - "label": "Fiesta de Ciudad", - "dateTime": [ - "30/11/25 10:00 PM" - ], - "location": "Medellín, Antioquia", - "address": "Carrera 35 8a-45, 050021 Medellín", - "category": "Mu", - "city": "Medellín" - }, - { - "link": "https://eventario.co/events/comunidades-de-bienestar-y-kids/", - "title": "Comunidades de Bienestar y Kids", - "venue": "Centro Comercial Los Molinos", - "venueLink": "https://eventario.co/places/centro-comercial-los-molinos/", - "label": "Familia y Niños", - "dateTime": [ - "1/12/25 9:00 AM", - "3/12/25 9:00 AM", - "8/12/25 9:00 AM", - "10/12/25 9:00 AM" - ], - "location": "Medellín, Antioquia", - "address": "Carrera 82 30a-46, 050026 Medellín", - "category": "Ot", - "city": "Medellín" - }, - { - "link": "https://eventario.co/events/de-que-vas-a-vivir-miamor-yo-no-quiero-trabajar/", - "title": "¿De qué vas a vivir miamor? - Yo no quiero trabajar", - "venue": "La Pascasia", - "venueLink": "https://eventario.co/places/la-pascasia/", - "label": "Conferencias y Charlas", - "dateTime": [ - "1/12/25 6:00 PM" - ], - "location": "Medellín, Antioquia", - "address": "Calle 47 43-88, 050016 Medellín", - "category": "Ed", - "city": "Medellín" - }, - { - "link": "https://eventario.co/events/noche-de-juegos-game-night/", - "title": "Noche de juegos", - "venue": "Masaya Medellín", - "venueLink": "https://eventario.co/places/masaya-medellin/", - "label": "Juegos de Mesa", - "dateTime": [ - "1/12/25 8:00 PM", - "8/12/25 8:00 PM", - "15/12/25 8:00 PM" - ], - "location": "Medellín, Antioquia", - "address": "Cl. 8 #43a-89, El Poblado", - "category": "Ot", - "city": "Medellín" - }, - { - "link": "https://eventario.co/events/gringo-tuesdays-language-exchange-medellin/", - "title": "Gringo Tuesdays Language Exchange Medellín", - "venue": "GringoTuesdays", - "venueLink": "https://eventario.co/organizadores/gringotuesdays/", - "label": "Intercambio de idiomas", - "dateTime": [ - "2/12/25 4:00 PM", - "9/12/25 4:00 PM", - "16/12/25 4:00 PM", - "23/12/25 4:00 PM" - ], - "location": "Medellín, Antioquia", - "address": "Teatro Victoria, Carrera 35", - "category": "Ed", - "city": "Medellín" - }, - { - "link": "https://eventario.co/events/free-weekly-language-exchange-keeptalking/", - "title": "Free Weekly Language Exchange by KeepTalking", - "venue": "Barrio Sur Cafe Bar", - "venueLink": "https://eventario.co/places/barrio-sur-cafe-bar/", - "label": "Intercambio de idiomas", - "dateTime": [ - "2/12/25 7:00 PM", - "9/12/25 7:00 PM", - "16/12/25 7:00 PM", - "23/12/25 7:00 PM" - ], - "location": "Envigado, Antioquia", - "address": "Calle 30 Sur 43a 23, 055422 Envigado", - "category": "Ed", - "city": "Envigado" - }, - { - "link": "https://eventario.co/events/open-magic/", - "title": "Open Magic", - "venue": "GABO Envigado", - "venueLink": "https://eventario.co/places/gabo-envigado/", - "label": "Feria y Salon", - "dateTime": [ - "3/12/25 12:00 PM", - "10/12/25 12:00 PM", - "17/12/25 12:00 PM", - "24/12/25 12:00 PM" - ], - "location": "Medellín, Antioquia", - "address": "Restaurante Gabo.mde Envigado, Calle 30 Sur", - "category": "Ot", - "city": "Medellín" - }, - { - "link": "https://eventario.co/events/free-language-exchance/", - "title": "Free Language Exchance", - "venue": "Merli Rooftop", - "venueLink": "https://eventario.co/places/merli-rooftop/", - "label": "Intercambio de idiomas", - "dateTime": [ - "3/12/25 6:00 PM", - "10/12/25 6:00 PM", - "17/12/25 6:00 PM", - "24/12/25 6:00 PM" - ], - "location": "Medellín, Antioquia", - "address": "Carrera 43c 8 29, 050022 Medellín", - "category": "Ed", - "city": "Medellín" - }, - { - "link": "https://eventario.co/events/regalos-con-proposito/", - "title": "REGALOS CON PROPÓSITO", - "venue": "Bodega Comfama", - "venueLink": "https://eventario.co/places/bodega-comfama/", - "label": "Familia y Niños", - "dateTime": [ - "5/12/25 11:00 AM", - "6/12/25 11:00 AM", - "7/12/25 11:00 AM" - ], - "location": "Medellín, Antioquia", - "address": "Bodega Recreación Comfama, Calle 62", - "category": "Ot", - "city": "Medellín" - }, - { - "link": "https://eventario.co/events/antonieta-y-la-navidad/", - "title": "Antonieta y La Navidad", - "venue": "Teatro Manicomio de Muñecos", - "venueLink": "https://eventario.co/places/teatro-manicomio-de-munecos/", - "label": "Familia y Niños", - "dateTime": [ - "5/12/25 8:00 PM", - "6/12/25 5:00 PM", - "7/12/25 11:00 AM", - "12/12/25 8:00 PM" - ], - "location": "Medellín, Antioquia", - "address": "Cl. 32EE #82a26, Laureles - Estadio", - "category": "Ot", - "city": "Medellín" - }, - { - "link": "https://eventario.co/events/comparsa-navidena/", - "title": "Comparsa Navideña", - "venue": "Centro Comercial Puerta del Norte", - "venueLink": "https://eventario.co/places/centro-comercial-puerta-del-norte/", - "label": "Familia y Niños", - "dateTime": [ - "7/12/25 4:00 PM" - ], - "location": "Bello, Antioquia", - "address": "Diagonal 55 #34-67, Bello", - "category": "Ot", - "city": "Bello" - }, - { - "link": "https://eventario.co/events/bazar-navideno-2025/", - "title": "BAZAR NAVIDEÑO 2025", - "venue": "Centro Comercial Monterrey", - "venueLink": "https://eventario.co/places/centro-comercial-monterrey/", - "label": "Mercado Artesanal", - "dateTime": [ - "9/12/25 9:00 AM", - "10/12/25 9:00 AM", - "11/12/25 9:00 AM", - "12/12/25 9:00 AM" - ], - "location": "Medellín, Antioquia", - "address": "Cra. 48 #10-45, El Poblado", - "category": "Mu", - "city": "Medellín" - }, - { - "link": "https://eventario.co/events/parlin-en-la-montana/", - "title": "Parlín en la montaña", - "venue": "Centro Comercial Sandiego", - "venueLink": "https://eventario.co/places/centro-comercial-sandiego/", - "label": "Familia y Niños", - "dateTime": [], - "location": "Medellín, Antioquia", - "address": "Calle 33 42b 06, 050016 Medellín" - }, - { - "link": "https://eventario.co/events/feria-de-oficios-recuperar-los-gestos-del-hacer/", - "title": "Feria de Oficios: Recuperar los Gestos del Hacer", - "venue": "Exploratorio", - "venueLink": "https://eventario.co/places/exploratorio/", - "label": "Feria y Salon", - "dateTime": [ - "13/12/25 10:00 AM" - ], - "location": "Medellín, Antioquia", - "address": "Cl. 73 #52-100 #52- a, Aranjuez", - "category": "Mu", - "city": "Medellín" - }, - { - "link": "https://eventario.co/events/fiesta-de-cuadra-el-traido/", - "title": "Fiesta de Cuadra 'El Traído'", - "venue": "Centauro Centro de Eventos", - "venueLink": "https://eventario.co/places/centauro-centro-de-eventos/", - "label": "Fiesta de Ciudad", - "dateTime": [ - "13/12/25 4:00 PM" - ], - "location": "Envigado, Antioquia", - "address": "Calle 49 #37 sur 130, Zona 1", - "category": "Mu", - "city": "Envigado" - }, - { - "link": "https://eventario.co/events/guaro-a-dos-manos/", - "title": "GUARO A DOS MANOS", - "venue": "Mamasita Medallo", - "venueLink": "https://eventario.co/places/mamasita-medallo/", - "label": "Fiesta de Ciudad", - "dateTime": [ - "13/12/25 8:00 PM" - ], - "location": "Antioquia", - "address": "Cra 43D #10 - 77, El Poblado", - "category": "Mu", - "city": "Antioquia" - }, - { - "link": "https://eventario.co/events/faltan-5-pa-las-12/", - "title": "FALTAN 5 PA' LAS 12", - "venue": "Centro Comercial Sandiego", - "venueLink": "https://eventario.co/places/centro-comercial-sandiego/", - "label": "Feria y Salon", - "dateTime": [], - "location": "Medellín, Antioquia", - "address": "Calle 33 42b 06, 050016 Medellín" - }, - { - "link": "https://eventario.co/events/para-no-olvidar-recap-noticias-2025/", - "title": "Para no olvidar recap noticias 2025", - "venue": "LA KORTE", - "venueLink": "https://eventario.co/places/la-korte-bar-de-comedia/", - "label": "Conferencias y Charlas", - "dateTime": [ - "19/12/25 9:00 PM" - ], - "location": "Medellín, Antioquia", - "address": "Circular 4 71-84, 050031 Medellín", - "category": "Ed", - "city": "Medellín" - }, - { - "link": "https://eventario.co/events/happy-new-waves/", - "title": "Happy New Waves", - "venue": "La Deriva Rooftop", - "venueLink": "https://eventario.co/places/la-deriva-rooftop/", - "label": "Fiesta de Ciudad", - "dateTime": [ - "31/12/25 6:00 PM" - ], - "location": "Medellín, Antioquia", - "address": "Calle 10b 37-29, 050021 Medellín", - "category": "Mu", - "city": "Medellín" - }, - { - "link": "https://eventario.co/events/san-silvestre-2025/", - "title": "San Silvestre 2025", - "venue": "Terraza Municipal", - "venueLink": "https://eventario.co/places/terraza-municipal/", - "label": "Fiesta de Ciudad", - "dateTime": [ - "31/12/25 7:00 PM" - ], - "location": "Cartagena, Bolivar", - "address": "Cl. 24, Getsemaní", - "category": "Mu" - }, - { - "link": "https://eventario.co/events/the-rite-of-candles/", - "title": "THE RITE OF CANDLES", - "venue": "Sabine Bistró & Lounge", - "venueLink": "https://eventario.co/places/sabine-bistro-lounge/", - "label": "Fiesta de Ciudad", - "dateTime": [ - "31/12/25 7:30 PM" - ], - "location": "Cartagena, Bolivar", - "address": "Cra. 11 #39-21, San Diego", - "category": "Mu" - }, - { - "link": "https://eventario.co/events/abonanza-naufrago/", - "title": "Abonanza - Náufrago", - "venue": "Náufrago Bar", - "venueLink": "https://eventario.co/places/naufrago-bar/", - "label": "Fiesta de Ciudad", - "dateTime": [ - "31/12/25 9:00 PM" - ], - "location": "Medellín, Antioquia", - "address": "Carrera 37 10a 29, 050021 Medellín", - "category": "Mu", - "city": "Medellín" - }, - { - "link": "https://eventario.co/events/hello-2026-lets-shine/", - "title": "HELLO 2026 LET'S SHINE!", - "venue": "Townhouse Cartagena", - "venueLink": "https://eventario.co/places/townhouse-cartagena/", - "label": "Fiesta de Ciudad", - "dateTime": [ - "31/12/25 9:00 PM" - ], - "location": "San José De La Montaña, Antioquia", - "address": "Cra. 7 #36-88, San Diego", - "category": "Mu", - "city": "San José De La Montaña" - }, - { - "link": "https://eventario.co/events/expofitness-lifestyle-2026/", - "title": "Expofitness Lifestyle 2026", - "venue": "Plaza mayor", - "venueLink": "https://eventario.co/places/plaza-mayor/", - "label": "Feria y Salon", - "dateTime": [], - "location": "Medellín, Antioquia", - "address": "Cra. 57 #41-81, La Candelaria" - }, - { - "link": "https://eventario.co/events/planeta-salvaje-v10/", - "title": "PLANETA SALVAJE V10", - "venue": "Locación Secreta 7", - "venueLink": "https://eventario.co/places/locacion-secreta-7/", - "label": "DJ Set / Clubbing", - "dateTime": [ - "29/11/25 3:00 PM" - ], - "location": "Medellín, Antioquia", - "address": "Carrera 36 55-62, 050013 Medellín", - "category": "Mu", - "city": "Medellín" - }, - { - "link": "https://eventario.co/events/calentamiento-decembrino/", - "title": "Calentamiento decembrino", - "venue": "MAMM Museo de Arte Moderno de Medellín", - "venueLink": "https://eventario.co/places/museo-de-arte-moderno-de-medellin/", - "label": "Concierto", - "dateTime": [ - "29/11/25 4:00 PM" - ], - "location": "Medellín, Antioquia", - "address": "Museo de Arte Moderno Sede Ciudad del Río, Carrera 44 #19A-100", - "category": "Mu", - "city": "Medellín" - }, - { - "link": "https://eventario.co/events/la-eterna-gozaderia/", - "title": "La Eterna Gozaderia", - "venue": "Club Unión Medellín", - "venueLink": "https://eventario.co/places/club-union-medellin/", - "label": "DJ Set / Clubbing", - "dateTime": [ - "29/11/25 7:00 PM" - ], - "location": "Medellín, Antioquia", - "address": "Carrera 43a 1-50, 050021 Medellín", - "category": "Mu", - "city": "Medellín" - }, - { - "link": "https://eventario.co/events/afrodicto-2/", - "title": "AFRODICTO", - "venue": "Afrodisia", - "venueLink": "https://eventario.co/places/afrodisia/", - "label": "DJ Set / Clubbing", - "dateTime": [ - "29/11/25 8:00 PM" - ], - "location": "Medellín, Antioquia", - "address": "Carrera 37 8a-79, 050021 Medellín", - "category": "Mu", - "city": "Medellín" - }, - { - "link": "https://eventario.co/events/m-i-t-a/", - "title": "M.I.T.A.", - "venue": "Sonorama", - "venueLink": "https://eventario.co/places/sonorama/", - "label": "DJ Set / Clubbing", - "dateTime": [ - "29/11/25 9:00 PM" - ], - "location": "Medellín, Antioquia", - "address": "Cra. 37 #10-37, El Poblado", - "category": "Mu", - "city": "Medellín" - }, - { - "link": "https://eventario.co/events/tropikal-beat/", - "title": "TROPIKAL BEAT", - "venue": "Eminence", - "venueLink": "https://eventario.co/places/eminence/", - "label": "Concierto", - "dateTime": [ - "29/11/25 9:00 PM" - ], - "location": "Medellín, Antioquia", - "address": "Calle 25 43g-25, 050021 Medellín", - "category": "Mu", - "city": "Medellín" - }, - { - "link": "https://eventario.co/events/10-anos-la-ciudad-maldita/", - "title": "10 AÑOS ANIVERSARIO LA CIUDAD MALDITA", - "venue": "El Callejón", - "venueLink": "https://eventario.co/places/el-callejon/", - "label": "Concierto", - "dateTime": [ - "6/12/25 8:00 PM" - ], - "location": "Envigado, Antioquia", - "address": "Cra. 42 #39 Sur-6, Zona 7", - "category": "Mu", - "city": "Envigado" - }, - { - "link": "https://eventario.co/events/medallo-rumba-fest-2025/", - "title": "Medallo Rumba Fest 2025", - "venue": "Aeroparque Juan Pablo II", - "venueLink": "https://eventario.co/places/aeroparque-juan-pablo-ii/", - "label": "Festival", - "dateTime": [ - "29/11/25 9:00 AM" - ], - "location": "Medellín, Antioquia", - "address": "Aeroparque Juan Pablo II, Carrera 70", - "category": "Mu", - "city": "Medellín" - }, - { - "link": "https://eventario.co/events/mas-mujeres-musicas-fest-2025/", - "title": "Más Mujeres Músicas Fest 2025", - "venue": "Museo Casa de la Memoria", - "venueLink": "https://eventario.co/places/museo-casa-de-la-memoria/", - "label": "Festival", - "dateTime": [ - "29/11/25 2:00 PM" - ], - "location": "n/a", - "address": [], - "category": "Mu" - }, - { - "link": "https://eventario.co/events/made-in-medellin/", - "title": "Made In Medellín", - "venue": "Estadio Atanasio Girardot", - "venueLink": "https://eventario.co/places/estadio-atanasio-girardot/", - "label": "Concierto", - "dateTime": [ - "29/11/25 6:00 PM" - ], - "location": "Medellín, Antioquia", - "address": "Carrera 70 48-373, 050034 Medellín", - "category": "Mu", - "city": "Medellín" - }, - { - "link": "https://eventario.co/events/predecembrina-rock-en-espanol/", - "title": "PreDecembrina & Rock en Español", - "venue": "Café Cliché", - "venueLink": "https://eventario.co/places/cafe-cliche/", - "label": "Concierto", - "dateTime": [ - "29/11/25 8:00 PM" - ], - "location": "Medellín, Antioquia", - "address": "Cra. 77 #39B 45, Laureles - Estadio", - "category": "Mu", - "city": "Medellín" - }, - { - "link": "https://eventario.co/events/salsa-underground-vol-6/", - "title": "Salsa Underground Vol 6.", - "venue": "TIBIRI BAR", - "venueLink": "https://eventario.co/places/tibiri-bar/", - "label": "DJ Set / Clubbing", - "dateTime": [ - "29/11/25 9:00 PM" - ], - "location": "Medellín, Antioquia", - "address": "El Tíbiri, Avenida San Juan", - "category": "Mu", - "city": "Medellín" - }, - { - "link": "https://eventario.co/events/noche-de-karaoke/", - "title": "Noche de Karaoke", - "venue": "Casa Cultural La Trilla", - "venueLink": "https://eventario.co/places/casa-cultural-la-trilla/", - "label": "Karaoké", - "dateTime": [ - "29/11/25 9:30 PM", - "6/12/25 9:30 PM", - "13/12/25 9:30 PM", - "20/12/25 9:30 PM" - ], - "location": "Medellín, Antioquia", - "address": "Calle 44a 73-60, 050031 Medellín", - "category": "Mu", - "city": "Medellín" - }, - { - "link": "https://eventario.co/events/francis-mercier-soley/", - "title": "FRANCIS MERCIER- SOLÈY", - "venue": "Orquideorama", - "venueLink": "https://eventario.co/places/orquideorama/", - "label": "Festival", - "dateTime": [ - "30/11/25 11:00 AM" - ], - "location": "Medellín, Antioquia", - "address": "Cl. 41 #40A-26, Aranjuez", - "category": "Mu", - "city": "Medellín" - }, - { - "link": "https://eventario.co/events/la-previa-de-la-alborada/", - "title": "LA PREVIA DE LA ALBORADA", - "venue": "OCCA", - "venueLink": "https://eventario.co/places/occa/", - "label": "Concierto", - "dateTime": [ - "30/11/25 3:00 PM" - ], - "location": "Medellín, Antioquia", - "address": "Calle 20 Sur 27-55, 050022 Medellín", - "category": "Mu", - "city": "Medellín" - }, - { - "link": "https://eventario.co/events/domingos-de-los-60s-en-badalona-bar/", - "title": "Domingos de los 60's en Badalona Bar", - "venue": "Badalona Café Bar", - "venueLink": "https://eventario.co/places/badalona-cafe-bar/", - "label": "DJ Set / Clubbing", - "dateTime": [ - "30/11/25 4:00 PM", - "7/12/25 4:00 PM", - "14/12/25 4:00 PM", - "21/12/25 4:00 PM" - ], - "location": "Envigado, Antioquia", - "address": "Transversal 32a Sur 31d 19, 055422 Envigado", - "category": "Mu", - "city": "Envigado" - }, - { - "link": "https://eventario.co/events/tardeo-chill-en-el-rooftop/", - "title": "¡Tardeo Chill en el rooftop!", - "venue": "Masaya Medellín", - "venueLink": "https://eventario.co/places/masaya-medellin/", - "label": "DJ Set / Clubbing", - "dateTime": [ - "30/11/25 4:00 PM", - "7/12/25 4:00 PM", - "14/12/25 4:00 PM", - "21/12/25 4:00 PM" - ], - "location": "Medellín, Antioquia", - "address": "Calle 8 43a-89, 050022 Medellín", - "category": "Mu", - "city": "Medellín" - }, - { - "link": "https://eventario.co/events/franky-wah/", - "title": "Franky Wah", - "venue": "Orquideorama", - "venueLink": "https://eventario.co/places/orquideorama/", - "label": "DJ Set / Clubbing", - "dateTime": [ - "30/11/25 6:00 PM" - ], - "location": "Medellín, Antioquia", - "address": "Cl. 41 #40A-26, Aranjuez", - "category": "Mu", - "city": "Medellín" - }, - { - "link": "https://eventario.co/events/karaoke-night-en-bololoi-masaya/", - "title": "Karaoké Night en Bololoi, Masaya!", - "venue": "Masaya Medellín", - "venueLink": "https://eventario.co/places/masaya-medellin/", - "label": "Karaoké", - "dateTime": [ - "30/11/25 8:00 PM", - "7/12/25 8:00 PM", - "14/12/25 8:00 PM", - "21/12/25 8:00 PM" - ], - "location": "Medellín, Antioquia", - "address": "Cl. 8 #43a-89, El Poblado", - "category": "Mu", - "city": "Medellín" - }, - { - "link": "https://eventario.co/events/lunes-de-salsa/", - "title": "LUNES DE SALSA", - "venue": "la buyeson", - "venueLink": "https://eventario.co/organizadores/la-buyeson/", - "label": "DJ Set / Clubbing", - "dateTime": [ - "1/12/25 8:00 PM", - "8/12/25 8:00 PM", - "15/12/25 8:00 PM", - "22/12/25 8:00 PM" - ], - "location": "Medellín, Antioquia", - "address": "Socialtel Medellin, Carrera 32d", - "category": "Mu", - "city": "Medellín" - }, - { - "link": "https://eventario.co/events/tardes-en%c2%b7cantadas/", - "title": "Tardes En·Cantadas", - "venue": "El Solar del Águila", - "venueLink": "https://eventario.co/places/el-solar-del-aguila/", - "label": "Concierto", - "dateTime": [ - "3/12/25 4:00 PM", - "10/12/25 4:00 PM", - "17/12/25 4:00 PM", - "24/12/25 4:00 PM" - ], - "location": "Medellín, Antioquia", - "address": "Calle 59 45d-1, 050012 Medellín", - "category": "Mu", - "city": "Medellín" - }, - { - "link": "https://eventario.co/events/noche-de-karaoke-en-bolero-bar/", - "title": "Noche de Karaoke en Bolero Bar", - "venue": "Bolero Bar Medellin", - "venueLink": "https://eventario.co/places/bolero-bar-medellin/", - "label": "Karaoké", - "dateTime": [ - "3/12/25 8:00 PM", - "10/12/25 8:00 PM" - ], - "location": "Medellín, Antioquia", - "address": "Cra. 67B #51a-98, Laureles - Estadio", - "category": "Mu", - "city": "Medellín" - }, - { - "link": "https://eventario.co/events/jueves-de-tbt-en-la-mecha/", - "title": "JUEVES DE TBT EN LA MECHA", - "venue": "LA MECHA TEJO", - "venueLink": "https://eventario.co/places/la-mecha-tejo/", - "label": "Karaoké", - "dateTime": [ - "4/12/25 12:00 PM", - "11/12/25 12:00 PM", - "18/12/25 12:00 PM", - "25/12/25 12:00 PM" - ], - "location": "Guarne, Antioquia", - "address": "Vía Guarne - Llano Grande, 054048 Rionegro", - "category": "Mu", - "city": "Guarne" - }, - { - "link": "https://eventario.co/events/concierto-de-navidad/", - "title": "CONCIERTO DE NAVIDAD", - "venue": "Volver Siempre Volver", - "venueLink": "https://eventario.co/places/volver-siempre-volver/", - "label": "Concierto", - "dateTime": [ - "4/12/25 5:30 PM" - ], - "location": "Envigado, Antioquia", - "address": "Vía al aeropuerto, Av. Las Palmas", - "category": "Mu", - "city": "Envigado" - }, - { - "link": "https://eventario.co/events/dj-set-y-vinilos/", - "title": "Dj Set y Vinilos", - "venue": "Víbora Sound System", - "venueLink": "https://eventario.co/places/vibora-sound-system/", - "label": "DJ Set / Clubbing", - "dateTime": [ - "29/11/25 6:00 PM", - "4/12/25 6:00 PM", - "5/12/25 6:00 PM", - "6/12/25 6:00 PM" - ], - "location": "Medellín, Antioquia", - "address": "Calle 10a 37-64, 050021 Medellín", - "category": "Mu", - "city": "Medellín" - }, - { - "link": "https://eventario.co/events/rhythm-dough/", - "title": "Rhythm dough", - "venue": "Sandra Jaramillo", - "venueLink": "https://eventario.co/organizadores/sandra-jaramillo/", - "label": "DJ Set / Clubbing", - "dateTime": [ - "4/12/25 7:00 PM", - "11/12/25 7:00 PM", - "18/12/25 7:00 PM", - "25/12/25 7:00 PM" - ], - "location": "Medellín, Antioquia", - "address": "Rama Sound Garden, Carrera 48", - "category": "Mu", - "city": "Medellín" - }, - { - "link": "https://eventario.co/events/cuentos-de-hilo-con-natalia-ramirez/", - "title": "Cuentos de hilo con Natalia Ramírez", - "venue": "VIVAPALABRA", - "venueLink": "https://eventario.co/places/vivapalabra/", - "label": "Cultura", - "dateTime": [ - "29/11/25 4:00 PM" - ], - "location": "Medellín, Antioquia", - "address": "Calle 55 #43-63, La Candelaria", - "category": "Mu", - "city": "Medellín" - }, - { - "link": "https://eventario.co/events/la-gringada-de-sefora/", - "title": "La gringada de Séfora", - "venue": "VIVAPALABRA", - "venueLink": "https://eventario.co/places/vivapalabra/", - "label": "Cultura", - "dateTime": [ - "29/11/25 7:30 PM" - ], - "location": "Medellín, Antioquia", - "address": "Calle 55 #43-63, La Candelaria", - "category": "Mu", - "city": "Medellín" - }, - { - "link": "https://eventario.co/events/social-de-salsa/", - "title": "SOCIAL DE SALSA", - "venue": "Posada León", - "venueLink": "https://eventario.co/places/posada-leon/", - "label": "Baile", - "dateTime": [ - "3/12/25 7:30 PM" - ], - "location": "Medellín, Antioquia", - "address": "Posada León, Carrera 35", - "category": "Mu", - "city": "Medellín" - }, - { - "link": "https://eventario.co/events/el-show-de-rudolf-medellin-y-la-luz-del-corazon/", - "title": "EL SHOW DE RUDOLF, Medellín y la luz del corazón", - "venue": "Teatro el Tesoro", - "venueLink": "https://eventario.co/places/teatro-el-tesoro/", - "label": "Cultura", - "dateTime": [], - "location": "Medellín, Antioquia", - "address": "Teatro El Tesoro, Carrera 25a" - }, - { - "link": "https://eventario.co/events/raspa-las-4-fiestas/", - "title": "Raspa las 4 FIESTAS", - "venue": "La Chula Cartagena", - "venueLink": "https://eventario.co/places/la-chula-cartagena/", - "label": "Cultura", - "dateTime": [ - "29/11/25 9:00 AM" - ], - "location": "Cartagena, Bolivar", - "address": "Av. Escallon, Dg. 35 #34-63", - "category": "Mu" - }, - { - "link": "https://eventario.co/events/tour-centro-de-francia-a-medellin/", - "title": "Tour Centro - De Francia a Medellín", - "venue": "Alianza Francesa Medellín", - "venueLink": "https://eventario.co/places/alianza-francesa-medellin/", - "label": "Cultura", - "dateTime": [ - "29/11/25 10:00 AM" - ], - "location": "n/a", - "address": "Edificio Porvenir, Av El Poblado", - "category": "Mu" - }, - { - "link": "https://eventario.co/events/recorrido-comentado-mamm/", - "title": "Recorrido comentado con Mediadores MAMM", - "venue": "MAMM Museo de Arte Moderno de Medellín", - "venueLink": "https://eventario.co/places/museo-de-arte-moderno-de-medellin/", - "label": "Cultura", - "dateTime": [ - "29/11/25 3:00 PM", - "6/12/25 3:00 PM", - "13/12/25 3:00 PM", - "20/12/25 3:00 PM" - ], - "location": "Medellín, Antioquia", - "address": "Museo de Arte Moderno Sede Ciudad del Río, Carrera 44 #19A-100", - "category": "Mu", - "city": "Medellín" - }, - { - "link": "https://eventario.co/events/la-comedy-surprise/", - "title": "La Comedy Surprise", - "venue": "LA KORTE", - "venueLink": "https://eventario.co/places/la-korte-bar-de-comedia/", - "label": "Comedia y Stand Up", - "dateTime": [ - "29/11/25 7:00 PM", - "6/12/25 7:00 PM", - "13/12/25 7:00 PM", - "20/12/25 7:00 PM" - ], - "location": "Medellín, Antioquia", - "address": "Cq. 4 #71-84, Laureles", - "category": "Co", - "city": "Medellín" - }, - { - "link": "https://eventario.co/events/la-masa-moya-con-leche-y-panela/", - "title": "LA MASA MOYA CON LECHE Y PANELA", - "venue": "Boom stand-up", - "venueLink": "https://eventario.co/places/boom-stand-up/", - "label": "Comedia y Stand Up", - "dateTime": [ - "29/11/25 9:00 PM" - ], - "location": "Medellín, Antioquia", - "address": "Cl. 26 #43g-30, El Poblado", - "category": "Co", - "city": "Medellín" - }, - { - "link": "https://eventario.co/events/ii-taller-de-fotografia-percepcion-visual/", - "title": "II Taller de Fotografía: Percepción Visual", - "venue": "Centro de Formacion de la Cooperacion Española", - "venueLink": "https://eventario.co/places/centro-de-formacion-de-la-cooperacion-espanola/", - "label": "Cultura", - "dateTime": [ - "30/11/25 9:00 AM" - ], - "location": "Cartagena, Bolivar", - "address": "Cl. 36 #2-74, El Centro", - "category": "Mu" - }, - { - "link": "https://eventario.co/events/en-el-barrio/", - "title": "EN EL BARRIO", - "venue": "Centro Cultural Caribe", - "venueLink": "https://eventario.co/places/centro-cultural-caribe/", - "label": "Cultura", - "dateTime": [ - "30/11/25 2:00 PM" - ], - "location": "Itagui, Antioquia", - "address": "Cra. 50 #52-77, Villa Paula", - "category": "Mu", - "city": "Itagui" - }, - { - "link": "https://eventario.co/events/navidad-en-espiral/", - "title": "Navidad en espiral", - "venue": "Teatro Metropolitano José Gutiérrez Gómez", - "venueLink": "https://eventario.co/places/teatro-metropolitano-jose-gutierrez-gomez/", - "label": "Cultura", - "dateTime": [ - "30/11/25 5:00 PM" - ], - "location": "Medellín, Antioquia", - "address": "Cl. 41 #57-30, La Candelaria", - "category": "Mu", - "city": "Medellín" - }, - { - "link": "https://eventario.co/events/los-dioses-de-la-impro/", - "title": "Los Dioses de la impro", - "venue": "LA KORTE", - "venueLink": "https://eventario.co/places/la-korte-bar-de-comedia/", - "label": "Comedia y Stand Up", - "dateTime": [ - "30/11/25 7:00 PM", - "7/12/25 7:00 PM", - "14/12/25 7:00 PM", - "21/12/25 7:00 PM" - ], - "location": "Medellín, Antioquia", - "address": "Cq. 4 #71-84, Laureles", - "category": "Co", - "city": "Medellín" - }, - { - "link": "https://eventario.co/events/el-tribunal-de-los-necios/", - "title": "El tribunal de los necios", - "venue": "LA KORTE", - "venueLink": "https://eventario.co/places/la-korte-bar-de-comedia/", - "label": "Comedia y Stand Up", - "dateTime": [ - "30/11/25 7:00 PM", - "7/12/25 7:00 PM", - "14/12/25 7:00 PM", - "21/12/25 7:00 PM" - ], - "location": "Medellín, Antioquia", - "address": "Cq. 4 #71-84, Laureles", - "category": "Co", - "city": "Medellín" - }, - { - "link": "https://eventario.co/events/language-exchange%f0%9f%8c%8e%f0%9f%8c%bb/", - "title": "LANGUAGE EXCHANGE????????", - "venue": "Floras black coffee", - "venueLink": "https://eventario.co/places/floras-black-coffee/", - "label": "Cultura", - "dateTime": [ - "30/11/25 7:30 PM", - "1/12/25 7:30 PM", - "3/12/25 7:30 PM", - "7/12/25 7:30 PM" - ], - "location": "Antioquia", - "address": "Cra. 48 #7-282, El Poblado", - "category": "Mu", - "city": "Antioquia" - }, - { - "link": "https://eventario.co/events/lunes-noche-bachatera/", - "title": "Lunes Noche Bachatera", - "venue": "Blood Dance Company", - "venueLink": "https://eventario.co/places/blood-dance-company/", - "label": "Baile", - "dateTime": [ - "1/12/25 8:30 PM", - "8/12/25 8:30 PM", - "15/12/25 8:30 PM", - "22/12/25 8:30 PM" - ], - "location": "Medellín, Antioquia", - "address": "Carrera 81 36-44, 050031 Medellín", - "category": "Mu", - "city": "Medellín" - }, - { - "link": "https://eventario.co/events/kriminales-open-mic/", - "title": "Kriminales Open Mic", - "venue": "LA KORTE", - "venueLink": "https://eventario.co/places/la-korte-bar-de-comedia/", - "label": "Comedia y Stand Up", - "dateTime": [ - "2/12/25 7:00 PM", - "9/12/25 7:00 PM", - "16/12/25 7:00 PM", - "23/12/25 7:00 PM" - ], - "location": "Medellín, Antioquia", - "address": "Cq. 4 #71-84, Laureles", - "category": "Co", - "city": "Medellín" - }, - { - "link": "https://eventario.co/events/colombian-music-night-2/", - "title": "COLOMBIAN MUSIC NIGHT", - "venue": "Milo Borja", - "venueLink": "https://eventario.co/organizadores/milo-borja/", - "label": "Baile", - "dateTime": [ - "2/12/25 8:00 PM", - "9/12/25 8:00 PM", - "16/12/25 8:00 PM", - "23/12/25 8:00 PM" - ], - "location": "Medellín, Antioquia", - "address": "La República Restaurante Bar, Calle 10", - "category": "Mu", - "city": "Medellín" - }, - { - "link": "https://eventario.co/events/el-caballero-y-su-escudero-al-rescate-de-la-ortografia/", - "title": "El Caballero y su Escudero al rescate de la Ortografía", - "venue": "Auditorio Monseñor Nelson Sierra Pérez", - "venueLink": "https://eventario.co/places/auditorio-monsenor-nelson-sierra-perez/", - "label": "Cultura", - "dateTime": [ - "3/12/25 3:50 PM" - ], - "location": "Envigado, Antioquia", - "address": "Cl 38A Sur #45a-80, Zona 8", - "category": "Mu", - "city": "Envigado" - }, - { - "link": "https://eventario.co/events/clases-de-porro/", - "title": "CLASES DE PORRO", - "venue": "Centro Comercial Terminal Sur", - "venueLink": "https://eventario.co/places/centro-comercial-terminal-sur/", - "label": "Baile", - "dateTime": [ - "3/12/25 6:30 PM", - "10/12/25 6:30 PM", - "17/12/25 6:30 PM", - "24/12/25 6:30 PM" - ], - "location": "Medellín, Antioquia", - "address": "Carrera 65 8b 91, 050024 Medellín", - "category": "Mu", - "city": "Medellín" - }, - { - "link": "https://eventario.co/events/noches-de-impro/", - "title": "Noches de Impro", - "venue": "LA KORTE", - "venueLink": "https://eventario.co/places/la-korte-bar-de-comedia/", - "label": "Comedia y Stand Up", - "dateTime": [ - "3/12/25 7:00 PM", - "10/12/25 7:00 PM", - "17/12/25 7:00 PM", - "24/12/25 7:00 PM" - ], - "location": "Medellín, Antioquia", - "address": "Cq. 4 #71-84, Laureles", - "category": "Co", - "city": "Medellín" - }, - { - "link": "https://eventario.co/events/club-de-pintura-sensibilizacion-al-arte/", - "title": "Club de pintura - sensibilización al arte", - "venue": "Casa Cultural La Trilla", - "venueLink": "https://eventario.co/places/casa-cultural-la-trilla/", - "label": "Cultura", - "dateTime": [ - "3/12/25 7:00 PM", - "10/12/25 7:00 PM", - "17/12/25 7:00 PM", - "24/12/25 7:00 PM" - ], - "location": "Medellín, Antioquia", - "address": "Calle 44a 73-60, 050031 Medellín", - "category": "Mu", - "city": "Medellín" - }, - { - "link": "https://eventario.co/events/miercoles-secretos/", - "title": "MIERCOLES SECRETOS", - "venue": "La Casa De Ruby", - "venueLink": "https://eventario.co/places/la-casa-de-ruby/", - "label": "Baile", - "dateTime": [ - "3/12/25 8:30 PM", - "10/12/25 8:30 PM", - "17/12/25 8:30 PM", - "24/12/25 8:30 PM" - ], - "location": "Medellín, Antioquia", - "address": "Calle 10 33-21, 050021 Medellín", - "category": "Mu", - "city": "Medellín" - }, - { - "link": "https://eventario.co/events/toma-tu-tomate-2/", - "title": "Toma tu Tomate", - "venue": "LA KORTE", - "venueLink": "https://eventario.co/places/la-korte-bar-de-comedia/", - "label": "Comedia y Stand Up", - "dateTime": [ - "3/12/25 9:00 PM", - "10/12/25 9:00 PM", - "17/12/25 9:00 PM", - "24/12/25 9:00 PM" - ], - "location": "Medellín, Antioquia", - "address": "Cq. 4 #71-84, Laureles", - "category": "Co", - "city": "Medellín" - }, - { - "link": "https://eventario.co/events/actividad-de-pintura-y-vino-%f0%9f%8e%a8%f0%9f%96%8c%ef%b8%8f%f0%9f%8d%b7/", - "title": "Actividad De Pintura Y Vino ????????️????", - "venue": "Floras black coffee", - "venueLink": "https://eventario.co/places/floras-black-coffee/", - "label": "Cultura", - "dateTime": [ - "29/11/25 4:00 PM", - "2/12/25 4:00 PM", - "4/12/25 4:00 PM", - "6/12/25 4:00 PM" - ], - "location": "Medellín, Antioquia", - "address": "Flora's Black Coffee, Mall las vegas TERRAZA - ROOFTOP", - "category": "Mu", - "city": "Medellín" - }, - { - "link": "https://eventario.co/events/a-tomarse-una-pola-con-los-parceros/", - "title": "A tomarse una Pola con los Parceros", - "venue": "La Cellar Club", - "venueLink": "https://eventario.co/places/la-cellar-club/", - "label": "Baile", - "dateTime": [ - "4/12/25 6:00 PM", - "11/12/25 6:00 PM", - "18/12/25 6:00 PM", - "25/12/25 6:00 PM" - ], - "location": "Medellín, Antioquia", - "address": "Calle 27 43f 79, 050021 Medellín", - "category": "Mu", - "city": "Medellín" - }, - { - "link": "https://eventario.co/events/joyas-colombianas-dinner-show/", - "title": "Joyas Colombianas Dinner & Show", - "venue": "Restaurante Marmoleo", - "venueLink": "https://eventario.co/places/restaurante-marmoleo/", - "label": "Cultura", - "dateTime": [ - "4/12/25 7:00 PM", - "11/12/25 7:00 PM", - "18/12/25 7:00 PM", - "25/12/25 7:00 PM" - ], - "location": "Medellín, Antioquia", - "address": "Carrera 11 #9a Sur-180, Medellín", - "category": "Mu", - "city": "Medellín" - }, - { - "link": "https://eventario.co/events/reinas-de-la-comedia/", - "title": "Reinas de la Comedia", - "venue": "LA KORTE", - "venueLink": "https://eventario.co/places/la-korte-bar-de-comedia/", - "label": "Comedia y Stand Up", - "dateTime": [ - "4/12/25 7:00 PM", - "11/12/25 7:00 PM", - "18/12/25 7:00 PM", - "25/12/25 7:00 PM" - ], - "location": "Medellín, Antioquia", - "address": "Cq. 4 #71-84, Laureles", - "category": "Co", - "city": "Medellín" - }, - { - "link": "https://eventario.co/events/el-parche-del-chicharron/", - "title": "EL PARCHE DEL CHICHARRON", - "venue": "Centauro Centro de Eventos", - "venueLink": "https://eventario.co/places/centauro-centro-de-eventos/", - "label": "Cultura", - "dateTime": [], - "location": "Envigado, Antioquia", - "address": "Calle 49 #37 sur 130, Zona 1" - }, - { - "link": "https://eventario.co/events/bestias-de-la-comedia-medellin/", - "title": "Bestias de la Comedia - Medellín", - "venue": "LA KORTE", - "venueLink": "https://eventario.co/places/la-korte-bar-de-comedia/", - "label": "Comedia y Stand Up", - "dateTime": [ - "5/12/25 7:00 PM", - "12/12/25 7:00 PM", - "19/12/25 7:00 PM", - "26/12/25 7:00 PM" - ], - "location": "Medellín, Antioquia", - "address": "Cq. 4 #71-84, Laureles", - "category": "Co", - "city": "Medellín" - }, - { - "link": "https://eventario.co/events/salsa-fever/", - "title": "SALSA FEVER", - "venue": "Blood Dance Company", - "venueLink": "https://eventario.co/places/blood-dance-company/", - "label": "Baile", - "dateTime": [ - "5/12/25 8:30 PM", - "12/12/25 8:30 PM", - "19/12/25 8:30 PM", - "26/12/25 8:30 PM" - ], - "location": "Medellín, Antioquia", - "address": "Carrera 81 36-44, 050031 Medellín", - "category": "Mu", - "city": "Medellín" - }, - { - "link": "https://eventario.co/events/humor-etilico-drink-cast/", - "title": "Humor Etílico, Drink-Cast", - "venue": "LA KORTE", - "venueLink": "https://eventario.co/places/la-korte-bar-de-comedia/", - "label": "Comedia y Stand Up", - "dateTime": [ - "5/12/25 9:00 PM" - ], - "location": "Medellín, Antioquia", - "address": "Circular 4 71-84, 050031 Medellín", - "category": "Co", - "city": "Medellín" - }, - { - "link": "https://eventario.co/events/terapia-de-choque-medellin/", - "title": "Terapia de Choque - Medellín", - "venue": "LA KORTE", - "venueLink": "https://eventario.co/places/la-korte-bar-de-comedia/", - "label": "Comedia y Stand Up", - "dateTime": [ - "5/12/25 9:00 PM", - "12/12/25 9:00 PM", - "19/12/25 9:00 PM", - "26/12/25 9:00 PM" - ], - "location": "Medellín, Antioquia", - "address": "Cq. 4 #71-84, Laureles", - "category": "Co", - "city": "Medellín" - }, - { - "link": "https://eventario.co/events/un-show-de-medio-pelo/", - "title": "Un show de medio pelo", - "venue": "LA KORTE", - "venueLink": "https://eventario.co/places/la-korte-bar-de-comedia/", - "label": "Comedia y Stand Up", - "dateTime": [ - "12/12/25 9:00 PM" - ], - "location": "Medellín, Antioquia", - "address": "Circular 4 71-84, 050031 Medellín", - "category": "Co", - "city": "Medellín" - }, - { - "link": "https://eventario.co/events/feria-de-oficios/", - "title": "Feria de Oficios", - "venue": "Parque Explora", - "venueLink": "https://eventario.co/places/parque-explora/", - "label": "Cultura", - "dateTime": [ - "13/12/25 10:00 AM" - ], - "location": "Medellín, Antioquia", - "address": "Carrera 53 73 75, 050010 Medellín", - "category": "Mu", - "city": "Medellín" - }, - { - "link": "https://eventario.co/events/todo-sobre-ruedas/", - "title": "Todo sobre ruedas", - "venue": "LA KORTE", - "venueLink": "https://eventario.co/places/la-korte-bar-de-comedia/", - "label": "Comedia y Stand Up", - "dateTime": [ - "13/12/25 9:00 PM" - ], - "location": "Medellín, Antioquia", - "address": "Circular 4 71-84, 050031 Medellín", - "category": "Co", - "city": "Medellín" - }, - { - "link": "https://eventario.co/events/free-comedy-fest-medallo/", - "title": "FREE COMEDY FEST MEDALLO", - "venue": "Teatro Universidad de Medellín", - "venueLink": "https://eventario.co/places/teatro-universidad-de-medellin/", - "label": "Comedia y Stand Up", - "dateTime": [ - "17/12/25 7:00 PM" - ], - "location": "Medellín, Antioquia", - "address": "Carrera 87 #30-65, Medellín", - "category": "Co", - "city": "Medellín" - }, - { - "link": "https://eventario.co/events/navidad-en-andres/", - "title": "Navidad en Andrés", - "venue": "Andrés Carne de Res Cartagena", - "venueLink": "https://eventario.co/places/andres-carne-de-res-cartagena/", - "label": "Cultura", - "dateTime": [ - "24/12/25 7:00 PM" - ], - "location": "Cartagena, Bolivar", - "address": "Carrera 11, Cl. de la Serrezuela #39 - 21", - "category": "Mu" - }, - { - "link": "https://eventario.co/events/gran-cena-de-san-silvestre/", - "title": "Gran Cena de San Silvestre", - "venue": "Hotel Las Américas Cartagena", - "venueLink": "https://eventario.co/places/hotel-las-americas-cartagena/", - "label": "Cultura", - "dateTime": [ - "31/12/25 6:00 PM" - ], - "location": "Cartagena, Bolivar", - "address": "Anillo Vial, Sector", - "category": "Mu" - }, - { - "link": "https://eventario.co/events/probando-probando-finura/", - "title": "Probando Probando Finura", - "venue": "Teatro el Tesoro", - "venueLink": "https://eventario.co/places/teatro-el-tesoro/", - "label": "Comedia y Stand Up", - "dateTime": [ - "7/02/26 7:00 PM" - ], - "location": "Medellín, Antioquia", - "address": "Cra. 25a #1A Sur - 45, El Poblado", - "category": "Co", - "city": "Medellín" - }, - { - "link": "https://eventario.co/events/medellin-street-art-festival/", - "title": "Medellín Street Art Festival", - "venue": "Medellín Street Art Festival", - "venueLink": "https://eventario.co/places/medellin-street-art-festival/", - "label": "Cultura", - "dateTime": [], - "location": "Medellín, Antioquia", - "address": "Street Art Colombia, Calle 10b" - }, - { - "link": "https://eventario.co/events/maridaje-sabor-y-fiesta-2025/", - "title": "MARIDAJE SABOR Y FIESTA 2025", - "venue": "Plaza mayor", - "venueLink": "https://eventario.co/places/plaza-mayor/", - "label": "Cultura", - "dateTime": [], - "location": "Medellín, Antioquia", - "address": "Cra. 57 #41-81, La Candelaria" - } -] \ No newline at end of file diff --git a/Working/venues/manual/eventario.py b/Working/venues/manual/eventario.py index 217d3c7..2247d6e 100644 --- a/Working/venues/manual/eventario.py +++ b/Working/venues/manual/eventario.py @@ -1,5 +1,5 @@ import os, sys -from datetime import datetime +from datetime import datetime, timedelta from dateutil import relativedelta import json @@ -12,9 +12,10 @@ dtss.getReady() from time import sleep from pprint import pprint as ppr +from zoneinfo import ZoneInfo import pytz -from events.models import Organization, Scraper, Calendar +from events.models import Event, Organization, Scraper, Calendar import events.digitools as digitools venue, created = Organization.objects.get_or_create( @@ -25,9 +26,14 @@ venue, created = Organization.objects.get_or_create( ) scraper,item_count_start,virtcal = digitools.getScraper(venue, venue.website, 'mde') +tz_str = " -0500 UTC" +DATETIME_FORMAT = '%d/%m/%y %I:%M %p %z %Z' +# DATETIME_FORMAT = '%B %d %Y %I:%M%p %z %Z' +# DATETIME_FORMAT = '%B %d %Y %I:%M %p %z %Z' +# DATETIME_FORMAT_2 = '%A, %B %d @ %I%p %Y %z %Z' -DATETIME_FORMAT = '%B %d %Y %I:%M%p' -DATETIME_FORMAT_2 = '%A, %B %d @ %I%p %Y' +td = timedelta(days=31) +future_date = datetime.now(ZoneInfo("America/Chicago")) + td # with open('data.json') as f: # totalLinks = json.load(f) @@ -52,18 +58,18 @@ def getLinks(br, url, links): # newlinks = ps.xpath('.//*/div[@class="e-con-inner"]/*/a/@href') events = ps.xpath('.//*/div[@class="e-con-inner"]') for event in events: - e = {} + ev = {} try: - e['link'] = event.xpath('.//*/a/@href')[0] - e['title'] = event.xpath('.//*/h3/a/text()')[0] - e['venue'] = event.xpath('.//*/ul/li/a/text()')[-1:][0].replace('\n', '').replace('\t', '') + ev['link'] = event.xpath('.//*/a/@href')[0] + ev['title'] = event.xpath('.//*/h3/a/text()')[0] + ev['venue'] = event.xpath('.//*/ul/li/a/text()')[-1:][0].replace('\n', '').replace('\t', '') # e['venue'] = event.xpath('.//*/ul/li/a/text()')[-1:][0] - e['venueLink'] = event.xpath('.//*/ul/li/a/@href')[1] + ev['venueLink'] = event.xpath('.//*/ul/li/a/@href')[1] label= event.xpath('.//*/li[@class="elementor-repeater-item-46edd7d flexify ts-action"]/div/text()') - e['label'] = ''.join([x.replace('\t', '').replace('\n', '') for x in label]).strip() - newLinks.append(e) + ev['label'] = ''.join([x.replace('\t', '').replace('\n', '') for x in label]).strip() + newLinks.append(ev) except Exception as e: - print("Error: ", e) + print("Error: ", ev, e) links = links + newLinks return links @@ -89,35 +95,47 @@ ppr(len(totalLinks)) for event in totalLinks: br.get(event['link']) - sleep(2) + sleep(1) ps = html.fromstring(br.page_source) dateTime= ps.xpath('.//*/div[@class="elementor-element elementor-element-d9beb21 elementor-widget elementor-widget-heading"]/span[@class="elementor-heading-title elementor-size-default"]/text()') event['dateTime'] = [x[3:].split('-')[0].strip() for x in dateTime] - locations = ps.xpath('.//*/div[@class="elementor-element elementor-element-f04aae3 elementor-widget__width-initial elementor-widget-mobile__width-initial elementor-widget elementor-widget-ts-advanced-list"]/*/li[@class="elementor-repeater-item-138dbed flexify ts-action"]/a/text()') - location = [x.replace('\t', '').replace('\n', '') for x in locations] - if len(location) == 2: - event['location'] = "{0}, {1}".format(location[1], location[0]) - else: - try: - event['location'] = location[0] - except: - event['location'] = 'n/a' - address= ps.xpath('.//*/ul[@class="flexify simplify-ul ts-advanced-list"]/li[@class="elementor-repeater-item-842568d flexify ts-action"]/div/text()') try: - event['address'] = [x for x in address if 'Capacidad' not in x and '$' not in x][0] - except: - event['address'] = address + event['dateStamp'] = datetime.strptime(event['dateTime'][0] +tz_str, DATETIME_FORMAT) + if future_date <= event['dateStamp']: + print("Future Date") + pass + else: + locations = ps.xpath('.//*/div[@class="elementor-element elementor-element-f04aae3 elementor-widget__width-initial elementor-widget-mobile__width-initial elementor-widget elementor-widget-ts-advanced-list"]/*/li[@class="elementor-repeater-item-138dbed flexify ts-action"]/a/text()') + location = [x.replace('\t', '').replace('\n', '') for x in locations] + if len(location) == 2: + event['location'] = "{0}, {1}".format(location[1], location[0]) + else: + try: + event['location'] = location[0] + except: + event['location'] = 'n/a' + address= ps.xpath('.//*/ul[@class="flexify simplify-ul ts-advanced-list"]/li[@class="elementor-repeater-item-842568d flexify ts-action"]/div/text()') + try: + event['address'] = [x for x in address if 'Capacidad' not in x and '$' not in x][0] + except: + event['address'] = address + except Exception as e: + print("Error: ", event, e) + pass # ppr(event) -sleep(2) +sleep(1) br.close() -data = totalLinks +data = [i for i in totalLinks if 'dateStamp' in i] +new_data = [i for i in data if 'location' in i] print("Set:", len(totalLinks)) +print("Data Set:", len(data)) +print("New Data Set:", len(new_data)) paisa = [] -for d in data: +for d in new_data: if len(d['dateTime']) != 0: if 'Familia' in d['label']: d['category'] = 'Ot' @@ -139,7 +157,6 @@ for d in data: cal = Calendar.objects.get(shortcode='mde') for d in paisa: - d['dateStamp'] =datetime.strptime(d['dateTime'][0], DATETIME_FORMAT) try: nvenue, created = Organization.objects.get_or_create( name=d['venue'], @@ -152,6 +169,7 @@ for d in paisa: nvenue = Organization.objects.get(name=d['venue']) nvenue.address_complete = d['address'] nvenue.save() + new_event, created = Event.objects.update_or_create( event_type = d['category'], show_title = d['title'], @@ -163,6 +181,6 @@ for d in paisa: ) new_event.calendar.add(cal) new_event.save() - print(new_event) + # print("Success:", new_event) digitools.updateScraper(scraper, item_count_start) \ No newline at end of file diff --git a/Working/venues/mn.mpls.AcmeComedy.py b/Working/venues/mn.mpls.AcmeComedy.py index 58cdf4d..db563a0 100644 --- a/Working/venues/mn.mpls.AcmeComedy.py +++ b/Working/venues/mn.mpls.AcmeComedy.py @@ -13,9 +13,8 @@ import pytz from events.models import Organization, Scraper, Calendar, Event import events.digitools as digitools -tz = pytz.timezone("US/Central") -DATETIME_FORMAT = '%b %d %Y %I:%M %p' -DATETIME_FORMAT_2 = '%A, %B %d @ %I%p %Y' +tz_str = " -0600 UTC" +DATETIME_FORMAT = '%b %d %Y %I:%M %p %z %Z' venue, created = Organization.objects.get_or_create( name="Acme Comedy Club", @@ -43,15 +42,14 @@ def get_events(ps, event_type): event['title'] = c.xpath('.//*/span[@class="event_title"]/a/text()')[0] event['date'] = [month, day, str(year), c.xpath('.//*/span[@class="event_time"]/text()')[0].strip()] event['date'] = " ".join(event['date']) - event['dateStamp'] = datetime.strptime(event['date'], DATETIME_FORMAT) + event['dateStamp'] = datetime.strptime(event['date'] + tz_str, DATETIME_FORMAT) event['link'] = c.xpath('.//*/span[@class="event_title"]/a/@href')[0] digitools.createBasicEvent(event, "Co", venue) scraper.items+=1 except Exception as e: print(e) - ppr(event) - print("\n\n+++\n\n") - + pass + if len(sys.argv) >= 2: arg1 = sys.argv[1] br = digitools.getBrowser(arg1) @@ -67,4 +65,4 @@ for link in links: get_events(ps, "Co") digitools.updateScraper(scraper, item_count_start) -br.close() \ No newline at end of file +br.close() diff --git a/Working/venues/mn.mpls.GreenRoom.py b/Working/venues/mn.mpls.GreenRoom.py index d97d881..69cd8d5 100644 --- a/Working/venues/mn.mpls.GreenRoom.py +++ b/Working/venues/mn.mpls.GreenRoom.py @@ -13,7 +13,6 @@ import pytz from events.models import Organization, Scraper import events.digitools as digitools - venue, created = Organization.objects.get_or_create( name="Green Room", city="Minneapolis", @@ -25,10 +24,8 @@ scraper,item_count_start,virtcal = digitools.getScraper(venue, venue.website, 'm event_type = "Mu" -# Time Signatures -tz = pytz.timezone("US/Central") -DATETIME_FORMAT = '%a %b %d %Y %I:%M %p' -DATETIME_FORMAT_2 = '%A, %B %d @ %I%p %Y' +tz_str = " -0600 UTC" +DATETIME_FORMAT = '%a %b %d %Y %I:%M %p %z %Z' def get_events(ps, event_type): contents = ps.xpath('.//*/div[@class="vp-event-card vp-venue-greenroom vp-col"]') @@ -45,14 +42,13 @@ def get_events(ps, event_type): event['calendars'] = [scraper.calendar] event['title'] = c.xpath('.//*/div[@class="vp-event-name"]/text()')[0] event['datetime'] = date + " " + str(year) + " " + time - event['dateStamp'] = datetime.strptime(event['datetime'], DATETIME_FORMAT) + event['dateStamp'] = datetime.strptime(event['datetime'] + tz_str, DATETIME_FORMAT) event['link'] = venue.website + c.xpath('.//a[@class="vp-event-link"]/@href')[0] digitools.createBasicEvent(event, event_type, venue) scraper.items+=1 except Exception as e: print(e) ppr(event) - print("\n+++\n") if len(sys.argv) >= 2: arg1 = sys.argv[1] @@ -67,4 +63,4 @@ sleep(3) br.close() -digitools.updateScraper(scraper, item_count_start) \ No newline at end of file +digitools.updateScraper(scraper, item_count_start) diff --git a/Working/venues/mn.mpls.HookNLadder.py b/Working/venues/mn.mpls.HookNLadder.py index db18e2b..5542bc4 100644 --- a/Working/venues/mn.mpls.HookNLadder.py +++ b/Working/venues/mn.mpls.HookNLadder.py @@ -26,8 +26,8 @@ venue, created = Organization.objects.get_or_create( scraper,item_count_start,virtcal = digitools.getScraper(venue, venue.website, 'msp') ppr(scraper) -tz = pytz.timezone("US/Central") -DATETIME_FORMAT = '%a, %b %d, %Y @ %I:%M %p' +tz_str = " -0600 UTC" +DATETIME_FORMAT = '%a, %b %d, %Y @ %I:%M %p %z %Z' # Set initial variables for City, etc calendar_url = [ @@ -60,7 +60,7 @@ def get_listings(pse, events): except: e['price'] = "See Link" e['image'] = event.xpath('.//*/img/@data-src')[0] - e["date_time"] = datetime.strptime(e['datetime'], DATETIME_FORMAT) + e["date_time"] = datetime.strptime(e['datetime'] + tz_str, DATETIME_FORMAT) e['scraper'] = scraper e['calendar'] = [scraper.calendar] events.append(e) diff --git a/Working/venues/mn.mpls.MagersQuinn.py b/Working/venues/mn.mpls.MagersQuinn.py index 05aa399..a3618f5 100644 --- a/Working/venues/mn.mpls.MagersQuinn.py +++ b/Working/venues/mn.mpls.MagersQuinn.py @@ -22,8 +22,8 @@ venue, created = Organization.objects.get_or_create( scraper,item_count_start,virtcal = digitools.getScraper(venue, venue.website, 'msp') -DATETIME_FORMAT = '%A, %B %d , %Y %I:%M %p' -DATETIME_FORMAT_2 = '%A, %B %d @ %I%p %Y' +tz_str = " -0600 UTC" +DATETIME_FORMAT = '%A, %B %d , %Y %I:%M %p %z %Z' def get_events(ps, event_type): contents = ps.xpath('.//*/div[@class="day has-event"]') @@ -38,7 +38,7 @@ def get_events(ps, event_type): event['title'] = c.xpath('.//*/h3/text()')[0] event['date'] = [month, day, year, c.xpath('.//*/p[@class="time"]/text()')[0]] event['date'] = " ".join(event['date']) - event['dateStamp'] =datetime.strptime(event['date'], DATETIME_FORMAT) + event['dateStamp'] =datetime.strptime(event['date'] + tz_str, DATETIME_FORMAT) event['link'] = "https://www.magersandquinn.com" + c.xpath('.//a[@class="event in-store"]/@href')[0] digitools.createBasicEvent(event, "Ed", venue) scraper.items+=1 @@ -63,7 +63,7 @@ for link in links: ps = digitools.getSource(br, link) get_events(ps, "Ed") sleep(3) -# ppr(events) + br.close() digitools.updateScraper(scraper, item_count_start) diff --git a/Working/venues/mn.mpls.ParkwayTheater.py b/Working/venues/mn.mpls.ParkwayTheater.py index 757855d..77296b7 100644 --- a/Working/venues/mn.mpls.ParkwayTheater.py +++ b/Working/venues/mn.mpls.ParkwayTheater.py @@ -26,8 +26,8 @@ except Exception as e: scraper,item_count_start, virtcal = digitools.getScraper(venue, venue.website, 'msp') tz = pytz.timezone("US/Central") - -DATETIME_FORMAT = '%b %d, %Y %I:%M %p' +tz_str = " -0600 UTC" +DATETIME_FORMAT = '%b %d, %Y %I:%M %p %z %Z' def get_events(ps, event_type): contents = ps.xpath('.//*/div[@class="summary-content sqs-gallery-meta-container"]') @@ -40,7 +40,7 @@ def get_events(ps, event_type): event['title'] = c.xpath('.//*/a[@class="summary-title-link"]/text()')[0] event['link'] = "https://theparkwaytheater.com" + c.xpath('.//*/a[@class="summary-title-link"]/@href')[0] event['date'] = c.xpath('.//div/div/time/text()')[0] + " " + c.xpath('.//*/span[@class="event-time-12hr"]/text()')[0].split("–")[0].strip() - event['dateStamp'] = datetime.strptime(event['date'], DATETIME_FORMAT) + event['dateStamp'] = datetime.strptime(event['date'] + tz_str, DATETIME_FORMAT) event['desc'] = c.xpath('.//*/p/text()')[0] event['img_link'] = i event['details'] = { @@ -54,8 +54,8 @@ def get_events(ps, event_type): event_type = event_type, show_title = event['title'], show_link = event['link'], - show_date = datetime.strptime(event['date'], DATETIME_FORMAT), - show_day = datetime.strptime(event['date'], DATETIME_FORMAT), + show_date = datetime.strptime(event['date'] + tz_str, DATETIME_FORMAT), + show_day = datetime.strptime(event['date'] + tz_str, DATETIME_FORMAT), more_details = event["details"], venue = venue ) @@ -64,14 +64,14 @@ def get_events(ps, event_type): except Exception as e: try: event['date'] = c.xpath('.//div/div/time/text()')[0].split("–")[0] + " " + c.xpath('.//*/span[@class="event-time-12hr"]/text()')[0].split("–")[0].strip() - event['dateStamp'] = datetime.strptime(event['date'], DATETIME_FORMAT) + event['dateStamp'] = datetime.strptime(event['date'] + tz_str, DATETIME_FORMAT) new_event, created = DSEvent.objects.update_or_create( scraper = scraper, event_type = event_type, show_title = event['title'], show_link = event['link'], - show_date = datetime.strptime(event['date'], DATETIME_FORMAT), - show_day = datetime.strptime(event['date'], DATETIME_FORMAT), + show_date = datetime.strptime(event['date'] + tz_str, DATETIME_FORMAT), + show_day = datetime.strptime(event['date'] + tz_str, DATETIME_FORMAT), more_details = event["details"], venue = venue ) @@ -97,8 +97,6 @@ get_events(ps, "Mu") calendar_url = "https://theparkwaytheater.com/movies" ps = digitools.getSource(br, calendar_url) get_events(ps, "Th") - -# ppr(events) br.close() -digitools.updateScraper(scraper, item_count_start) \ No newline at end of file +digitools.updateScraper(scraper, item_count_start) diff --git a/Working/venues/mn.mpls.UptownVFW.py b/Working/venues/mn.mpls.UptownVFW.py index 33f58d2..0ec0c59 100644 --- a/Working/venues/mn.mpls.UptownVFW.py +++ b/Working/venues/mn.mpls.UptownVFW.py @@ -13,7 +13,6 @@ import pytz from events.models import Organization, Scraper, Event import events.digitools as digitools - from selenium.webdriver.common.by import By from lxml import html @@ -26,13 +25,9 @@ venue, created = Organization.objects.get_or_create( scraper,item_count_start, virtcal = digitools.getScraper(venue, venue.website, 'msp') -tz = pytz.timezone("US/Central") - -DATETIME_FORMAT = '%a %B %d @ %I:%M %p %Y' -DATETIME_FORMAT_2 = '%a %B %d, %Y @ %I:%M %p' -# DATETIME_FORMAT_2 = '%b %d %I:%M%p %Y' -# DATETIME_FORMAT_3 = '%b %d %Y' -# Set initial variables for City, etc +tz_str = " -0600 UTC" +DATETIME_FORMAT = '%a %B %d @ %I:%M %p %Y %z %Z' +DATETIME_FORMAT_2 = '%a %B %d, %Y @ %I:%M %p %z %Z' calendar_url = 'https://noboolpresents.com/venues/uptown-vfw/' current_year = str(datetime.now().year) @@ -54,16 +49,14 @@ def getEvents(br): dateTime = event.xpath('.//*/span[@class="tribe-event-date-start"]/text()')[0].replace("•", "").strip() + " " + current_year title = event.xpath('.//*/h2[@class="alt-font"]/a/text()')[0].replace("\n", "").replace("\t", "") link = event.xpath('.//*/h2[@class="alt-font"]/a/@href')[0] - # deets["tickets"] = event.xpath('.//*/span[@class="tribe-events-c-small-cta__price"]/strong/text()')[0] try: new_event, created = Event.objects.update_or_create( scraper = scraper, event_type = 'Mu', show_title = title, show_link = link, - show_date = datetime.strptime(dateTime, DATETIME_FORMAT), - show_day = datetime.strptime(dateTime, DATETIME_FORMAT), - # more_details = deets["tickets"], + show_date = datetime.strptime(dateTime + tz_str, DATETIME_FORMAT), + show_day = datetime.strptime(dateTime + tz_str, DATETIME_FORMAT), venue = venue ) digitools.add_calendar(new_event, 'msp') @@ -75,9 +68,8 @@ def getEvents(br): event_type = 'Mu', show_title = title, show_link = link, - show_date = datetime.strptime(dateTime[:-4].strip(), DATETIME_FORMAT_2), - show_day = datetime.strptime(dateTime[:-4].strip(), DATETIME_FORMAT_2), - # more_details = deets["tickets"], + show_date = datetime.strptime(dateTime[:-4].strip() + tz_str, DATETIME_FORMAT_2), + show_day = datetime.strptime(dateTime[:-4].strip() + tz_str, DATETIME_FORMAT_2), venue = venue ) digitools.add_calendar(new_event, 'msp') diff --git a/Working/venues/mn.mpls.cabooze.py b/Working/venues/mn.mpls.cabooze.py index fe4796e..81fdd9c 100644 --- a/Working/venues/mn.mpls.cabooze.py +++ b/Working/venues/mn.mpls.cabooze.py @@ -13,9 +13,8 @@ import pytz from events.models import Organization, Scraper import events.digitools as digitools -tz = pytz.timezone("US/Central") -DATETIME_FORMAT = '%b %d %I:%M %p %Y' -DATETIME_FORMAT_2 = '%A, %B %d @ %I%p %Y' +tz_str = " -0600 UTC" +DATETIME_FORMAT = '%b %d %I:%M %p %Y %z %Z' venue, created = Organization.objects.get_or_create( name="Cabooze", @@ -29,7 +28,6 @@ scraper,item_count_start,virtcal = digitools.getScraper(venue, venue.website, 'm def get_events(ps, event_type): print("Getting events ...") contents = ps.xpath('.//*/div[@class="vp-event-row vp-widget-reset vp-venue-thecabooze"]') - ppr(contents) for c in contents: try: event = {} @@ -45,16 +43,14 @@ def get_events(ps, event_type): event['title'] = c.xpath('.//*/div[@class="vp-event-name"]/text()')[0] event['date'] = [date, time, str(year)] event['date'] = " ".join(event['date']) - event['dateStamp'] = datetime.strptime(event['date'], DATETIME_FORMAT) + event['dateStamp'] = datetime.strptime(event['date'] + tz_str, DATETIME_FORMAT) event['link'] = "https://www.cabooze.com/" + c.xpath('.//a[@class="vp-event-link"]/@href')[0] - # print("Event Dict Created") - # ppr(event) digitools.createBasicEvent(event, event_type, venue) scraper.items+=1 except Exception as e: print(e) ppr(event) - print("\n\n+++\n\n") + if len(sys.argv) >= 2: arg1 = sys.argv[1] @@ -68,4 +64,4 @@ get_events(ps, "Mu") sleep(3) digitools.updateScraper(scraper, item_count_start) -br.close() \ No newline at end of file +br.close() diff --git a/Working/venues/mn.mpls.cedarculturalcenter.py b/Working/venues/mn.mpls.cedarculturalcenter.py index 9ae5022..1f85d6b 100644 --- a/Working/venues/mn.mpls.cedarculturalcenter.py +++ b/Working/venues/mn.mpls.cedarculturalcenter.py @@ -22,17 +22,13 @@ venue, created = Organization.objects.get_or_create( scraper,item_count_start,virtcal = digitools.getScraper(venue,venue.website, 'msp') -DATETIME_FORMAT = '%A, %B %d, %Y %I:%M %p' -DATETIME_FORMAT_2 = '%A, %B %d @ %I%p %Y' -DATETIME_FORMAT_3 = '%A, %B %d at %I:%M%p %Y' -DATETIME_FORMAT_4 = '%A, %B %d at %I%p %Y' -DATETIME_FORMAT_5 = '%A, %B %d @%I%p %Y' +tz_str = " -0600 UTC" +DATETIME_FORMAT = '%A, %B %d, %Y %I:%M %p %z %Z' + def get_events(ps): links = ps.xpath('.//*/div[@class="summary-title"]/a/@href') - print("Length of Links: ", len(links)) links = list(set(links)) - print("New Length of Links: ", len(links)) for l in links: if "cedar-news-blog" in l: continue @@ -54,7 +50,7 @@ def get_events(ps): print(e) print("failed event: ", event) dateStamp = date + " " + time - event['dateStamp'] = datetime.strptime(dateStamp, DATETIME_FORMAT) + event['dateStamp'] = datetime.strptime(dateStamp + tz_str, DATETIME_FORMAT) digitools.createBasicEvent(event, "Mu", venue) scraper.items+=1 @@ -71,4 +67,4 @@ ps = digitools.getSource(br, calendar_url) get_events(ps) br.close() -digitools.updateScraper(scraper, item_count_start) \ No newline at end of file +digitools.updateScraper(scraper, item_count_start) diff --git a/Working/venues/mn.mpls.club331.py b/Working/venues/mn.mpls.club331.py index a4a490b..d2b4e9e 100644 --- a/Working/venues/mn.mpls.club331.py +++ b/Working/venues/mn.mpls.club331.py @@ -35,9 +35,10 @@ venue, created = Organization.objects.get_or_create( scraper,item_count_start,virtcal = digitools.getScraper(venue, venue.website, 'msp') -DATETIME_FORMAT = '%b %d %I%p %Y' -DATETIME_FORMAT_2 = '%b %d %I:%M%p %Y' -DATETIME_FORMAT_3 = '%b %d %Y' +tz_str = " -0600 UTC" +DATETIME_FORMAT = '%b %d %I%p %Y %z %Z' +DATETIME_FORMAT_2 = '%b %d %I:%M%p %Y %z %Z' +DATETIME_FORMAT_3 = '%b %d %Y %z %Z' # Set initial variables for City, etc calendar_url = 'https://331club.com/#calendar' @@ -72,13 +73,13 @@ for d in dates: event = {} event["datetime"] = event_date + time + [current_year] try: - event["date_time"] = datetime.strptime(" ".join(event["datetime"]), DATETIME_FORMAT) + event["date_time"] = datetime.strptime(" ".join(event["datetime"]) + tz_str, DATETIME_FORMAT) except: try: - event["date_time"] = datetime.strptime(" ".join(event["datetime"]), DATETIME_FORMAT_2) + event["date_time"] = datetime.strptime(" ".join(event["datetime"]) + tz_str, DATETIME_FORMAT_2) except: try: - event["date_time"] = datetime.strptime(" ".join(event["datetime"]), DATETIME_FORMAT_3) + event["date_time"] = datetime.strptime(" ".join(event["datetime"]) + tz_str, DATETIME_FORMAT_3) except: event["date_time"] = "Invalid" event["bands"] = (", ").join(bands) diff --git a/Working/venues/mn.mpls.first-avenue.py b/Working/venues/mn.mpls.first-avenue.py index 851b6bf..7a3e925 100644 --- a/Working/venues/mn.mpls.first-avenue.py +++ b/Working/venues/mn.mpls.first-avenue.py @@ -34,18 +34,17 @@ def get_info(pse): except Exception as e: print("details issue: ", e) try: - event["date_time"] = datetime.strptime(" ".join(event["date"]) + " " + event["details"]["Doors Open"], DATETIME_FORMAT) + event["date_time"] = datetime.strptime(" ".join(event["date"]) + " " + event["details"]["Doors Open"] + tz_str, DATETIME_FORMAT) except Exception as e: print("Using alt date format 2: ", e) try: - event["date_time"] = datetime.strptime(" ".join(event["date"]) + " " + event["details"]["Doors Open"], DATETIME_FORMAT_2) + event["date_time"] = datetime.strptime(" ".join(event["date"]) + " " + event["details"]["Doors Open"] + tz_str, DATETIME_FORMAT_2) ppr(event) except Exception as e: print("Using alt date format 3: ", e) print(event['date']) - event["date_time"] = datetime.strptime(" ".join(event["date"]), DATETIME_FORMAT_3) + event["date_time"] = datetime.strptime(" ".join(event["date"]) + tz_str, DATETIME_FORMAT_3) print("The Event:") - ppr(event) return event def get_date(pse, event): @@ -78,10 +77,10 @@ venue, created = Organization.objects.get_or_create( scraper,item_count_start,virtcal = digitools.getScraper(venue, venue.website, 'msp') tz = pytz.timezone("US/Central") - -DATETIME_FORMAT = '%b %d %Y %I%p' -DATETIME_FORMAT_2 = '%b %d %Y %I:%M%p' -DATETIME_FORMAT_3 = '%b %d %Y' +tz_str = " -0600 UTC" +DATETIME_FORMAT = '%b %d %Y %I%p %z %Z' +DATETIME_FORMAT_2 = '%b %d %Y %I:%M%p %z %Z' +DATETIME_FORMAT_3 = '%b %d %Y %z %Z' # Set initial variables for City, etc month = int(datetime.now().month) @@ -112,8 +111,6 @@ else: calendar_url_2 = 'https://first-avenue.com/shows/?start_date=' + str(year) + next_month_string -# print("\n\n", calendar_url, calendar_url_2, "\n\n") - if len(sys.argv) >= 2: arg1 = sys.argv[1] br = digitools.getBrowser(arg1) @@ -128,6 +125,8 @@ if datetime.now().day < 8: elif 7 < datetime.now().day < 15: ps = digitools.getSource(br, calendar_url) shows = ps.xpath('.//*/div[@class="show_name content flex-fill"]/div/div/h4/a/@href') + ps = digitools.getSource(br, calendar_url_2) + shows = shows + ps.xpath('.//*/div[@class="show_name content flex-fill"]/div/div/h4/a/@href')[:15] elif 14 < datetime.now().day < 21: ps = digitools.getSource(br, calendar_url) shows = ps.xpath('.//*/div[@class="show_name content flex-fill"]/div/div/h4/a/@href')[:95] @@ -176,4 +175,3 @@ br.close() digitools.updateScraper(scraper, item_count_start) -# br.find_element_by_class_name('fc-btn_allCalendars-button').click() diff --git a/Working/venues/mn.mpls.guthrie.py b/Working/venues/mn.mpls.guthrie.py new file mode 100644 index 0000000..8f149a9 --- /dev/null +++ b/Working/venues/mn.mpls.guthrie.py @@ -0,0 +1,79 @@ +import os, sys +from datetime import datetime +from dateutil import relativedelta + +sys.path.append('/var/www/digisnaxx.ado/scrapers') +import dtss +dtss.getReady() + +from time import sleep +from pprint import pprint as ppr +import pytz + +from events.models import Organization, Scraper +import events.digitools as digitools + +current_year = str(datetime.now().year) + +venue, created = Organization.objects.get_or_create( + name="Guthrie Theater", + city="Minneapolis", + website="https://www.guthrietheater.org", + is_venue = True + ) + +scraper,item_count_start,virtcal = digitools.getScraper(venue, venue.website, 'msp') + +event_type = "Mu" + +tz_str = "-0600 UTC" +DATETIME_FORMAT = '%b %d %Y %I:%M %p %z %Z' + +def get_events(ps, event_type): + contents = ps.xpath('.//*/div[@class="image-callouts-item-inner"]') + events = [] + year = datetime.today().year + for c in contents: + try: + event = {} + event['title'] = c.xpath('.//figcaption/p/text()')[0] + event['link'] = c.xpath('.//figcaption/a/@href')[0] + event['link'] = venue.website + event['link'] + event['scraper'] = scraper + event['calendars'] = scraper.calendar + # ppr(event) + events.append(event) + except Exception as e: + print(e) + pass + for e in events[:-3]: + try: + ps = digitools.getSource(br, e['link']) + nc = ps.xpath('.//div[@class="modal-row-inner buytix"]') + for n in nc: + date = n.xpath('.//div[@class="buytix-info"]/h4/text()')[0].split(',')[1].strip() + time = n.xpath('.//div[@class="buytix-time"]/p/text()')[0].strip() + e['datetime'] = "{0} {1} {2} {3}".format(date, year, time, tz_str) + e['dateStamp'] =datetime.strptime(e['datetime'], DATETIME_FORMAT) + digitools.createBasicEvent(e, 'Th', venue) + scraper.items+=1 + except Exception as e: + print("Error: ", e) + pass + +if len(sys.argv) >= 2: + arg1 = sys.argv[1] + br = digitools.getBrowser(arg1) +else: + print("No run_env") + quit() + + +shows = "/shows-and-tickets/" +ps = digitools.getSource(br, venue.website+shows) +get_events(ps, event_type) +sleep(3) + +br.close() + +digitools.updateScraper(scraper, item_count_start) diff --git a/Working/venues/mn.mpls.icehouse.py b/Working/venues/mn.mpls.icehouse.py index ae541f9..7bae02e 100644 --- a/Working/venues/mn.mpls.icehouse.py +++ b/Working/venues/mn.mpls.icehouse.py @@ -14,9 +14,8 @@ from events.models import Organization, Scraper import events.digitools as digitools count = 0 -tz = pytz.timezone("US/Central") -DATETIME_FORMAT = '%a, %b %d %Y %I%p' -DATETIME_FORMAT_2 = '%a, %b %d %Y %I:%M %p SHOW' +tz_str = " -0600 UTC" +DATETIME_FORMAT = '%a, %b %d %Y %I%p %z %Z' venue, created = Organization.objects.get_or_create( name="Icehouse", @@ -38,19 +37,16 @@ def get_events(ps, event_type): event['link'] = venue.website + c.xpath('.//*/a[@class="show-link"]/@href')[0] event['date'] = c.xpath('.//*/h4[@class="day-of-week"]/text()')[0] month = event['date'].split(' ')[1].strip() - print("MONTH: ", month) year = int(datetime.today().year) if month in ['Jan', 'Feb', 'Mar']: year = year + 1 time = c.xpath('.//p/span/text()')[0][:4].strip() if time[-1:] == 'm': event['dateStamp'] = event['date'] + ' ' + str(year) + ' ' + time - event['dateStamp'] =datetime.strptime(event['dateStamp'], DATETIME_FORMAT) + event['dateStamp'] =datetime.strptime(event['dateStamp'] + tz_str, DATETIME_FORMAT) digitools.createBasicEvent(event, event_type, venue) else: - ppr(event) - print("MONTH: ", month) - + print("Failed ?") except Exception as e: print("What?",e,"\n\n+++") @@ -65,6 +61,5 @@ ps = digitools.getSource(br, venue.website) br.execute_script("window.scrollTo(0, window.scrollY + 5000)") get_events(ps, "Mu") -# ppr(events) br.close() digitools.updateScraper(scraper, item_count_start) diff --git a/Working/venues/mn.mpls.pillarforum.py b/Working/venues/mn.mpls.pillarforum.py index 35cbc85..60ccf87 100644 --- a/Working/venues/mn.mpls.pillarforum.py +++ b/Working/venues/mn.mpls.pillarforum.py @@ -13,7 +13,6 @@ import pytz from events.models import Organization, Scraper import events.digitools as digitools - current_year = str(datetime.now().year) venue, created = Organization.objects.get_or_create( @@ -27,39 +26,34 @@ scraper,item_count_start,virtcal = digitools.getScraper(venue, venue.website, 'm event_type = "Mu" -# Time Signatures -tz = pytz.timezone("US/Central") -DATETIME_FORMAT = '%b. %d %Y %I:%M%p' -DATETIME_FORMAT_night = '%b. %d %Y %I:%M %p' -DATETIME_FORMAT_2 = '%b. %d %Y %I:%Mam' +tz_str = " -0600 UTC" +DATETIME_FORMAT = '%b. %d %Y %I:%M%p %z %Z' def get_events(ps, event_type): contents = ps.xpath('.//*/div[@class="sse-row sse-clearfix"]') for c in contents: year = datetime.today().year - try: date = c.xpath('.//h1[@class="sse-size-64"]/text()')[0] month = date.split(".")[0] - ppr(date) - if month in ['JAN', 'FEB', 'MAR']: - year = int(datetime.today().year) + 1 + # ppr(date) + # if month in ['JAN', 'FEB', 'MAR']: + # year = int(datetime.today().year) + 1 event = {} event['scraper'] = scraper event['calendars'] = scraper.calendar event['link'] = venue.website - event['title'] = c.xpath('.//p/span/b/text()')[0] event['deets'] = c.xpath('.//p/span/text()')[0] event['title'] = event['title'] + ' ' + event['deets'] paras = c.xpath('.//p/text()') times = paras[1].split(" ")[1] event['datetime'] = "{0} {1} {2}".format(date, year, times) - event['dateStamp'] =datetime.strptime(event['datetime'], DATETIME_FORMAT) - ppr(event) + event['dateStamp'] =datetime.strptime(event['datetime'] + tz_str, DATETIME_FORMAT) + print("Print Events: ") digitools.createBasicEvent(event, event_type, venue) except Exception as e: - # print(e) + print("Error: ", e) pass if len(sys.argv) >= 2: diff --git a/Working/venues/mn.stp.Amsterdam.py b/Working/venues/mn.stp.Amsterdam.py index 250a97e..5bdc3ad 100644 --- a/Working/venues/mn.stp.Amsterdam.py +++ b/Working/venues/mn.stp.Amsterdam.py @@ -21,9 +21,8 @@ venue, created = Organization.objects.get_or_create( ) scraper,item_count_start,virtcal = digitools.getScraper(venue, venue.website, 'msp') - -DATETIME_FORMAT = '%B %d %Y %I:%M%p' -DATETIME_FORMAT_2 = '%A, %B %d @ %I%p %Y' +tz_str = " -0600 UTC" +DATETIME_FORMAT = '%B %d %Y %I:%M%p %z %Z' def get_events(ps): contents = ps.xpath('.//*/ul[@class="events-list"]/li') @@ -38,12 +37,11 @@ def get_events(ps): event['title'] = c.xpath('.//div/h4/a/text()')[0] event['date'] = [month, day, str(year), c.xpath('.//div[@class="event-info"]/p/text()')[0].split(" ")[0]] event['date'] = " ".join(event['date']) - event['dateStamp'] =datetime.strptime(event['date'], DATETIME_FORMAT) + event['dateStamp'] =datetime.strptime(event['date'] +tz_str, DATETIME_FORMAT) event['link'] = c.xpath('.//div[@class="event-info"]/h4/a/@href')[0] if " presents" in event['title']: event['title'] = event['title'].split("presents")[1][1:].strip() if event['title'].startswith('.'): - print("BLAHH\n") event['title'] = event['title'][1:].strip() digitools.createBasicEvent(event, "Mu", venue) scraper.items+=1 @@ -63,4 +61,4 @@ get_events(ps) sleep(3) br.close() -digitools.updateScraper(scraper, item_count_start) \ No newline at end of file +digitools.updateScraper(scraper, item_count_start) diff --git a/Working/venues/mn.stp.GinkoCoffee.py b/Working/venues/mn.stp.GinkoCoffee.py index b9204cf..8ba63fc 100644 --- a/Working/venues/mn.stp.GinkoCoffee.py +++ b/Working/venues/mn.stp.GinkoCoffee.py @@ -22,12 +22,8 @@ venue, created = Organization.objects.get_or_create( scraper,item_count_start,virtcal = digitools.getScraper(venue, venue.website, 'msp') -event_type = "" - -# Time Signatures -tz = pytz.timezone("US/Central") -DATETIME_FORMAT_2 = '%b %d %Y %I:%M %p' -DATETIME_FORMAT = '%B %d @ %I:%M %p %Y' +tz_str = " -0600 UTC" +DATETIME_FORMAT = '%B %d @ %I:%M %p %Y %z %Z' def get_events(ps, event_type): contents = ps.xpath('.//*/article') @@ -41,15 +37,13 @@ def get_events(ps, event_type): year = int(year) + 1 event['scraper'] = scraper event['calendars'] = [scraper.calendar] - event['title'] = c.xpath('.//*/h3/a/text()')[0].replace("\n", "").replace("\t", "") + event['title'] = c.xpath('.//*/h4/a/text()')[0].replace("\n", "").replace("\t", "") event['date'] = " ".join([ dateTime, str(year)]) - event['dateStamp'] = datetime.strptime(event['date'], DATETIME_FORMAT) - event['link'] = c.xpath('.//*/h3/a/@href')[0] + event['dateStamp'] = datetime.strptime(event['date'] + tz_str, DATETIME_FORMAT) + event['link'] = c.xpath('.//*/h4/a/@href')[0] digitools.createBasicEvent(event, event_type, venue) except Exception as e: print(e) - ppr(event) - print("\n\n+++\n\n") if len(sys.argv) >= 2: arg1 = sys.argv[1] @@ -64,4 +58,4 @@ sleep(3) br.close() -digitools.updateScraper(scraper, item_count_start) \ No newline at end of file +digitools.updateScraper(scraper, item_count_start) diff --git a/Working/venues/mn.stp.SPCO.py b/Working/venues/mn.stp.SPCO.py index a40d207..aa1938c 100644 --- a/Working/venues/mn.stp.SPCO.py +++ b/Working/venues/mn.stp.SPCO.py @@ -11,7 +11,6 @@ from pprint import pprint as ppr import pytz from events.models import Organization, Scraper - import events.digitools as digitools venue, created = Organization.objects.get_or_create( @@ -23,7 +22,6 @@ venue, created = Organization.objects.get_or_create( scraper,item_count_start, virtcal = digitools.getScraper(venue, venue.website, 'msp') -# Time Signatures tz = pytz.timezone("US/Central") DATETIME_FORMAT = '%A, %B %d, %Y – %I:%M %p' diff --git a/Working/venues/wa.pdx.mississippi.py b/Working/venues/wa.pdx.mississippi.py new file mode 100644 index 0000000..ef9013c --- /dev/null +++ b/Working/venues/wa.pdx.mississippi.py @@ -0,0 +1,75 @@ +import os, sys +from datetime import datetime +from dateutil import relativedelta + +sys.path.append('/var/www/digisnaxx.ado/scrapers') +import dtss +dtss.getReady() + +from time import sleep +from pprint import pprint as ppr +import pytz + +from events.models import Organization, Scraper, Calendar, Event +import events.digitools as digitools + +tz_str = "-0800 UTC" +DATETIME_FORMAT = '%A, %B %d, %Y %I:%M %p %z %Z' +DATETIME_FORMAT_2 = '%A, %B %d, %Y %I%p %z %Z' + +venue, created = Organization.objects.get_or_create( + name="Mississippi Studios", + city="Portland", + website="https://mississippistudios.com/full-view/", + is_venue = True + ) + +scraper,item_count_start,virtcal = digitools.getScraper(venue, venue.website, 'pdx') +scraper.items = 0 +scraper.save() + +def get_events(contents, event_type): + contents = ps.xpath('.//*/div[@class="event"]/div/div[@class="event__inner"]') + i = 0 + for c in contents: + i += 1 + try: + event = {} + date = c.xpath('.//*/h5/text()')[0].replace("\n", "").replace("\t", "")#.replace("rd", "").replace("nd", "").strip() + time = c.xpath('//div/div/div[4]/p[1]/span/text()')[i].split("/")[0].replace("Doors: ", "").strip() + event['date'] = (' ').join([date, time, tz_str]) + event['date'] = (' ').join([date, time, tz_str]) + event['scraper'] = scraper + event['calendars'] = [scraper.calendar] + event['title'] = c.xpath('.//*/h2/a/text()')[0] + try: + event['dateStamp'] = datetime.strptime(event['date'], DATETIME_FORMAT) + except: + event['dateStamp'] = datetime.strptime(event['date'], DATETIME_FORMAT_2) + event['link'] = c.xpath('.//*/h2/a/@href')[0] + digitools.createBasicEvent(event, "Mu", venue) + scraper.items+=1 + except Exception as e: + print("\nError: ", e) + pass + +if len(sys.argv) >= 2: + arg1 = sys.argv[1] + br = digitools.getBrowser(arg1) +else: + print("No run_env") + br.close() + quit() + +ps = digitools.getSource(br, venue.website) +get_events(ps, "Mu") +sleep(3) + +link = venue.website + "2" +print(link) +ps = digitools.getSource(br, link) +get_events(ps, "Mu") +sleep(3) + +digitools.updateScraper(scraper, item_count_start) +br.close() diff --git a/Working/venues/wa.pdx.revolutionhall.py b/Working/venues/wa.pdx.revolutionhall.py new file mode 100644 index 0000000..3d81f38 --- /dev/null +++ b/Working/venues/wa.pdx.revolutionhall.py @@ -0,0 +1,75 @@ +import os, sys +from datetime import datetime +from dateutil import relativedelta + +sys.path.append('/var/www/digisnaxx.ado/scrapers') +import dtss +dtss.getReady() + +from time import sleep +from pprint import pprint as ppr +import pytz + +from events.models import Organization, Scraper, Calendar, Event +import events.digitools as digitools + +tz_str = "-0800 UTC" +DATETIME_FORMAT = '%a, %B %d, %Y %I:%M %p %z %Z' +DATETIME_FORMAT_2 = '%a, %B %d, %Y %I%p %z %Z' + +venue, created = Organization.objects.get_or_create( + name="Revolution Hall", + city="Portland", + website="https://www.revolutionhall.com/", + is_venue = True + ) + +scraper,item_count_start,virtcal = digitools.getScraper(venue, venue.website, 'pdx') +scraper.items = 0 +scraper.save() + +def get_events(contents, event_type, bar): + for c in contents: + try: + event = {} + date = c.xpath('.//*/span[@class="event-date--full"]/text()')[0].replace("th", "").replace("st", "").replace("rd", "").replace("nd", "").strip() + time = c.xpath('.//*/span[@class="event-doors-showtime"]/text()')[0].split("/")[0].replace("Doors: ", "").strip() + if not "Show" in time: + event['date'] = (' ').join([date, time, tz_str]) + else: + time = time.replace("Show: ", "").strip() + event['date'] = (' ').join([date, time, tz_str]) + event['scraper'] = scraper + event['calendars'] = [scraper.calendar] + event['title'] = c.xpath('.//*/div[@class="event__content"]/h3/a/text()')[0] + if bar == "Show Bar": + event['title'] = c.xpath('.//*/div[@class="event__content"]/h3/a/text()')[0] + " (Show Bar)" + try: + event['dateStamp'] = datetime.strptime(event['date'], DATETIME_FORMAT) + except: + event['dateStamp'] = datetime.strptime(event['date'], DATETIME_FORMAT_2) + event['link'] = c.xpath('.//*/div[@class="event__content"]/h3/a/@href')[0] + digitools.createBasicEvent(event, "Mu", venue) + scraper.items+=1 + print("\nSuccess\n") + except Exception as e: + print("\nError: ", e) + pass + +if len(sys.argv) >= 2: + arg1 = sys.argv[1] + br = digitools.getBrowser(arg1) +else: + print("No run_env") + br.close() + quit() + +ps = digitools.getSource(br, venue.website) +contents = ps.xpath('.//*/div[@class="event-wrapper revolution-hall"]') +get_events(contents, "Mu", "Rev Hall") +contents = ps.xpath('.//*/div[@class="event-wrapper show-bar"]') +get_events(contents, "Mu", "Show Bar") +sleep(3) + +digitools.updateScraper(scraper, item_count_start) +br.close() diff --git a/Working/venues/wa.pdx.roseland.py b/Working/venues/wa.pdx.roseland.py new file mode 100644 index 0000000..f0a13bc --- /dev/null +++ b/Working/venues/wa.pdx.roseland.py @@ -0,0 +1,68 @@ +import os, sys +from datetime import datetime +from dateutil import relativedelta + +sys.path.append('/var/www/digisnaxx.ado/scrapers') +import dtss +dtss.getReady() + +from time import sleep +from pprint import pprint as ppr +import pytz + +from events.models import Organization, Scraper, Calendar, Event +import events.digitools as digitools + +tz_str = "-0800 UTC" +DATETIME_FORMAT = '%a, %b %d %Y %I:%M%p %z %Z' +DATETIME_FORMAT_2 = '%a, %b %d %Y %I %p %z %Z' + +venue, created = Organization.objects.get_or_create( + name="Roseland Theater", + city="Portland", + website="https://roselandpdx.com/", + is_venue = True + ) + +scraper,item_count_start,virtcal = digitools.getScraper(venue, venue.website, 'pdx') +scraper.items = 0 +scraper.save() + +def get_events(ps, event_type): + contents = ps.xpath('.//*/div[@class="col-12 eventWrapper rhpSingleEvent py-4 px-0 rhp-event__single-event--list"]') + for c in contents: + try: + event = {} + date = c.xpath('.//*/div[@id="eventDate"]/text()')[0].replace("\n", "").replace("\t", "") + time = c.xpath('.//*/span[@class="font0by75 fontWeight500 lineHeight15 rhp-event__time-text--list"]/text()')[0].split(" ")[:3] + time = (" ").join(time).replace("Doors: ", "").replace("\n", "").replace("\t", "") + year = datetime.now().year + event['date'] = (' ').join([date, str(year), time, tz_str]) + event['scraper'] = scraper + event['calendars'] = [scraper.calendar] + event['title'] = c.xpath('.//*/a[@id="eventTitle"]/h2/text()')[0].replace("\n", "").replace("\t", "") + try: + event['dateStamp'] = datetime.strptime(event['date'], DATETIME_FORMAT) + except: + event['dateStamp'] = datetime.strptime(event['date'], DATETIME_FORMAT_2) + event['link'] = c.xpath('.//*/a[@id="eventTitle"]/@href')[0] + digitools.createBasicEvent(event, "Mu", venue) + scraper.items+=1 + except Exception as e: + print("\nError: ", e) + pass + +if len(sys.argv) >= 2: + arg1 = sys.argv[1] + br = digitools.getBrowser(arg1) +else: + print("No run_env") + br.close() + quit() + +ps = digitools.getSource(br, venue.website) +get_events(ps, "Mu") +sleep(3) + +digitools.updateScraper(scraper, item_count_start) +br.close() diff --git a/Working/venues/wa.pdx.roseland.py~ b/Working/venues/wa.pdx.roseland.py~ new file mode 100644 index 0000000..45050c4 --- /dev/null +++ b/Working/venues/wa.pdx.roseland.py~ @@ -0,0 +1,72 @@ +import os, sys +from datetime import datetime +from dateutil import relativedelta + +sys.path.append('/var/www/digisnaxx.ado/scrapers') +import dtss +dtss.getReady() + +from time import sleep +from pprint import pprint as ppr +import pytz + +from events.models import Organization, Scraper, Calendar, Event +import events.digitools as digitools + +tz_str = "-0800 UTC" +DATETIME_FORMAT = '%a, %b %d %Y %I:%M%p %z %Z' +DATETIME_FORMAT_2 = '%a, %b %d %Y %I %p %z %Z' + +venue, created = Organization.objects.get_or_create( + name="Roseland Theater", + city="Portland", + website="https://roselandpdx.com/", + is_venue = True + ) + +scraper,item_count_start,virtcal = digitools.getScraper(venue, venue.website, 'pdx') +scraper.items = 0 +scraper.save() + +def get_events(ps, event_type): + contents = ps.xpath('.//*/div[@class="col-12 eventWrapper rhpSingleEvent py-4 px-0 rhp-event__single-event--list"]') + for c in contents: + try: + event = {} + date = c.xpath('.//*/div[@id="eventDate"]/text()')[0].replace("\n", "").replace("\t", "") + time = c.xpath('.//*/span[@class="font0by75 fontWeight500 lineHeight15 rhp-event__time-text--list"]/text()')[0].split(" ")[:3] + time = (" ").join(time).replace("Doors: ", "").replace("\n", "").replace("\t", "") + year = datetime.now().year + event['date'] = (' ').join([date, str(year), time, tz_str]) + event['scraper'] = scraper + event['calendars'] = [scraper.calendar] + event['title'] = c.xpath('.//*/a[@id="eventTitle"]/h2/text()')[0].replace("\n", "").replace("\t", "") + try: + event['dateStamp'] = datetime.strptime(event['date'], DATETIME_FORMAT) + except: + event['dateStamp'] = datetime.strptime(event['date'], DATETIME_FORMAT_2) + event['link'] = c.xpath('.//*/a[@id="eventTitle"]/@href')[0] + digitools.createBasicEvent(event, "Mu", venue) + scraper.items+=1 + # ppr(event) + print("\nSuccess\n") + except Exception as e: + print("\nError: ", e) + # ppr(event) + # print("\n+++\n") + pass + +if len(sys.argv) >= 2: + arg1 = sys.argv[1] + br = digitools.getBrowser(arg1) +else: + print("No run_env") + br.close() + quit() + +ps = digitools.getSource(br, venue.website) +get_events(ps, "Mu") +sleep(3) + +digitools.updateScraper(scraper, item_count_start) +br.close() \ No newline at end of file diff --git a/Working/venues/wa.pdx.volcanictheater.py b/Working/venues/wa.pdx.volcanictheater.py new file mode 100644 index 0000000..fc7b898 --- /dev/null +++ b/Working/venues/wa.pdx.volcanictheater.py @@ -0,0 +1,67 @@ +import os, sys +from datetime import datetime +from dateutil import relativedelta + +sys.path.append('/var/www/digisnaxx.ado/scrapers') +import dtss +dtss.getReady() + +from time import sleep +from pprint import pprint as ppr +import pytz + +from events.models import Organization, Scraper, Calendar, Event +import events.digitools as digitools + +tz_str = "-0800 UTC" +DATETIME_FORMAT = '%b %d, %Y %I:%M %p %z %Z' +DATETIME_FORMAT_2 = '%a, %b %d %Y %I %p %z %Z' + +venue, created = Organization.objects.get_or_create( + name="Volcanic Theater", + city="Portland", + website="https://www.volcanictheatre.com/", + is_venue = True + ) + +scraper,item_count_start,virtcal = digitools.getScraper(venue, venue.website, 'pdx') +scraper.items = 0 +scraper.save() + +def get_events(ps, event_type): + contents = ps.xpath('.//*/div[@class="event-card"]') + for c in contents: + try: + event = {} + date = c.xpath('.//*/div[@class="date"]/text()')[0] + time = c.xpath('.//*/div[@class="doors-open"]/div/text()')[1] + event['date'] = (' ').join([date, time, tz_str]) + event['scraper'] = scraper + event['calendars'] = [scraper.calendar] + event['title'] = c.xpath('.//div[@class="headline"]/text()') + try: + event['dateStamp'] = datetime.strptime(event['date'], DATETIME_FORMAT) + except Exception as e: + print(e) + pass + event['link'] = c.xpath('.//a/@href') + digitools.createBasicEvent(event, "Mu", venue) + scraper.items+=1 + except Exception as e: + print("\nError: ", e) + pass + +if len(sys.argv) >= 2: + arg1 = sys.argv[1] + br = digitools.getBrowser(arg1) +else: + print("No run_env") + br.close() + quit() + +ps = digitools.getSource(br, venue.website) +get_events(ps, "Mu") +sleep(3) + +digitools.updateScraper(scraper, item_count_start) +br.close() diff --git a/scripts/run_govt.sh b/scripts/run_govt.sh index 377d73b..1821e21 100644 --- a/scripts/run_govt.sh +++ b/scripts/run_govt.sh @@ -1,7 +1,5 @@ #!/bin/bash -BASEDIR=/var/www/digisnaxx.ado/api.digisnaxx -EVENTSDIR=/var/www/digisnaxx.ado/api.digisnaxx/events SCRIPTDIR=/var/www/digisnaxx.ado/api.digisnaxx/events/scrapers/scripts GOVTDIR=/var/www/digisnaxx.ado/api.digisnaxx/events/scrapers/Working/govt @@ -14,4 +12,4 @@ done cd $SCRIPTDIR pwd -python clean_up.py \ No newline at end of file +python clean_up.py diff --git a/scripts/run_ical.sh b/scripts/run_ical.sh index 0f03c44..8e9491c 100644 --- a/scripts/run_ical.sh +++ b/scripts/run_ical.sh @@ -1,7 +1,5 @@ #!/bin/bash -BASEDIR=/var/www/digisnaxx.ado/api.digisnaxx -DJANGODIR=/var/www/digisnaxx.ado/api.digisnaxx/events SCRIPTDIR=/var/www/digisnaxx.ado/api.digisnaxx/events/scrapers/scripts ICALDIR=/var/www/digisnaxx.ado/api.digisnaxx/events/scrapers/Working/iCal @@ -13,4 +11,4 @@ do done cd $SCRIPTDIR -python clean_up.py \ No newline at end of file +python clean_up.py diff --git a/scripts/start_up.py b/scripts/start_up.py index 8c8074e..5ed0741 100644 --- a/scripts/start_up.py +++ b/scripts/start_up.py @@ -1,10 +1,9 @@ import re, os, sys from datetime import datetime, timedelta -import django -sys.path.append('../../../') -os.environ['DJANGO_SETTINGS_MODULE'] = 'config.django.local' -django.setup() +sys.path.append('/var/www/digisnaxx.ado/scrapers') +import dtss +dtss.getReady() from events.models import Event,Organization, Promo, Calendar