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 |
---|