home chevron_right src chevron_right surah-search.js
code

surah-search.js

JavaScript 2.11 KB 85 baris visibility 6 views
open_in_new
src/surah-search.js
/*
  base: https://quran.nu.or.id
  auth: dann
  cret: sel-19-mei-26
  note: jangan hapus cr
*/

(async () => {
  async function getSurahData(slug) {
    const axios = (await import("axios")).default

    try {
      const rscPayload = encodeURIComponent(JSON.stringify([
        "",
        {
          children: [
            ["slug", slug, "d"],
            {
              children: [`__PAGE__?{"slug":"${slug}"}`, {}]
            }
          ]
        },
        null,
        null,
        true
      ]))

      const { data } = await axios.get(`https://quran.nu.or.id/${slug}`, {
        params: {
          _rsc: 'k8ba4'
        },
        headers: {
          'RSC': '1',
          'Next-Router-State-Tree': rscPayload,
          'Next-Url': `/${slug}`,
          'User-Agent': 'Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/124.0.0.0 Safari/537.36'
        },
        responseType: 'text'
      })

      const result = {
        creator: "dann",
        info: {},
        verses: []
      }

      const surahMatch = data.match(/"name":"([^"]+)","slug":"([^"]+)","translate":"([^"]+)","type":"([^"]+)","verse_count":(\d+),"juz_id":(\d+)/)
      
      if (surahMatch) {
        result.info = {
          namaSurah: surahMatch[1],
          slug: surahMatch[2],
          terjemahan: surahMatch[3],
          tipe: surahMatch[4],
          jumlahAyat: parseInt(surahMatch[5]),
          juz: parseInt(surahMatch[6])
        }
      }

      const verseMatches = data.matchAll(/"transliteration":"([^"]+)","text":"([^"]+)","translation_id":"([^"]+)"/g)
      
      for (const match of verseMatches) {
        result.verses.push({
          arab: match[2],
          latin: match[1],
          terjemahan: match[3]
        })
      }

      return { status: true, data: result }

    } catch (e) {
      return { status: false, creator: "dann", error: e.message }
    }
  }

  const targetSlug = "al-falaq"
  const output = await getSurahData(targetSlug)

  if (output.status) {
    return m.reply(JSON.stringify(output.data, null, 2))
  } else {
    return m.reply(JSON.stringify(output, null, 2))
  }
})()
link

Direct URL

check Disalin!