카테고리 보관물: 밥약

밥약(5)

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

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

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

뿌듯

밥약(4)

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

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

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

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

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

밥약 (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. 시간표 비교 알고리즘(공강 시간 반환)

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