UNPKG

@myno_21/imdb-scraper

Version:

Get imdb information easily & quickly.

45 lines (44 loc) 2.02 kB
import got from "got"; import cheerio from "cheerio"; import { intToString, getReleaseDate } from "../common/index.js"; async function getShow(id) { const baseURL = `https://www.imdb.com/title/${id}`; const request = await got(baseURL); const page = request.body; const $ = cheerio.load(page); const data = $("script#__NEXT_DATA__").html(); const jsonData = JSON.parse(data); const mainData = jsonData.props.pageProps.mainColumnData; const endYear = jsonData.props.pageProps.aboveTheFoldData?.releaseYear?.endYear; const title = jsonData.props.pageProps.aboveTheFoldData.originalTitleText.text; const description = jsonData.props.pageProps.aboveTheFoldData.plot.plotText.plainText; const releaseDateObject = jsonData.props.pageProps.aboveTheFoldData .releaseDate; const releaseDate = getReleaseDate(releaseDateObject); const runtime = jsonData.props.pageProps.aboveTheFoldData.runtime.displayableProperty.value .plainText; const IMDB_RATING = jsonData.props.pageProps.aboveTheFoldData.ratingsSummary.aggregateRating; const popularity = jsonData?.props?.pageProps?.aboveTheFoldData?.meterRanking?.currentRank || 0; const popularityRanking = intToString(popularity); const genres = []; jsonData.props.pageProps.aboveTheFoldData.genres.genres.map((g) => genres.push(g.text)); const reviews = intToString(jsonData?.props?.pageProps?.aboveTheFoldData?.reviews?.total); const imageURL = jsonData?.props?.pageProps?.aboveTheFoldData.primaryImage.url; const returnObject = { title, imageURL, description, aired: releaseDate, end: endYear, duration: runtime, episodes: mainData?.episodes?.episodes?.total, seasons: mainData?.episodes?.seasons?.length, imdbRating: IMDB_RATING, popularity: popularityRanking, genres, reviews, }; return returnObject; } export default getShow;