wolfyflutter

netflix trending now [netflix] [info] [official api]

Jun 5th, 2025 (edited)
332
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
JavaScript 4.20 KB | Source Code | 0 0
  1. /*
  2. judul       : gatau
  3. fungsi      : buat skrep JUDUL film ama sedikit metadata yg lagi trending di netflix
  4. base        : https://www.netflix.com/id
  5. last update : 8 juli 2025, 13:00
  6. note        : gw saranin result nya di cache ajah, soalnya
  7.               sekali fetch itu ukurannya bisa 3 mb
  8.               mungkin kasih cache 30 menitan, makek fs ajah.
  9.               atau suka suka kamuu.. bikin logic sendiri :v
  10.               oh ya bisa ubah religion id ama english, ubah"
  11.               ajah tuh path url nya. yg sementara gw makek id
  12.               btw sorry kode gw style nya single function terus T^T
  13. by          : wolep
  14.  
  15. */
  16.  
  17. const netflixTrending = async () => {
  18.   const religion = [
  19.     "/id",
  20.     "/id-en"
  21.   ]
  22.   const netflixUrl = "https://www.netflix.com" + religion[0] // ganti ke 1 kalau mau yang english :v
  23.   const headers = {
  24.     "accept": "text/html,application/xhtml+xml,application/xml;q=0.9,image/avif,image/webp,image/apng,*/*;q=0.8,application/signed-exchange;v=b3;q=0.7",
  25.     "accept-encoding": "gzip, deflate, br, zstd",
  26.     "accept-language": "en-GB,en;q=0.9,en-US;q=0.8",
  27.     "cache-control": "no-cache",
  28.     "pragma": "no-cache",
  29.     "priority": "u=0, i",
  30.     "sec-ch-ua": "\"Not)A;Brand\";v=\"8\", \"Chromium\";v=\"138\", \"Microsoft Edge\";v=\"138\"",
  31.     "sec-ch-ua-mobile": "?0",
  32.     "sec-ch-ua-model": "\"\"",
  33.     "sec-ch-ua-platform": "\"Windows\"",
  34.     "sec-ch-ua-platform-version": "\"15.0.0\"",
  35.     "sec-fetch-dest": "document",
  36.     "sec-fetch-mode": "navigate",
  37.     "sec-fetch-site": "none",
  38.     "sec-fetch-user": "?1",
  39.     "upgrade-insecure-requests": "1",
  40.     "user-agent": "Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/138.0.0.0 Safari/537.36 Edg/138.0.0.0"
  41.   }
  42.  
  43.   const response = await fetch(netflixUrl, { headers })
  44.   if (!response.ok) throw Error(`waduh, request nya enggak ok bro! ${response.status} ${response.statusText}\nnih isinya\n${await response.text()}`)
  45.  
  46.   const html = await response.text()
  47.  
  48.   // boleh di hapus commented code nya yg dibawah ini
  49.   // const FILE_PATH = "./netflix.html"
  50.   // fs.writeFileSync(FILE_PATH, html)
  51.   // const html = fs.readFileSync(FILE_PATH, { encoding: "utf-8" })
  52.  
  53.   const jsonString = html.match(/reactContext = (.*?);/)?.[1]
  54.   if (!jsonString) throw Error(`tidak menemukan data pada netflix`)
  55.  
  56.   const cleaned = jsonString.replace(/\\x([0-9A-Fa-f]{2})/g, (_, hex) =>
  57.     String.fromCharCode(parseInt(hex, 16)))
  58.  
  59.   const json = JSON.parse(cleaned) // lu bisa langsung return nih json value, liat dah tuh bejibunnya json :v
  60.  
  61.   // atau lu pakek kode di bawah yang sudah gw bikin buat lu pakek UwU
  62.   const movieAndShow = Object.entries(json.models.graphql.data).filter(v =>
  63.     !v?.[1]?.__typename.match(/Genre|Query/))
  64.  
  65.   const result = movieAndShow.map(([_, v]) => {
  66.     const genreList = v.coreGenres.edges.map(v => v.node.__ref)
  67.     const mapped = {
  68.       title: v.title,
  69.       latestYear: v.latestYear,
  70.       videoId: v.videoId,
  71.       shortSynopsis: v.shortSynopsis,
  72.       contentAdvisory: v.contentAdvisory.certificationValue,
  73.       genre: genreList.map(v => json.models.graphql.data[v].name).join(", "),
  74.       type: v.__typename,
  75.       url: netflixUrl + "/title/" + v.videoId,
  76.       poster: v["artwork({\"params\":{\"artworkType\":\"BOXSHOT\",\"dimension\":{\"width\":200},\"features\":{\"performNewContentCheck\":false,\"suppressTop10Badge\":true},\"format\":\"JPG\"}})"]?.url
  77.  
  78.     }
  79.     return mapped
  80.   })
  81.  
  82.   return result // tada :v
  83. }
  84.  
  85.  
  86. // cara pakai
  87. netflixTrending()
  88.   .then(console.log)
  89.   .catch(err => console.log(err))
  90.  
  91. /* result
  92. [
  93.   {
  94.     title: 'Pengantin Setan',
  95.     latestYear: 2025,
  96.     videoId: 82023282,
  97.     shortSynopsis: 'Terjebak dalam pernikahan yang sulit, Echa terhibur oleh kehadiran sesosok pria di mimpinya. Namun, ketenangan berubah jadi teror saat pria itu datang sebagai roh jahat.',
  98.     contentAdvisory: '18+',
  99.     genre: 'Horor',
  100.     type: 'Movie',
  101.     url: 'https://www.netflix.com/id/title/82023282',
  102.     poster: 'https://occ-0-6710-64.1.nflxso.net/dnm/api/v6/mAcAr9TxZIVbINe88xb3Teg5_OA/AAAABdIIaadoJcHZEubq1c80hrLbS1nZATmZZ2veItUREEy6Nw5w9MifA-EdIDgJybj2lHlrklULC0QDY1dwbcod-70kmAXq797O8Tw.jpg?r=5f6'
  103.   },
  104.   .... (lagi 9 items objek)
  105. ]
  106.   */
Tags: netflix
Add Comment
Please, Sign In to add comment