라프텔 API 뜯어보기 1

아카·2020년 6월 14일
3

라프텔 API(비공식)

목록 보기
1/8

이 포스팅의 정보는 공식적이지 않습니다.

라프텔(http://laftel.net)이라는, 일종의 애니메이션판 넷플릭스 서비스가 있다. 한국에서 정식으로 들어온 애니메이션은 거의 다 있다고 보면 된다(물론 넷플릭스 독점 등의 독점작은 없다). 최근에는 애니메이션을 들여오는 것에 그치지 않고, 다양한 애니메이션을 제작하기도 하는 듯 하다. 또한, 타 방송사(애니플러스, 애니맥스 플러스 등)에서 들여오지 않은 애니메이션을 들여오기도 하고, 이제는 구할 수 없는 예전 더빙 방영 애니메이션 등을 서비스 내에서 제공하기도 한다.

서비스의 컨셉 등은 마음에 들지만, 사이트 내에는 여러가지 필수적인 기능이 없어 불편하기도 하다. 예를 들자면, 애니메이션 1기, 2기, 3기가 있다고 치면 이것을 "시리즈"로 묶을 뿐이라 1기를 본 이후 2기로 넘어가기가 상대적으로 불편하고, 프리퀄 작품도 "시리즈"로 묶여버리는 문제점이 있다.

내가 보고 싶은 건 "어떤 과학의 초전자포"지만 "어떤 시리즈"로 묶여버려서 원치않은 시리즈인 어떤 마술의 금서목록, 어떤 과학의 일방통행등이 검색된다.

API에도 중요한 문제점이 있다. request header(데이터 요청시에 포함되는 헤더)가 반드시 "laftel": "TeJava"를 포함해야 한다.

라프텔 API 제작자가 데자와를 좋아했나보다.

이번 포스팅에서는 다음 포스팅의 분기별 애니메이션 분석 시스템을 구현하기에 앞서, 라프텔 API를 실제로 실행해보고, API 구조에 대해서 대략적으로 파악해 보자.

API 명세 파악

당연히 라프텔이 API 명세 문서를 나에게 제공해 줄 리 없으니, API를 불러보자.
라프텔 홈페이지에서 아무 애니메이션이나 들어가서, 네트워크를 분석하면 대충 아래의 API를 얻어낼 수 있다.

GET https://laftel.net/api/v1.0/items/16004/detail/

여기서 16004는 "어떤 과학의 초전자포 더빙"의 id다. 이 API Call을 실제로 실행하는 커맨드를 터미널에서 실행해보자. 혹시 윈도우를 쓴다면, 이 사이트 혹은 POSTMAN을 설치해 위의 API request를 실행해 보자.

현재 라프텔 API는 header에 "leftel" : "TeJava"만 포함하면 어떤 요청이든 올바른 요청으로 인식하기 때문에, 크로미움 등의 귀찮은 방법을 사용할 필요가 없다.

curl https://laftel.net/api/v1.0/items/16004/detail/ -H "laftel: Tejava"

결과값을 보고 어떤 항목이 어떤 값을 나타내는지 대충 짐작해보자.

  • id : 이 애니메이션의 DB primary key(기본키)로 추정된다.
  • created, modified: 이 애니메이션이 DB에 생성되었을때, DB에서 수정되었을 때의 Date로 보인다.
  • animation_info: 이 애니메이션의 정보를 포함하는 JSON data일 것이다.
  • author: 작가로 추정된다.
  • author_item: 작가의 item? 다른 API 결과에서 추정하면, 작가의 다른 작품들을 리스트로 나타내는 것 같다.
  • avg_rating: 라프텔은 애니메이션의 평점을 매기는 기능을 가지고 있기 때문에, 이것은 이 애니메이션의 평균 평점을 나타낼 것이다.
  • awards: 이 애니메이션이 라프텔 내에서 수상한 일종의 타이틀들을 모아놓은 리스트로 추정된다.
  • comics_info: 이 애니메이션의 원작 만화을 나타내는 항목일 것이다. 라프텔은 예전에 도서도 취급했었기 때문에, 그것의 흔적일 수도 있다.
  • content: 이 애니메이션의 설명을 나타내는 짧은 글이다.
  • content_rating: 이 애니메이션이 몇세 이용가인지 나타낸다.
  • created: DB에 생성된 날짜로 추정된다.
  • has_free_episode: true면 이 애니메이션의 첫 화는 무료로 제공하고, 아니면 무료로 제공하지 않는다는 뜻으로 보인다. 실제로 몇몇 애니메이션(유유백서(더빙)등은 첫 화도 무료로 볼 수 없는 경우가 있는데, 그것을 나타내는 값이 아닐까 추정된다.)
  • illustrator: 일러스트레이터로 추정된다. 특이한 건, 사실은 "카마치 카즈마"는 일러스트레이터가 아니고 "후유카와 모토이"가 일러스트레이터라는 것이다.
  • img: 이 애니메이션를 나타내는 이미지를 나타낸다.

  • is_adult: 이 애니메이션이 성인용인지를 나타내는 값으로 보인다.
  • is_ending: 이 애니메이션이 방영중인지, 아니면 완결되었는지를 나타내는 값으로 보인다. "이 애니메이션"이 기준이기 때문에, "이 시리즈"가 완결되었는지를 나타내지 않는 점에 주의.
  • lightnovel_info: 이 애니메이션의 원작 라이트노벨을 나타내는 값으로 보인다.
  • main_tag: 이 애니메이션이 가지고 있는 태그들. "치유물" "학원물" 등을 나타내려고 쓰는 값인 것 같다.
  • mediamix_item: 이 애니메이션의 미디어 믹스들.
  • meta_info: 메타 정보. 자세히는 모르므로 패스.
  • name: 애니메이션의 제목.
  • related_item: 라프텔은 기본적으로 이 애니메이션과 비슷한 애니메이션을 추천해주는데, 이 추천된 애니메이션의 정보를 리스트로 반환하는 것으로 보인다.
  • resolution: 이 애니메이션이 어떤 해상도로 제공되는지를 표현한 값으로 보인다.
  • series_item: 이 애니메이션이 포함된 시리즈 전부를 반환하는 것으로 보인다.
  • type: 이 컨텐츠의 타입을 나타낸다. "comics" "animation"등이 있다.
  • url: 이 컨텐츠의 url을 나타낸다. 옛날에 라프텔이 웹툰도 다뤘었는데, 그 잔재로 보인다. 이 컨텐츠가 웹툰 컨텐츠일 경우, 그 웹툰에 접근할 수 있는 url을 제공한다.
  • viewable: 이 값이 false일 경우 이 컨텐츠는 검색으로 접근할 수 없다.
  • webtoon_info: url과 동일할 것으로 추정.

우리가 필요로 하는 것

분기별로 애니메이션을 정리하기 위해서는, 내가 가져온 이 애니메이션의 id이름, 그리고 방영시기를 알 필요가 있다. 위의 API 명세 추측에 따르면, 어떤 항목이 id이름을 나타내는지는 쉽게 알 수 있다.

방영시기의 경우는 불명인데, 저 animation_info의 값을 뜯어보면 "air_year_quarter"라는 속성이 있는 것을 알 수 있다. 이 속성의 값이 방영 시기를 나타내는 것으로 보인다. 왜냐하면, 2020년 2분기에 방영된 "프린세스 커넥트! Re:Dive"의 경우에는 이 값이 "2020년 2분기"로 되어있기 때문이다. 2분기와 3분기에 이어서 방영할 경우, 이 값이 "|"로 이어져서 "2020년 2분기 | 2020년 3분기"꼴이 되는 것 같다.
즉, 우리는 ["name"]과 ["animation_info"]["air_year_quarter"]를 중점적으로 다뤄야 한다는 것을 알 수 있다.

다음 포스팅

2017년부터 2020년에 걸쳐서 매 분기마다 정식 방영된 애니메이션을 분류해보고, 애니메이션 시장의 추세를 알아보도록 하자. 물론 정식 분석가가 아니니 만큼, 재미로만 알아보도록 하자.

profile
코딩한량.

8개의 댓글

comment-user-thumbnail
2020년 10월 18일

해보니까 Response [404] 뜨면서 오류나는데 막혔나요?

1개의 답글
comment-user-thumbnail
2021년 1월 8일

혹시 특정애니이름으로 검색하는건 어떻게 해야하나요? 아이디말고 제목으로요..

1개의 답글
comment-user-thumbnail
2021년 2월 5일

js 로 laftel api에 요청 하면 CORS 정책 때문에 데이터를 못받아오는대 해결방법있나요?

1개의 답글