Ejemplo n.º 1
0
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&nbsp;&raquo;</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
Ejemplo n.º 2
0
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
Ejemplo n.º 3
0
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&nbsp;&raquo;</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
Ejemplo n.º 4
0
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
Ejemplo n.º 5
0
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
Ejemplo n.º 6
0
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&nbsp;&raquo;</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
Ejemplo n.º 7
0
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&nbsp;&raquo;</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