글쓴이 보관물: 승욱리

밥약(5)

이번주는 밥약의 프론트 디자인을 진행하였습니다.

디자이너 안 선생님이 기존 제작하신 디자인 소스코드를 참고하여 진행하였습니다. 디자이너 안 선생님께 감사인사 드립니다.

마지막 사진인 타임테이블 제작에 좀 고생 했지만, 데이터를 삽입하면 동적으로 잘 동작합니다.

뿌듯

밥약(4)

다른 일이 바빠서 미루다가 다시 제작하게 되었습니다.

웹으로 제작하기위해 프론트 디자인을 만들어 봤습니다.

깔끔하지 않나요? 네 저도 알고 있어요

간단하게 Python Flask를 이용해서 만들어 보았네요

다음에는 시간표를 자동으로 만드는 코드를 제작하고 디자인해서 올리도록 하겠습니다

2022년 예비창업패키지 서류 준비

2021년 생애최초 청년창업 지원사업을 졸업 후 후속 지원 사업인 예비창업패키지 준비하고 있었습니다. 2월 말 2022년 예비창업패키지 지원 공고 메일을 받고 미뤄온 사업계획서를 이제 준비하게 되었습니다.

예비창업패키지 준비를 미루고 있다 이번 지원 사업에서 사업계획서 목차가 변경이 된 것을 확인하였습니다. 미뤄온 저 자신을 반성하면서 변경된 항목에 맞게 서류를 작성하였습니다.

17일 까지 작성한 서류를 계속 읽어보고 수정하여 제출할 예정입니다.

이거 제출하면 5월까진 쉰다 휴

MiscThings 공모전 준비

아이슬란드 상위 동아리인 MiscThings의 각종 활동을 준비하기 위해 서류 작업 및 초기 활동을 정리하였습니다.

현재 계획하고 있는 활동 중 아래 3가지의 활동을 준비하였습니다.

  • 예비창업패키지 준비(~3.17)
    • 사업계획서 작성을 위한 내용 취합 및 정리용 Notion 생성
    • 2021년 생애최초예비창업 졸업생으로써 후속 과제 지원 준비
  • 2022년 1학기 도전학기
    • 22학년도 1학기 학기가 시작되어 도전학기 1주차 활동을 실시
    • 원활한 활동을 위해 노션을 생성하여 활동
  • 토이프로젝트_밥약
    • 교내 캡스톤 공모전에 출전하기 위해 과제 제안서 작성.

밥약 (3)

에브리타임에서 시간표를 불러오는 알고리즘을 조금 개선 하였습니다.

파이썬으로 제작하였고 먼저 에브리타임의 시간표를 XML 형식으로 파싱해주는 코드는 다음과 같습니다.

def get_timetable(path):
    xml = requests.post(
        "https://api.everytime.kr/find/timetable/table/friend",
        data={
            "identifier": path,
            "friendInfo": 'true'
        },
        headers={
            "Accept": "*/*",
            "Connection": "keep-alive",
            "Pragma": "no-cache",
            "Cache-Control": "no-cache",
            "Content-Type": "application/x-www-form-urlencoded; charset=UTF-8",
            "Host": "api.everytime.kr",
            "Origin": "https://everytime.kr",
            "Referer": "https://everytime.kr/",
            "User-Agent": "Mozilla/5.0 (Macintosh; Intel Mac OS X 10_15_7) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/93.0.4577.63 Safari/537.36"
        }).text
    soup = BeautifulSoup(xml, 'lxml')
    data_list = soup.find_all('data')
    return data_list

Request 를 이용하여 에브리타임 API에 요청하면 에브리타임의 시간표 URL 에서 시간표만 반환합니다. 반환된 시간에서 시간 정보만 가져올 수 있도록 다시 리스트로 반환 하여 temp 리스트에 넣어둡니다.

def extract_time_data(data_list):
    for i in data_list:
    return time_list.append([int(i['day']),int(i['starttime']),int(i['endtime'])])

반환된 시간표 정보들을 이용하여 빈 시간을 가져 와야 함으로 빈 배열을 생성하여 임시로 지정합니다.

TIME_TABLE_ARRAY = [[0 for i in range(0,288)] for i in range(0,5)]

빈 배열의 시간표와 추출한 시간표를 이용하여 빈 배열에 시간표 시간을 추가하여 빈 시간을 확인할 수 있도록 합니다.

for time in time_list:
    for i in time:
        for y in range(i[1], i[2]):
            TIME_TABLE_ARRAY[i[0]][y] += 1

TABLE_ARRAY 배열에서 0이면 서로의 시간이 빈 시간이며 1 이상이면 겹치는 시간 입니다. 전체적으로 시간을 반환하는 코드는 아래와 같습니다.

def extract_time_data(data_list):
    for i in data_list:
    return time_list.append([int(i['day']),int(i['starttime']),int(i['endtime'])])

def get_timetable(path):
    xml = requests.post(
        "https://api.everytime.kr/find/timetable/table/friend",
        data={
            "identifier": path,
            "friendInfo": 'true'
        },
        headers={
            "Accept": "*/*",
            "Connection": "keep-alive",
            "Pragma": "no-cache",
            "Cache-Control": "no-cache",
            "Content-Type": "application/x-www-form-urlencoded; charset=UTF-8",
            "Host": "api.everytime.kr",
            "Origin": "https://everytime.kr",
            "Referer": "https://everytime.kr/",
            "User-Agent": "Mozilla/5.0 (Macintosh; Intel Mac OS X 10_15_7) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/93.0.4577.63 Safari/537.36"
        }).text
    soup = BeautifulSoup(xml, 'lxml')
    data_list = soup.find_all('data')
    return data_list

time_list = []
table_id_list = ['','',''] 
for table_id in table_id_list:
    time_list.append(extract_time_data(get_timetable(table_id)))

TIME_TABLE_ARRAY= [[0 for i in range(0,288)] for i in range(0,5)]

for time in time_list:
    for i in time:
        for y in range(i[1], i[2]):
            TIME_TABLE_ARRAY[i[0]][y] += 1

for day in range(5):
    test = TIME_TABLE_ARRAY[day][108:216] # 09:00 ~ 18:00
    empty_time = []
    for index, value in enumerate(test):
        if value < 1:
            empty_time.append(index)

    increment = 5
    idx = empty_time[0]
    result = []
    for i in range(0, len(empty_time) - 1):
        if empty_time[i+1] - empty_time[i] == 1:
            increment += 5
        else:
            result.append([idx, increment])
            increment = 5
            idx = empty_time[i+1]
    result.append([idx, increment])

중간에 의미없는 리스트 배열이 있는거 같아 다음주는 조금더 개선해 보고자 합니다.

안건우 선생님 헬프 개선 “해줘”

밥약 (2)

에브리타임 시간표를 기반으로 여러 시간표를 비교해서 공강 시간을 알려주는 프로젝트입니다.

지난 게시글에서 밥약을 만들기 위해서 “시간표 비교 알고리즘(공강 시간 반환)”을 해결해야 한다고 하였습니다.

파이썬 Request 라이브러리를 이용하여 에브리타임 시간표를 파싱 하고 BeautifulSoup를 이용하여 원하는 시간표 값을 파싱 하였습니다.

시간표 비교를 위해 빈 배열의 시간을 만들고 파싱한 시간표를 대입하여 공강 시간을 추출하였습니다.

현재 기능적으로 공강 시간은 추출되나 효율적인 코드 제작을 위해 검토하고 개선할 계획입니다. 이후 카카오톡에 적용하여 시범 서비스할 예정입니다.

밥약 (1)

에브리타임 시간표를 기반으로 여러 시간표를 비교해서 공강 시간을 알려주는 프로젝트 입니다.

대학생활에서는 사람들마다 다 다른 시간표로 대학생활을 하고 있습니다. 그래서 서로 점심을 먹거나 약속을 잡을때 시간잡기가 어렵습니다. 파이썬 공부를 위해 에브리타임 시간표를 분석하여 서로의 공강시간을 알려주는 프로젝트를 진행 하고자 합니다.

구상하고 있는 밥약의 기능은 다음과 같습니다..

  1. 로그인 기능으로 자신의 시간표를 저장해야함
  2. 비로그인 기능으로 단순 시간표 기능 제공
  3. 여러명의 시간표를 넣어 공강시간을 표시
  4. 비교 기록 저장

현재 에브리타임 시간표를 파싱하는 기능은 제작하였습니다. 하지만 밥약을 만들기 위해서 해결해야 할 가장 큰 문제가 있습니다.

  1. 시간표 비교 알고리즘(공강 시간 반환)

일단 시작하는 단계이니 조금더 정리하여 다뤄보도록 하겠습니다.