Main Menu
Menu

Show posts

This section allows you to view all posts made by this member. Note that you can only see posts made in areas you currently have access to.

Show posts Menu

Messages - HarpB

#1
Filled or still accepting? What's the status...
#2
Get shazam if u are able to afford a smartphone
#3
In case you use Guidebook on your smartphone, here are guides you can download using the Redeem Code.
Fanime 2013: yjg6wo2k
Clockwork Alchemy 2013: 29tsb4ap
#4
I have no idea.  I was reading their pocket book and saw it by surprise.
I did scrapper that I used last year. It still worked, so I use it to make a schedule for Guidebook. Here is the CSV: http://wikisend.com/download/299700/FAnime_2013.csv

Scrapper:

from pyquery.pyquery import PyQuery
from datetime import datetime, timedelta, time
import re

def parse_time(hour_time):
    try:
        return datetime.strptime(hour_time, '%I:%M%p').time()
    except ValueError:
        return datetime.strptime(hour_time, '%I%p').time()

def parse_fanime_sessions(unix_time):
    url = 'http://m.fanime.com/index.php?grid=%d' % unix_time
    dom = PyQuery(url)
    event_datetime = datetime.fromtimestamp(unix_time)
    date = event_datetime.date()
    time_start = event_datetime.time()
    time_end = (event_datetime + timedelta(hours = 1)).time()

    row_pattern = r'table.grid tr'
    col_pattern = r'td'
    rows = dom(row_pattern)
    schedule = []
    MIDNIGHT_TIME = time(0, 0, 0)
    for row in rows:
        py_row = PyQuery(row)
        cols = py_row(col_pattern)
        for index in range(len(cols)):
            td = PyQuery(cols[index])
            css_class = td.attr.class_
#             clean_text = td.text().replace(' ', ' ')
            clean_room_and_track = td.text().replace(u'\xa0', ' ')
            room_and_track_re = re.search('([^\(]+)\s\(([^\)]+)', clean_room_and_track)
            if css_class == 'track':
                schedule += [{
                    'date': date,
                    'title': None,
                    'room': room_and_track_re.group(2),
                    'track': room_and_track_re.group(1),
                    'time_start': time_start,
                    'time_end': time_end,
                }]
            elif css_class in ['skip', 'partial']:
                #===============================================================================
                # Case
                # continues from 11:30am, begins at 12:30pm  => start_time: 11:30am
                # ends at 12:30pm, runs until 2:30pm        => end_time: 12:30pm
                # [all day]    =>    start_time = end_time = 0:00am
                #===============================================================================
                event = schedule[-1]
                if clean_room_and_track == '[all day]':
                    event['time_start'] = MIDNIGHT_TIME
                    event['time_end'] = MIDNIGHT_TIME
                elif 'continues from' in clean_room_and_track or 'begins at' in clean_room_and_track:
                    text_parts = clean_room_and_track.split()
                    event['time_start'] = parse_time(text_parts[-1])
                elif 'ends at' in clean_room_and_track or 'runs until' in clean_room_and_track:
                    text_parts = clean_room_and_track.split()
                    event['time_end'] = parse_time(text_parts[-1])
                else:
                    raise Exception("UNHANDLED CASE")
            else:
                schedule[-1]['title'] = clean_room_and_track

    return schedule

def get_schedule(start_time, end_time):
    current_unix_time = start_time
    schedule = []
    while current_unix_time < end_time:
        sessions = parse_fanime_sessions(current_unix_time)
#         for item in schedule:
#             pprint(item, indent=4)
        schedule += sessions
        current_unix_time += (60 * 60)
    return schedule

def print_guidebook_csv(schedule, filename = None):
    if filename:
        file_handle = open(filename, 'w')
    else:
        file_handle = None

    CSV_HEADER = 'Session Title,Date,Time Start,Time End,Room/Location,Schedule Track (Optional),Description (Optional)'
    if file_handle:
        file_handle.write("{}\n".format(CSV_HEADER))
    else:
        print CSV_HEADER
    for session in schedule:
#         print session
        session['title'] = session['title'].replace('"', '')
        session['track'] = session['track'].replace('Tabletop Gaming Tournaments', 'Tabletop Gaming')
        csv_line = '"%(title)s", %(date)s, %(time_start)s, %(time_end)s, %(room)s, %(track)s, ""' % session
        if file_handle:
            file_handle.write("{}\n".format(csv_line))
        else:
            print csv_line

    if file_handle:
        file_handle.close()

if __name__ == '__main__':
    #===========================================================================
    # Fanime 2013 (1369350000 to 1369695600) ( Thursday 5pm - Monday 4pm)
    # 1369688400 - Monday, 2pm
    # 1369692000 - Monday, 3pm
    #===========================================================================
    # Thursdaay 6pm - Midnight
    ONE_HOUR = 60 * 60
    SIX_HOUR = ONE_HOUR * 6
    schedule = []

    # THURSDAY
    THURSDAY_6PM = 1369357200
    THURSDAY_11PM = THURSDAY_6PM + SIX_HOUR - ONE_HOUR
    print '%d - %d ' % (THURSDAY_6PM, THURSDAY_11PM)
    schedule += get_schedule(THURSDAY_6PM, THURSDAY_11PM)

    # FRIDAY
    FRIDAY_MIDNIGHT = THURSDAY_11PM + ONE_HOUR
    FRIDAY_11PM = FRIDAY_MIDNIGHT + (SIX_HOUR * 4) - ONE_HOUR
    print '%d - %d ' % (FRIDAY_MIDNIGHT, FRIDAY_11PM)
    schedule += get_schedule(FRIDAY_MIDNIGHT, FRIDAY_11PM)

    # SATURDAY
    SATURDAY_MIDNIGHT = FRIDAY_11PM + ONE_HOUR
    SATURDAY_11PM = SATURDAY_MIDNIGHT + (SIX_HOUR * 4) - ONE_HOUR
    print '%d - %d ' % (SATURDAY_MIDNIGHT, SATURDAY_11PM)
    schedule += get_schedule(SATURDAY_MIDNIGHT, SATURDAY_11PM)

    # SUNDAY
    SUNDAY_MIDNIGHT = SATURDAY_11PM + ONE_HOUR
    SUNDAY_11PM = SUNDAY_MIDNIGHT + (SIX_HOUR * 4) - ONE_HOUR
    print '%d - %d ' % (SUNDAY_MIDNIGHT, SUNDAY_11PM)
    schedule += get_schedule(SUNDAY_MIDNIGHT, SUNDAY_11PM)

    # MONDAY
    MONDAY_MIDNIGHT = SUNDAY_11PM + ONE_HOUR
    MONDAY_3PM = 1369692000
    print '%d - %d ' % (MONDAY_MIDNIGHT, MONDAY_3PM)
    schedule += get_schedule(MONDAY_MIDNIGHT, MONDAY_3PM)

    filename = 'Fanime_2013.csv'
    print_guidebook_csv(schedule, filename)
#5
Not-interactive as your, but it has more stuff:
Mobile: http://m.fanime.com/
Desktop: http://apps.fanime.com/2013/schedule/grid.php?width=1200px
#6
is there going to be an online version?
#7
General Convention Discussion / Re: FanimeCon App
May 21, 2013, 09:56:44 AM
My only requests are, make it possible to create my own calendar or share the feed, so I can create a guidebook for myself :D
#8
General Convention Discussion / Re: FanimeCon App
May 20, 2013, 09:39:03 AM
Quote from: Jeimizu on May 20, 2013, 07:57:34 AM
It works on my phone, and it's not worth the download. All the info could be in a pdf, and that would be a lot less than the 18.75 mb this takes up on my phone.

If people want to do a schedule, us Google Calender. It's free and you can use it collaboratively.
It's the matter of convenience. Creating schedule with google calendar would require much more time for an indvidual than you just click an icon in the app. Browsing through pdf is cumbersome for me.
#9
General Convention Discussion / Re: FanimeCon App
May 20, 2013, 12:13:28 AM
Quote from: ewu on May 19, 2013, 09:58:11 PM
guidebook charge cons money....that's money away from programming, like a few thousand....it was a balance...
I took your comment into consideration and looked for alternative. I found bloodhound and made a guide for Clockwork Alchemy 2013 (since their schedule is online).
You can try it by downloading https://play.google.com/store/apps/details?id=com.bloodhound.android.client&hl=en , open app and then search for Clockwork Alchemy 2013. I am using Android 4.2 smartphone.
OR, try it in browser: http://bloodhound.com/webapp/#events/86954
#10
General Convention Discussion / Re: FanimeCon App
May 19, 2013, 09:25:14 PM
That app is good, but it is missing the feature to create a schedule. For me, purpose of mobile app is to plan out my adventure at the con. Last year, I created http://guidebook.com/ for Fanime 2012 and I will probably end up doing the same, this year, once the schedule is available online. Unless, FanimeCon be gracious to add the feature to create a schedule in their app :D
#11
If I can get name of the videos, I could try to find them online or maybe on AMV.org. YOu can always just host it on a free host, such as rapidshare.com or mediafire.com
#12
Hotel and Facilities / Re: Parking refund?
June 03, 2012, 10:40:12 PM
I parked on Sunday and left on Monday afternoon. The machine said it charged me $20, but I have not see any charges in my account so far.
I am guessing that maybe they had their payment system disabled on Monday.
#13
what are considered the good seats? I came in at 6:45pm and found seats in 4th row from the front and half of the row was empty. I don't understand what specific seats people are standing in line for.
#14
I created a guidebook version of the fanime schedule. Get the app at http://guidebook.com/
1. Open app => go to "Download Guide" => click on "Redeem Code".
2. Enter following Preview code: y79oixfs

Enjoy :)
#15
I want to create a GuideBook version of the schedule. PDF is not usable format because it is hard to scrap the data.
If I could get an excel file with the schedule, it would make things so easier.

In the past, I have hard time keeping track of panels to attend, so I am looking for a mobile solution.
#16
If they provide a html version, I can easily write a small program to write an excel version. PDF version is not easy to work with for scrapping data.
#17
bollucks. Did not get in.
I shall be waving into the room with my face pressed against the window.
#18
The benefit of mobile vs. paper is the ease of keeping track of your schedule and being able to much more easily find an event to attend at any given. Even more importantly, it is reminder factor so that you don't forget to attend something.
#19
has the place for thirsday meetup been decided?
#20
We did had a Dalek at the Con :p