[Obsidian] 한국어 영화정보 불러오기

2024. 8. 26. 23:33 from Etc

 

Obsidian의 Templater 플러그인을 이용해서 불러오는방법.

 

1. Templater 플러그인 설치

2. Templater 설정 제일 상단에 템플릿 경로 정해주기.

3. 해당경로에 새 노트를 만들어 아래 내용을 작성하기.

 

ex: movie.md

<%*
const apiKey = "API키"; // TMDb에서 발급받은 API 키를 입력하세요.
const movieQuery = tp.file.title; // 현재 노트의 제목을 검색 쿼리로 사용합니다.
const language = "ko-KR"; // 한국어로 검색합니다.

// 1. 영화 검색 API 호출
const searchUrl = `https://api.themoviedb.org/3/search/movie?api_key=${apiKey}&query=${encodeURIComponent(movieQuery)}&language=${language}`;

try {
  const searchResponse = await fetch(searchUrl, { method: "GET" });

  if (!searchResponse.ok) {
    throw new Error(`검색 요청 실패: ${searchResponse.statusText}`);
  }

  const searchData = await searchResponse.json();
  
  if (searchData.results.length === 0) {
    tR += "해당 영화 정보를 찾을 수 없습니다.";
    return;
  }

  const movie = searchData.results[0];
  const movieId = movie.id;

  // 2. 영화 출연자 및 감독 정보 API 호출
  const creditsUrl = `https://api.themoviedb.org/3/movie/${movieId}/credits?api_key=${apiKey}&language=${language}`;
  const creditsResponse = await fetch(creditsUrl, { method: "GET" });

  if (!creditsResponse.ok) {
    throw new Error(`출연자 요청 실패: ${creditsResponse.statusText}`);
  }

  const creditsData = await creditsResponse.json();
  const directors = creditsData.crew.filter(crewMember => crewMember.job === "Director").map(director => director.name).join(", ");
  const cast = creditsData.cast.slice(0, 5).map(actor => actor.name).join(", "); // 상위 5명만

  // 3. 영화 상세 정보 API 호출
  const movieDetailsUrl = `https://api.themoviedb.org/3/movie/${movieId}?api_key=${apiKey}&language=${language}`;
  const movieDetailsResponse = await fetch(movieDetailsUrl, { method: "GET" });

  if (!movieDetailsResponse.ok) {
    throw new Error(`상세 정보 요청 실패: ${movieDetailsResponse.statusText}`);
  }

  const movieDetails = await movieDetailsResponse.json();
  const genres = movieDetails.genres.map(genre => genre.name).join(", ");
  const runtime = movieDetails.runtime; // 런타임(분 단위)

  // 본문 내용 작성
  tR += `---\n`;
  tR += `개봉일: ${movie.release_date}\n`;
  tR += `장르: [${genres}]\n`;
  tR += `런타임: ${runtime} 분\n`;
  tR += `감독: [${directors}]\n`;
  tR += `출연자: [${cast}]\n`;
  tR += `TMBD link : https://www.themoviedb.org/movie/${movieId}?language=ko-KR\n`;
  tR += `---\n\n`;
  tR += `![포스터|400](https://image.tmdb.org/t/p/w500${movie.poster_path})\n\n`;
  tR += `>[!소개]\n ${movie.overview.replaceAll('\n\n','\n')}\n\n`;
  tR += `## 📝 감상\n\n`;
} catch (error) {
  tR += `오류 발생: ${error.message}`;
}
%>

 

4. TMDB의 api를 발급받아 첫째줄 수정해주기. (https://www.themoviedb.org/settings/api)

5. 새 노트의 제목에 검색하고 싶은 영화 제목을 적어주고 리본에서 Templater 아이콘을 클릭해 위에서 만든 템플릿을 선택.

 

 

 

 

TV프로그램 검색은 별도 API라서 같은 과정으로 TV.md 파일을 만들어주면 된다.

<%*
const apiKey = "API 키"; // TMDb에서 발급받은 API 키를 입력하세요.
const tvQuery = tp.file.title; // 현재 노트의 제목을 검색 쿼리로 사용합니다.
const language = "ko-KR"; // 한국어로 검색합니다.

// 1. TV 프로그램 검색 API 호출
const searchUrl = `https://api.themoviedb.org/3/search/tv?api_key=${apiKey}&query=${encodeURIComponent(tvQuery)}&language=${language}`;

try {
  const searchResponse = await fetch(searchUrl, { method: "GET" });

  if (!searchResponse.ok) {
    throw new Error(`검색 요청 실패: ${searchResponse.statusText}`);
  }

  const searchData = await searchResponse.json();
  
  if (searchData.results.length === 0) {
    tR += "해당 TV 프로그램 정보를 찾을 수 없습니다.";
    return;
  }

  const tvShow = searchData.results[0];
  const tvId = tvShow.id;

  // 2. TV 프로그램 출연자 및 제작자 정보 API 호출
  const creditsUrl = `https://api.themoviedb.org/3/tv/${tvId}/credits?api_key=${apiKey}&language=${language}`;
  const creditsResponse = await fetch(creditsUrl, { method: "GET" });

  if (!creditsResponse.ok) {
    throw new Error(`출연자 요청 실패: ${creditsResponse.statusText}`);
  }

  const creditsData = await creditsResponse.json();
  const creators = creditsData.crew.filter(crewMember => crewMember.job === "Creator").map(creator => creator.name).join(", ");
  const cast = creditsData.cast.slice(0, 5).map(actor => actor.name).join(", "); // 상위 5명만

  // 3. TV 프로그램 상세 정보 API 호출
  const tvDetailsUrl = `https://api.themoviedb.org/3/tv/${tvId}?api_key=${apiKey}&language=${language}`;
  const tvDetailsResponse = await fetch(tvDetailsUrl, { method: "GET" });

  if (!tvDetailsResponse.ok) {
    throw new Error(`상세 정보 요청 실패: ${tvDetailsResponse.statusText}`);
  }

  const tvDetails = await tvDetailsResponse.json();
  const genres = tvDetails.genres.map(genre => genre.name).join(", ");
  const networks = tvDetails.networks.map(network => network.name).join(", ");

  // 본문 내용 작성
  tR += `---\n`;
  tR += `방영시작: ${tvDetails.first_air_date}\n`;
  tR += `장르: [${genres}]\n`;
  tR += `방송사: ${networks}\n`;
  tR += `출연진: [${cast}]\n`;
  tR += `TMBD link: https://www.themoviedb.org/tv/${tvId}?language=ko-KR\n`;
  tR += `---\n\n`;
  tR += `![포스터|400](https://image.tmdb.org/t/p/w500${tvShow.poster_path})\n\n`;
  tR += `>[!소개]\n ${tvShow.overview.replaceAll('\n\n','\n')}\n\n`;
  tR += `## 📝 감상\n\n`;
  
} catch (error) {
  tR += `오류 발생: ${error.message}`;
}
%>

'Etc' 카테고리의 다른 글

[Plex] Plex 음악 전용 클라이언트 Plexamp  (0) 2019.03.25
Posted by Huninn :