ABOUT ME

-

Today
-
Yesterday
-
Total
-
  • 교내 SW 아이디어 대회 [3] 버그 패치 및 저장 구현
    프로그래밍/개발 2018. 6. 20. 00:47

    버그 패치

    'DPR LIVE'의 'Playlist'로 검색하면 검색 결과가 아예 나오지 않는 것을 확인했다.

    API에 보내고 받는 응답을 체크해봤지만 계속 KeyError가 났는데, 디버깅 결과 검색 결과에 유튜브 플레이리스트 항목이 포함되어 있어서 나는 에러였다는 것을 알아냈다.

    일반 동영상은 videoId에 키가 있는 반면 플레이리스트는 playlistId로 나오기 때문이였다.

    video_data_list = []
        for idx in range(results):
            try:
                video_data = []
                # 비디오 id, 제목, 채널, 썸네일 순 리스트
                video = data['items'][idx]
                video_data.append(str(video['id']['videoId']))
                #   (생략)
                video_data_list.append(video_data)
            except:
                continue
        return video_data_list
    

    위 코드처럼 for문 밖에 있던 try, except문을 안으로 옮겨줬다.

    저번에는 에러가 나면 그냥 함수가 None을 반환해서 에러 처리를 하도록 했었다면 이번에는 에러가 난 항목(일반 동영상이 아니라 플레이리스트인 항목)을 건너뛰고 탐색한다.

    패치하고 다시 테스트하자 잘 작동하는 것을 확인할 수 있었다.

    비정상적인 접근 및 검색결과 없음을 띄워주는 부분 역시 약간 수정해 주었다.

    저장 구현

    간단하게 시연만 하면 되니까 굳이 DB를 구축할 필요성이 없어 보여서 결국 파일을 사용하기로 했다.

    플레이리스트에 곡 추가

    사용자가 검색결과 리스트의 추가 버튼을 누르면 서버의 /add/<videoid>로 리디렉션되고, 파일에 videoid가 기록된 후 성공 메세지와 함께 다시 /로 돌아가면서 플레이리스트에 곡을 추가할 수 있다.

    플레이리스트 조회 및 재생

    videoid로 곡의 정보를 조회해야 하므로 get_video_data() 함수를 새로 만들었다. 해당 함수는 videoid를 인수로 받아 유튜브 API를 이용해 해당 동영상의 정보를 가져온다. 다행히도 응답받는 JSON 키가 search_youtube()에 썼던 것과 거의 비슷하여 크게 삽질할 필요는 없었다.

    자세히는 생각하지 않았지만 조회는 먼저 파일에서 videoid를 읽은 뒤 get_video_data()로 구한 정보를 순서대로 리스트에 넣어서 템플릿에 전달하면 될 것이고, 재생은 유튜브 공식 플레이어를 달아주면 될 것이다.

    조회와 재생 부분은 내일부터 슬슬 작업해야겠다.

    댓글

Designed by Tistory