def import_mlb(filepath, metapath, event_source='mlb2010', geo_loc="42.63699,-71.549835", limit=100000, **kwargs): import csv import Image, ImageFont, ImageDraw from django.contrib.auth.models import User from django.db.models import signals from artist.models import ArtistProfile from event.models import Event, Venue, Attendee, Stats, recompute_event_stats from rdutils.image import get_raw_png_image, resize_in_memory, get_perfect_fit_resize_crop, remove_model_image, close, get_raw_image, str_to_file from registration.utils import copy_avatar_from_file_to_profile print "Script has been disabled to prevent accidental execution :)" return False signals.post_save.disconnect(recompute_event_stats, sender=Attendee) signals.post_delete.disconnect(recompute_event_stats, sender=Attendee) # clear old data first ''' print "Deleting stats" Stats.objects.filter(event__ext_event_source=event_source).delete() # delete existing stats Stats.objects.filter(event__ext_event_source=event_source).delete() print "Deleting events" Event.objects.filter(ext_event_source=event_source).delete() # delete existing events first print "Deleting users" User.objects.filter(first_name='MLB', last_name='Team', email__endswith='@riotvine.com').delete() # delete existing users ''' colormap = { # 'navy':'#2E2EFE', 'red': '#DD0000', } secondary_colormap = {} _ARTIST = ArtistProfile.objects.get(url='riotvine-member') _DATE_FORMAT = "%m/%d/%y" # format: 03/17/10 _TIME_FORMAT = "%H:%M:%S %p"# format: 11:05:00 AM parent, filename = os.path.split(_DEFAULT_IMAGE) profilepath = os.path.join(parent, "baseball.jpg") eventbgpath = os.path.join(parent, "baseball_background.png") # load team meta info team = {} reader = csv.reader(open(metapath, "rb")) for row in reader: print row username = row[6].replace(' ', '') team_name = row[0].strip() hashtags = ", ".join(row[5].strip().split("~")) tz = row[7].strip() # create venue venue = row[2].decode("utf-8").strip() venue_address = u'' venue_city, venue_state = row[1].decode("utf-8").strip().split(",") venue_city, venue_state = venue_city.strip(), venue_state.strip() querystring = urlencode({'q':u'"%s" %s, %s %s' % (venue[:25], venue_address, venue_city, venue_state)}) map_url = u'http://maps.google.com/?%s' % querystring vn, created = Venue.objects.get_or_create( name=venue[:255], geo_loc=geo_loc, source='mlb', defaults=dict( source='mlb', address=venue_address[:255], city=venue_city[:255], state=venue_state, zip_code=u'', venue_url=u'', map_url=map_url, ) ) # create user a, created = User.objects.get_or_create( username=username, defaults = dict( first_name='MLB', last_name='Team', email='*****@*****.**' % username.lower(), is_staff=False, is_active=True ) ) user_profile = a.get_profile() user_profile.send_reminders = False user_profile.send_favorites = False is_verified = True user_profile.save() copy_avatar_from_file_to_profile(profilepath, user_profile) team[team_name.lower()] = { 'name':team_name, 'venue':vn, 'pri-color':colormap.get(row[3].lower(), row[3]), 'sec-color':secondary_colormap.get(row[4].lower(), row[4]), 'user':user_profile, 'tz':tz, 'hashtags':hashtags, } print "Loading schedule" # load schedule description = u''' <p class="mlb"> <a href="/sports/baseball/2010/">Baseball 2010 »</a> </p> ''' reader = csv.reader(open(filepath, "rb")) num = 0 for row in reader: num += 1 print num, row dt, title, loc, ptime, mtime, ctime, etime = row # get road and home road, home = title.split(' at ') road, home = road.strip(), home.strip() roadvars = team[road.lower()] homevars = team[home.lower()] roaduser, homeuser = roadvars['user'], homevars['user'] roadcolors = roadvars['pri-color'], roadvars['sec-color'] homecolors = homevars['pri-color'], homevars['sec-color'] hashtags = homevars['hashtags'] # generate 211x211 badge raw_image_contents = None bg = Image.new("RGB", (211, 211), homecolors[1]) # background is the sec color of home team bgimg = Image.open(eventbgpath) bg.paste(bgimg, (0, 0)) t = ImageDraw.Draw(bg) # Road team name x, y = settings.SPORTS_TEAM_TEXT_START font = ImageFont.truetype(settings.SPORTS_TEAM_TEXT_FONT, settings.SPORTS_TEAM_TEXT_FONT_SIZE, encoding='unic') tx = roadvars['name'] w,h = t.textsize(tx, font=font) x = (211 - w)/2 # center align col = roadcolors[0] # (homecolors[1] == roadcolors[0]) and roadcolors[1] or roadcolors[0] t.text((x, y), tx, font=font, fill=col) # Text = at x, y = x, y + settings.SPORTS_TEAM_TEXT_FONT_SIZE + 10 font = ImageFont.truetype(settings.SPORTS_TEAM_TEXT_FONT, settings.SPORTS_TEAM_TEXT_SMALL_FONT_SIZE, encoding='unic') tx = 'at' w,h = t.textsize(tx, font=font) x = (211 - w)/2 # center align t.text((x, y), tx, font=font, fill='#333333') # Home team name x, y = x, y + settings.SPORTS_TEAM_TEXT_SMALL_FONT_SIZE + 10 font = ImageFont.truetype(settings.SPORTS_TEAM_TEXT_FONT, settings.SPORTS_TEAM_TEXT_FONT_SIZE, encoding='unic') tx = homevars['name'] w,h = t.textsize(tx, font=font) x = (211 - w)/2 # center align t.text((x, y), tx, font=font, fill=homecolors[0]) raw_image_contents = get_raw_png_image(bg) # get venue vn = homevars['venue'] location = settings.STATE_TO_LOCATION_MAP.get(vn.state.lower(), 'user-entered') city_state = u'%s|%s' % (vn.city, vn.state) location = settings.CITY_STATE_TO_LOCATION_MAP.get(city_state.lower(), location) # special cases for locations if vn.state == 'NJ': location = 'user-defined' dt = strptime(dt, _DATE_FORMAT) event_date = date(*dt[:3]) tz = homevars['tz'] if tz == 'ET': xtime = etime elif tz == 'CT': xtime = ctime elif tz == 'MT': xtime = mtime elif tz == 'PT': xtime = ptime else: xtime = etime # default timezone is ET tt = strptime(xtime.strip(), _TIME_FORMAT) h, m = tt.tm_hour, tt.tm_min if 'PM' in etime.upper() and h < 12: h = h + 12 event_time = u"%s:%s" % (h, m) title = u"%s! %s" % (title, event_date.strftime("%m/%d")) # save event ex = Event( ext_event_id="999", ext_event_source=event_source, artist=_ARTIST, creator=homeuser, description=description, is_submitted=True, is_approved=True, is_free=False, title=title[:120], url=(u"%s-%s" % (slugify(title)[:30], uuid4().hex[::4]))[:35], venue=vn, event_date=event_date, event_start_time=event_time, event_timezone=tz, hashtag=hashtags, location=location, headliner=u'', artists=u'', has_image=True, ) image_content = ContentFile(raw_image_contents) fname, ext = os.path.splitext("default.jpg") fname = u'%s%s' % (uuid4().hex[::2], ext) ex.image.save(fname, image_content, save=False) ex._create_resized_images(raw_field=None, save=False) ex.save() # favorite event for home users ex.attendee_set.get_or_create(attendee_profile=homeuser) # ex.attendee_set.get_or_create(attendee_profile=roaduser) if num > limit: return
def import_events(filepath, hashtag=u"#SXSWm #Showcase", location=u'austin', venue_city='Austin', venue_state='TX', venue_zip=u'', event_source='sxsw', geoloc="30.27,-97.74", **kwargs): from artist.models import ArtistProfile from event.models import Event, Venue from lastfm import get_artist from lastfm.fetch_events import get_raw_image _ARTIST = ArtistProfile.objects.get(url='riotvine-member') _DATE_FORMAT = "%m/%d/%Y" # format: 03/17/2010 f = open(filepath, 'r') lines = f.readlines() max = len(lines) rnum = 0 while True: if rnum >= max: break r = lines[rnum].strip().split('|') print rnum, r if r[1] == u'' and r[2] == u'' and r[3] == u'' and r[4] == u'': # venue row #1 if rnum + 1 >= max: break r2 = lines[rnum+1].strip().split('|') if r2[1] == u'' and r2[2] == u'' and r2[3] == u'' and r2[4] == u'': # venue row #2 venue = r[0] venue_address = r2[0].split(')\xc2\xa0(')[0][1:].decode('utf-8') querystring = urlencode({'q':u'%s %s, %s %s' % (venue[:25], venue_address, venue_city, venue_state)}) map_url = u'http://maps.google.com/?%s' % querystring vn, created = Venue.objects.get_or_create( name=venue[:255], geo_loc=geoloc, defaults=dict( source='user-entered', address=venue_address[:255], city=venue_city[:255], state=venue_state, zip_code=venue_zip[:12], venue_url=u'', map_url=map_url, ) ) rnum += 1 # skip this row next time around else: # event row artist_name = r[1] artist_dictionary = get_artist(artist_name) bio = artist_dictionary.get('bio', {}).get('summary', u'') img = artist_dictionary.get('img', u'') event_date = r[5] # MM/DD/YYYY dt = strptime(event_date, _DATE_FORMAT) event_date = date(*dt[:3]) event_time = r[2] # HH:MM zz" if ':' in event_time: if ' ' in event_time: # convert to 24 hour time format t, z = event_time.split(' ') h, m = t.split(':') if 'p' in z.lower() and not event_time.lower() == '12:00 p.m.': h = (int(h) + 12) % 24 event_time = u"%s:%s" % (h, m) elif event_time.lower() == '12:00 a.m.': event_time = u"00:00" event_date = event_date + timedelta(days=1) else: if int(h) <= 2 or int(h) == 12: if int(h) == 12: t = u"00:%s" % m event_date = event_date + timedelta(days=1) event_time = t else: event_time = None if not event_time: event_time = None artist_location = r[3] headliner = artist_name genre = r[4] external_url = r[6].strip() event_id = external_url.split('/')[-1] if 'no hyperlink' in external_url.lower(): external_url = u'' genre_tag = genre.replace('/', ' #') title = u"%s at %s %s #%s" % (artist_name.decode('utf-8'), vn.name.decode('utf-8'), hashtag, genre_tag) Event.objects.filter(ext_event_id=event_id, ext_event_source=event_source).delete() ex = Event( ext_event_id=event_id, ext_event_source=event_source, artist=_ARTIST, creator=_ARTIST.user_profile, description=bio, is_submitted=True, is_approved=True, title=title[:120], url=(u"%s-%s" % (slugify(title)[:30], uuid4().hex[::4]))[:35], venue=vn, event_date=event_date, event_start_time=event_time, event_timezone=u'', hashtag=u'"%s"' % headliner[:200].decode('utf-8') or u'', location=location, headliner=headliner[:200] or u'', artists=u'', has_image=bool(img), ) image_content = ContentFile(get_raw_image(img)) fname, ext = os.path.splitext("default.jpg") fname = u'%s%s' % (uuid4().hex[::2], ext) ex.image.save(fname, image_content, save=False) ex._create_resized_images(raw_field=None, save=False) ex.save() print ex, ex.ext_event_id rnum += 1
def import_parties(filepath, hashtag, location=u'austin', venue_city='Austin', venue_state='TX', venue_zip=u'', event_source='sxsw-party', geoloc="30.27,-97.74", **kwargs): from artist.models import ArtistProfile from event.models import Event, Venue from lastfm import get_artist from lastfm.fetch_events import get_raw_image parent, filename = os.path.split(_DEFAULT_IMAGE) party_images = { '#SXSWi #Party'.lower():os.path.join(parent, "sxswi_party.jpg"), '#SXSWm #Party'.lower():os.path.join(parent, "sxswm_party.jpg"), } _ARTIST = ArtistProfile.objects.get(url='riotvine-member') _DATE_FORMAT = "%m/%d/%Y" # format: 03/17/2010 f = open(filepath, 'r') f.readline() # skip first line -- Date|Actual Date|Event|Venue|Band|Free|Free Drinks|Map|Details|Link| lines = f.readlines() max = len(lines) rnum = 0 img = party_images.get(hashtag.lower(), None) has_image = True if not img: has_image = False img = _DEFAULT_IMAGE f = open(img, "rb") raw_image_contents = f.read() f.close() while True: if rnum >= max: break r = lines[rnum].strip().split('|') print rnum, r venue = r[3].strip().decode("utf-8").strip() venue_address = u'' querystring = urlencode({'q':u'"%s" %s, %s %s' % (venue[:25], venue_address, venue_city, venue_state)}) map_url = u'http://maps.google.com/?%s' % querystring vn, created = Venue.objects.get_or_create( name=venue[:255], geo_loc=geoloc, defaults=dict( source='user-entered', address=venue_address[:255], city=venue_city[:255], state=venue_state, zip_code=venue_zip[:12], venue_url=u'', map_url=map_url, ) ) event_name = r[2] event_date = r[1] # MM/DD/YYYY if 'err' in event_date.lower(): rnum += 1 continue dt = strptime(event_date, _DATE_FORMAT) event_date = date(*dt[:3]) event_time = None headliner = u'' is_free = r[5] and "y" in r[5].lower() free_drinks = r[6] and "y" in r[6].lower() band = r[4] description = u"" if band and 'tba' not in band.lower(): description = u'<p class="band party party-band">%s</p>' % band.decode("utf-8") if free_drinks: description = description + u"\n<p><strong>Free Drinks!</strong></p>\n" external_url = r[9].strip() if 'no hyperlink' in external_url.lower(): external_url = u'' event_id = u'' else: x = urlparse.urlsplit(external_url) qx = x.query qx_dict = parse_qs(qx) qx_dict.pop("appSession", None) # remove session id from URL to make it work event_id = qx_dict.get("RecordID")[0] new_dict = {} for k, v in qx_dict.iteritems(): new_dict[k]=v[0] qx = urlencode(new_dict) external_url = urlparse.urlunsplit((x.scheme, x.netloc, x.path, qx, x.fragment)) description = description + u'\n<p><a href="%s">More details »</a></p>\n' % external_url title = u"%s at %s %s" % (event_name.decode('utf-8'), vn.name.decode('utf-8'), hashtag) Event.objects.filter(ext_event_id=event_id, ext_event_source=event_source).delete() ex = Event( ext_event_id=event_id, ext_event_source=event_source, artist=_ARTIST, creator=_ARTIST.user_profile, description=description, is_submitted=True, is_approved=True, is_free=is_free, title=title[:120], url=(u"%s-%s" % (slugify(title)[:30], uuid4().hex[::4]))[:35], venue=vn, event_date=event_date, event_start_time=event_time, event_timezone=u'', hashtag=u'', location=location, headliner=u'', artists=u'', has_image=has_image, ) image_content = ContentFile(raw_image_contents) fname, ext = os.path.splitext("default.jpg") fname = u'%s%s' % (uuid4().hex[::2], ext) ex.image.save(fname, image_content, save=False) ex._create_resized_images(raw_field=None, save=False) ex.save() print ex, ex.ext_event_id rnum += 1
def insert(events, loc): """Iterate through event list and insert into DB""" n = 0 type_errors = 0 for e in events: try: lfm_id = e['id'] except TypeError, te: _log.warn("Skipped TypeError on badly formatted event data: %s" % e) type_errors += 1 continue existing_event = is_event_in_db(lfm_id) if existing_event and not _UPDATE_EXISTING: continue # skip events that already exist in DB image, image_content = None, None image = get_image_url(e['image']) if not image: continue # We can't work without a badge image event_date = e['startDate'] # format: Tue, 07 Jul 2009 dtx = event_date.split(' ') event_date = ' '.join(dtx[:4]) # discard any time component dt = time.strptime(event_date, _DATE_FORMAT) event_date = date(*dt[:3]) if event_date < _TODAY: continue # Ignore past events venue_url = e['venue']['url'] if not venue_url: continue # Don't accept bad venues title = e['title'] website = e['website'] desc = e['description'] headliner = e['artists'].get('headliner', '') artist_list = set([a for a in e['artists']['artist'] if len(a) > 1 and a != headliner]) if not artist_list: if headliner: artist_list = [] else: artist_list = [title] full_list = list(artist_list) if headliner: full_list.insert(0, headliner) csv_artist_list = full_list and u",".join(full_list) or u"" quoted_list = [u'"%s"' % a for a in full_list] hashtag = u",".join(quoted_list) art_html = [u"<li>%s</li>" % a for a in artist_list] if headliner: art_html.insert(0, u'<li class="headliner">%s</li>' % headliner) art_html = u"<h4 class='artist_title'>Artists</h4><ul class='artist_list'>%s</ul>\n" % u"\n".join(art_html) desc = u"%s%s" % (art_html, desc) venue = e['venue']['name'].strip() venue_address = e['venue']['location']['street'].strip() venue_city = e['venue']['location']['city'].strip() venue_zip = e['venue']['location']['postalcode'].strip() if headliner and venue and headliner == title: # Change title format to: # headliner at venue name! mm/dd mm_dd = event_date.strftime("%m/%d") title = u"%s at %s! %s" % (headliner, venue, mm_dd) if len(title) > 120: title = u"%s.." % title[:118] lat, lng = None, None source = '' if e['venue']['location'].get("geo:point", {}).get("geo:lat", None): lat = e['venue']['location']["geo:point"]["geo:lat"] lng = e['venue']['location']["geo:point"]["geo:long"] lat = str(round(float(lat), 3)) lng = str(round(float(lng), 3)) source = u"%s,%s" % (lat, lng) tz = e['venue']['location'].get('timezone', '') event_time = e.get('startTime', "21:00") has_start_time = 'startTime' in e image_content = ContentFile(get_raw_image(image)) fname, ext = os.path.splitext(image) fname = u'%s%s' % (uuid4().hex[::2], ext) vn, created = Venue.objects.get_or_create( name=venue[:255], geo_loc=source, defaults=dict( source='last-fm', address=venue_address[:255], city=venue_city[:255], zip_code=venue_zip[:12], venue_url=venue_url[:255], ) ) if False and not created and vn.source != 'last-fm': # Update empty fields dirty = False if not vn.address: vn.address = venue_address[:255] dirty = True if not vn.city: vn.city = venue_city[:255] dirty = True if not vn.zip_code: vn.zip_code = venue_zip[:12] dirty = True if not vn.venue_url: vn.venue_url = venue_url[:255] dirty = True if dirty: vn.save() if existing_event: # only update title on this existing event existing_event.title = title[:120] super(Event, existing_event).save() _x.debug("Updated title for %s", existing_event) else: user_profile = get_artist_user_profile(headliner) ex = Event( lastfm_id = lfm_id, artist=_ARTIST, creator=user_profile, is_submitted=True, is_approved=True, title=title[:120], url=(u"%s-%s" % (slugify(title)[:30], uuid4().hex[::4]))[:35], description=desc, venue=vn, event_date=event_date, event_start_time=event_time, event_timezone=tz, hashtag=u'', # hashtag[:250], # don't fetch tweets for last.fm generated events (3/23/2010) location=loc, headliner=headliner[:200] or u'', artists=csv_artist_list[:250] or u'', ext_event_source='last.fm', ) ex._has_start_time = ex.event_start_time and has_start_time ey = try_merge(ex) if ey: # new event is a duplicate; hide it ex.is_deleted = True _x.warn("Merged %s into %s", ex, ey) ex.image.save(fname, image_content, save=False) ex._create_resized_images(raw_field=None, save=False) ex.save() ex.attendee_set.get_or_create(attendee_profile=user_profile) _x.debug("Saved %s", ex) n += 1
def import_events(filepath, hashtag=u"#SXSWm #Showcase", location=u'austin', venue_city='Austin', venue_state='TX', venue_zip=u'', event_source='sxsw', geoloc="30.27,-97.74", **kwargs): from artist.models import ArtistProfile from event.models import Event, Venue from lastfm import get_artist from lastfm.fetch_events import get_raw_image _ARTIST = ArtistProfile.objects.get(url='riotvine-member') _DATE_FORMAT = "%m/%d/%Y" # format: 03/17/2010 f = open(filepath, 'r') lines = f.readlines() max = len(lines) rnum = 0 while True: if rnum >= max: break r = lines[rnum].strip().split('|') print rnum, r if r[1] == u'' and r[2] == u'' and r[3] == u'' and r[4] == u'': # venue row #1 if rnum + 1 >= max: break r2 = lines[rnum + 1].strip().split('|') if r2[1] == u'' and r2[2] == u'' and r2[3] == u'' and r2[4] == u'': # venue row #2 venue = r[0] venue_address = r2[0].split(')\xc2\xa0(')[0][1:].decode( 'utf-8') querystring = urlencode({ 'q': u'%s %s, %s %s' % (venue[:25], venue_address, venue_city, venue_state) }) map_url = u'http://maps.google.com/?%s' % querystring vn, created = Venue.objects.get_or_create( name=venue[:255], geo_loc=geoloc, defaults=dict( source='user-entered', address=venue_address[:255], city=venue_city[:255], state=venue_state, zip_code=venue_zip[:12], venue_url=u'', map_url=map_url, )) rnum += 1 # skip this row next time around else: # event row artist_name = r[1] artist_dictionary = get_artist(artist_name) bio = artist_dictionary.get('bio', {}).get('summary', u'') img = artist_dictionary.get('img', u'') event_date = r[5] # MM/DD/YYYY dt = strptime(event_date, _DATE_FORMAT) event_date = date(*dt[:3]) event_time = r[2] # HH:MM zz" if ':' in event_time: if ' ' in event_time: # convert to 24 hour time format t, z = event_time.split(' ') h, m = t.split(':') if 'p' in z.lower( ) and not event_time.lower() == '12:00 p.m.': h = (int(h) + 12) % 24 event_time = u"%s:%s" % (h, m) elif event_time.lower() == '12:00 a.m.': event_time = u"00:00" event_date = event_date + timedelta(days=1) else: if int(h) <= 2 or int(h) == 12: if int(h) == 12: t = u"00:%s" % m event_date = event_date + timedelta(days=1) event_time = t else: event_time = None if not event_time: event_time = None artist_location = r[3] headliner = artist_name genre = r[4] external_url = r[6].strip() event_id = external_url.split('/')[-1] if 'no hyperlink' in external_url.lower(): external_url = u'' genre_tag = genre.replace('/', ' #') title = u"%s at %s %s #%s" % (artist_name.decode('utf-8'), vn.name.decode('utf-8'), hashtag, genre_tag) Event.objects.filter(ext_event_id=event_id, ext_event_source=event_source).delete() ex = Event( ext_event_id=event_id, ext_event_source=event_source, artist=_ARTIST, creator=_ARTIST.user_profile, description=bio, is_submitted=True, is_approved=True, title=title[:120], url=(u"%s-%s" % (slugify(title)[:30], uuid4().hex[::4]))[:35], venue=vn, event_date=event_date, event_start_time=event_time, event_timezone=u'', hashtag=u'"%s"' % headliner[:200].decode('utf-8') or u'', location=location, headliner=headliner[:200] or u'', artists=u'', has_image=bool(img), ) image_content = ContentFile(get_raw_image(img)) fname, ext = os.path.splitext("default.jpg") fname = u'%s%s' % (uuid4().hex[::2], ext) ex.image.save(fname, image_content, save=False) ex._create_resized_images(raw_field=None, save=False) ex.save() print ex, ex.ext_event_id rnum += 1
def import_mlb(filepath, metapath, event_source='mlb2010', geo_loc="42.63699,-71.549835", limit=100000, **kwargs): import csv import Image, ImageFont, ImageDraw from django.contrib.auth.models import User from django.db.models import signals from artist.models import ArtistProfile from event.models import Event, Venue, Attendee, Stats, recompute_event_stats from rdutils.image import get_raw_png_image, resize_in_memory, get_perfect_fit_resize_crop, remove_model_image, close, get_raw_image, str_to_file from registration.utils import copy_avatar_from_file_to_profile print "Script has been disabled to prevent accidental execution :)" return False signals.post_save.disconnect(recompute_event_stats, sender=Attendee) signals.post_delete.disconnect(recompute_event_stats, sender=Attendee) # clear old data first ''' print "Deleting stats" Stats.objects.filter(event__ext_event_source=event_source).delete() # delete existing stats Stats.objects.filter(event__ext_event_source=event_source).delete() print "Deleting events" Event.objects.filter(ext_event_source=event_source).delete() # delete existing events first print "Deleting users" User.objects.filter(first_name='MLB', last_name='Team', email__endswith='@riotvine.com').delete() # delete existing users ''' colormap = { # 'navy':'#2E2EFE', 'red': '#DD0000', } secondary_colormap = {} _ARTIST = ArtistProfile.objects.get(url='riotvine-member') _DATE_FORMAT = "%m/%d/%y" # format: 03/17/10 _TIME_FORMAT = "%H:%M:%S %p" # format: 11:05:00 AM parent, filename = os.path.split(_DEFAULT_IMAGE) profilepath = os.path.join(parent, "baseball.jpg") eventbgpath = os.path.join(parent, "baseball_background.png") # load team meta info team = {} reader = csv.reader(open(metapath, "rb")) for row in reader: print row username = row[6].replace(' ', '') team_name = row[0].strip() hashtags = ", ".join(row[5].strip().split("~")) tz = row[7].strip() # create venue venue = row[2].decode("utf-8").strip() venue_address = u'' venue_city, venue_state = row[1].decode("utf-8").strip().split(",") venue_city, venue_state = venue_city.strip(), venue_state.strip() querystring = urlencode({ 'q': u'"%s" %s, %s %s' % (venue[:25], venue_address, venue_city, venue_state) }) map_url = u'http://maps.google.com/?%s' % querystring vn, created = Venue.objects.get_or_create( name=venue[:255], geo_loc=geo_loc, source='mlb', defaults=dict( source='mlb', address=venue_address[:255], city=venue_city[:255], state=venue_state, zip_code=u'', venue_url=u'', map_url=map_url, )) # create user a, created = User.objects.get_or_create( username=username, defaults=dict(first_name='MLB', last_name='Team', email='*****@*****.**' % username.lower(), is_staff=False, is_active=True)) user_profile = a.get_profile() user_profile.send_reminders = False user_profile.send_favorites = False is_verified = True user_profile.save() copy_avatar_from_file_to_profile(profilepath, user_profile) team[team_name.lower()] = { 'name': team_name, 'venue': vn, 'pri-color': colormap.get(row[3].lower(), row[3]), 'sec-color': secondary_colormap.get(row[4].lower(), row[4]), 'user': user_profile, 'tz': tz, 'hashtags': hashtags, } print "Loading schedule" # load schedule description = u''' <p class="mlb"> <a href="/sports/baseball/2010/">Baseball 2010 »</a> </p> ''' reader = csv.reader(open(filepath, "rb")) num = 0 for row in reader: num += 1 print num, row dt, title, loc, ptime, mtime, ctime, etime = row # get road and home road, home = title.split(' at ') road, home = road.strip(), home.strip() roadvars = team[road.lower()] homevars = team[home.lower()] roaduser, homeuser = roadvars['user'], homevars['user'] roadcolors = roadvars['pri-color'], roadvars['sec-color'] homecolors = homevars['pri-color'], homevars['sec-color'] hashtags = homevars['hashtags'] # generate 211x211 badge raw_image_contents = None bg = Image.new( "RGB", (211, 211), homecolors[1]) # background is the sec color of home team bgimg = Image.open(eventbgpath) bg.paste(bgimg, (0, 0)) t = ImageDraw.Draw(bg) # Road team name x, y = settings.SPORTS_TEAM_TEXT_START font = ImageFont.truetype(settings.SPORTS_TEAM_TEXT_FONT, settings.SPORTS_TEAM_TEXT_FONT_SIZE, encoding='unic') tx = roadvars['name'] w, h = t.textsize(tx, font=font) x = (211 - w) / 2 # center align col = roadcolors[ 0] # (homecolors[1] == roadcolors[0]) and roadcolors[1] or roadcolors[0] t.text((x, y), tx, font=font, fill=col) # Text = at x, y = x, y + settings.SPORTS_TEAM_TEXT_FONT_SIZE + 10 font = ImageFont.truetype(settings.SPORTS_TEAM_TEXT_FONT, settings.SPORTS_TEAM_TEXT_SMALL_FONT_SIZE, encoding='unic') tx = 'at' w, h = t.textsize(tx, font=font) x = (211 - w) / 2 # center align t.text((x, y), tx, font=font, fill='#333333') # Home team name x, y = x, y + settings.SPORTS_TEAM_TEXT_SMALL_FONT_SIZE + 10 font = ImageFont.truetype(settings.SPORTS_TEAM_TEXT_FONT, settings.SPORTS_TEAM_TEXT_FONT_SIZE, encoding='unic') tx = homevars['name'] w, h = t.textsize(tx, font=font) x = (211 - w) / 2 # center align t.text((x, y), tx, font=font, fill=homecolors[0]) raw_image_contents = get_raw_png_image(bg) # get venue vn = homevars['venue'] location = settings.STATE_TO_LOCATION_MAP.get(vn.state.lower(), 'user-entered') city_state = u'%s|%s' % (vn.city, vn.state) location = settings.CITY_STATE_TO_LOCATION_MAP.get( city_state.lower(), location) # special cases for locations if vn.state == 'NJ': location = 'user-defined' dt = strptime(dt, _DATE_FORMAT) event_date = date(*dt[:3]) tz = homevars['tz'] if tz == 'ET': xtime = etime elif tz == 'CT': xtime = ctime elif tz == 'MT': xtime = mtime elif tz == 'PT': xtime = ptime else: xtime = etime # default timezone is ET tt = strptime(xtime.strip(), _TIME_FORMAT) h, m = tt.tm_hour, tt.tm_min if 'PM' in etime.upper() and h < 12: h = h + 12 event_time = u"%s:%s" % (h, m) title = u"%s! %s" % (title, event_date.strftime("%m/%d")) # save event ex = Event( ext_event_id="999", ext_event_source=event_source, artist=_ARTIST, creator=homeuser, description=description, is_submitted=True, is_approved=True, is_free=False, title=title[:120], url=(u"%s-%s" % (slugify(title)[:30], uuid4().hex[::4]))[:35], venue=vn, event_date=event_date, event_start_time=event_time, event_timezone=tz, hashtag=hashtags, location=location, headliner=u'', artists=u'', has_image=True, ) image_content = ContentFile(raw_image_contents) fname, ext = os.path.splitext("default.jpg") fname = u'%s%s' % (uuid4().hex[::2], ext) ex.image.save(fname, image_content, save=False) ex._create_resized_images(raw_field=None, save=False) ex.save() # favorite event for home users ex.attendee_set.get_or_create(attendee_profile=homeuser) # ex.attendee_set.get_or_create(attendee_profile=roaduser) if num > limit: return
def import_parties(filepath, hashtag, location=u'austin', venue_city='Austin', venue_state='TX', venue_zip=u'', event_source='sxsw-party', geoloc="30.27,-97.74", **kwargs): from artist.models import ArtistProfile from event.models import Event, Venue from lastfm import get_artist from lastfm.fetch_events import get_raw_image parent, filename = os.path.split(_DEFAULT_IMAGE) party_images = { '#SXSWi #Party'.lower(): os.path.join(parent, "sxswi_party.jpg"), '#SXSWm #Party'.lower(): os.path.join(parent, "sxswm_party.jpg"), } _ARTIST = ArtistProfile.objects.get(url='riotvine-member') _DATE_FORMAT = "%m/%d/%Y" # format: 03/17/2010 f = open(filepath, 'r') f.readline( ) # skip first line -- Date|Actual Date|Event|Venue|Band|Free|Free Drinks|Map|Details|Link| lines = f.readlines() max = len(lines) rnum = 0 img = party_images.get(hashtag.lower(), None) has_image = True if not img: has_image = False img = _DEFAULT_IMAGE f = open(img, "rb") raw_image_contents = f.read() f.close() while True: if rnum >= max: break r = lines[rnum].strip().split('|') print rnum, r venue = r[3].strip().decode("utf-8").strip() venue_address = u'' querystring = urlencode({ 'q': u'"%s" %s, %s %s' % (venue[:25], venue_address, venue_city, venue_state) }) map_url = u'http://maps.google.com/?%s' % querystring vn, created = Venue.objects.get_or_create( name=venue[:255], geo_loc=geoloc, defaults=dict( source='user-entered', address=venue_address[:255], city=venue_city[:255], state=venue_state, zip_code=venue_zip[:12], venue_url=u'', map_url=map_url, )) event_name = r[2] event_date = r[1] # MM/DD/YYYY if 'err' in event_date.lower(): rnum += 1 continue dt = strptime(event_date, _DATE_FORMAT) event_date = date(*dt[:3]) event_time = None headliner = u'' is_free = r[5] and "y" in r[5].lower() free_drinks = r[6] and "y" in r[6].lower() band = r[4] description = u"" if band and 'tba' not in band.lower(): description = u'<p class="band party party-band">%s</p>' % band.decode( "utf-8") if free_drinks: description = description + u"\n<p><strong>Free Drinks!</strong></p>\n" external_url = r[9].strip() if 'no hyperlink' in external_url.lower(): external_url = u'' event_id = u'' else: x = urlparse.urlsplit(external_url) qx = x.query qx_dict = parse_qs(qx) qx_dict.pop("appSession", None) # remove session id from URL to make it work event_id = qx_dict.get("RecordID")[0] new_dict = {} for k, v in qx_dict.iteritems(): new_dict[k] = v[0] qx = urlencode(new_dict) external_url = urlparse.urlunsplit( (x.scheme, x.netloc, x.path, qx, x.fragment)) description = description + u'\n<p><a href="%s">More details »</a></p>\n' % external_url title = u"%s at %s %s" % (event_name.decode('utf-8'), vn.name.decode('utf-8'), hashtag) Event.objects.filter(ext_event_id=event_id, ext_event_source=event_source).delete() ex = Event( ext_event_id=event_id, ext_event_source=event_source, artist=_ARTIST, creator=_ARTIST.user_profile, description=description, is_submitted=True, is_approved=True, is_free=is_free, title=title[:120], url=(u"%s-%s" % (slugify(title)[:30], uuid4().hex[::4]))[:35], venue=vn, event_date=event_date, event_start_time=event_time, event_timezone=u'', hashtag=u'', location=location, headliner=u'', artists=u'', has_image=has_image, ) image_content = ContentFile(raw_image_contents) fname, ext = os.path.splitext("default.jpg") fname = u'%s%s' % (uuid4().hex[::2], ext) ex.image.save(fname, image_content, save=False) ex._create_resized_images(raw_field=None, save=False) ex.save() print ex, ex.ext_event_id rnum += 1