fix yandere

This commit is contained in:
skidoodle 2023-09-16 23:15:55 +02:00
parent 159cc3a2b6
commit cb4ea60dfc
13 changed files with 2859 additions and 337 deletions

View file

@ -4,19 +4,19 @@ import '@/styles/globals.css'
import Head from 'next/head'
const inter = Inter({
subsets: ['latin'],
variable: '--font-inter',
subsets: ['latin'],
variable: '--font-inter',
})
export default function App({ Component, pageProps }: AppProps) {
return (
<>
<Head>
<title>Érettségi kereső</title>
</Head>
<main className={`${inter.variable} font-sans`}>
<Component {...pageProps} />
</main>
</>
)
return (
<>
<Head>
<title>Érettségi kereső</title>
</Head>
<main className={`${inter.variable} font-sans`}>
<Component {...pageProps} />
</main>
</>
)
}

View file

@ -1,17 +1,17 @@
import { Html, Head, Main, NextScript } from 'next/document'
export default function Document() {
return (
<Html lang="hu">
<Head>
<meta name="theme-color" content="#121212" />
<meta name="title" content="Érettségi kereső" />
<meta name="author" content="albert" />
</Head>
<body>
<Main />
<NextScript />
</body>
</Html>
)
return (
<Html lang="hu">
<Head>
<meta name="theme-color" content="#121212" />
<meta name="title" content="Érettségi kereső" />
<meta name="author" content="albert" />
</Head>
<body>
<Main />
<NextScript />
</body>
</Html>
)
}

View file

@ -1,66 +1,93 @@
import { NextApiRequest, NextApiResponse } from 'next'
export default function handler(req: NextApiRequest, res: NextApiResponse) {
const { ev, szint, vizsgatargy, evszak, tipus, file } = req.query
const pdfBaseUrl = 'https://dload-oktatas.educatio.hu/erettsegi/feladatok_'
const zipBaseUrl =
'https://www.oktatas.hu/bin/content/dload/erettsegi/feladatok_'
const { ev, szint, vizsgatargy, idoszak, tipus, file } = req.query
const baseUrl = 'https://dload-oktatas.educatio.hu/erettsegi/feladatok_'
const missingParams = []
if (!ev) missingParams.push('ev')
if (!szint) missingParams.push('szint')
if (!evszak) missingParams.push('evszak')
if (!vizsgatargy) missingParams.push('vizsgatargy')
if (!tipus) missingParams.push('tipus')
const missingParams = []
if (!ev) missingParams.push('ev')
if (!szint) missingParams.push('szint')
if (!idoszak) missingParams.push('evszak')
if (!vizsgatargy) missingParams.push('vizsgatargy')
if (!tipus) missingParams.push('tipus')
if (missingParams.length > 0) {
return res
.status(400)
.json({ error: `Hiányzó paraméterek: ${missingParams.join(', ')}` })
}
if (missingParams.length > 0) {
return res
.status(400)
.json({ error: `Hiányzó paraméterek: ${missingParams.join(', ')}` })
}
let honap
if (evszak === 'osz') {
honap = 'okt'
} else if (evszak === 'tavasz') {
honap = 'maj'
} else {
return res.status(400).json({ error: 'Érvénytelen évszak' })
}
let honap
switch (idoszak) {
case 'osz':
honap = 'okt'
break
case 'tavasz':
honap = 'maj'
break
default:
return res.status(400).json({ error: 'Érvénytelen évszak' })
}
let prefix
if (szint === 'emelt') {
prefix = `e_${vizsgatargy}`
} else if (szint === 'kozep') {
prefix = `k_${vizsgatargy}`
}
let prefix
switch (szint) {
case 'emelt':
prefix = `e_${vizsgatargy}`
break
case 'kozep':
prefix = `k_${vizsgatargy}`
break
default:
return res.status(400).json({ error: 'Érvénytelen szint' })
}
let pdfUrl, zipUrl
if (vizsgatargy === 'inf' || vizsgatargy === 'infoism') {
if (file === 'forras' && tipus === 'fl') {
zipUrl = `${zipBaseUrl}${ev}${evszak}_${szint}/${prefix}for_${ev!.slice(
-2
)}${honap}_${tipus}.zip`
} else if (file === 'megoldas' && tipus === 'ut') {
zipUrl = `${zipBaseUrl}${ev}${evszak}_${szint}/${prefix}meg_${ev!.slice(
-2
)}${honap}_${tipus}.zip`
} else if (file === 'megoldas' && tipus === 'fl') {
zipUrl = `${zipBaseUrl}${ev}${evszak}_${szint}/${prefix}meg_${ev!.slice(
-2
)}${honap}_ut.zip`
} else if (file === 'forras' && tipus === 'ut') {
zipUrl = `${zipBaseUrl}${ev}${evszak}_${szint}/${prefix}for_${ev!.slice(
-2
)}${honap}_fl.zip`
} else {
return res.status(400).json({ error: 'Érvénytelen fájltípus' })
}
} else {
pdfUrl = `${pdfBaseUrl}${ev}${evszak}_${szint}/${prefix}_${ev!.slice(
-2
)}${honap}_${tipus}.pdf`
}
const forras = 'for'
const megoldas = 'meg'
const shortev = ev!.slice(-2)
res.status(200).json({ pdfUrl, zipUrl })
let pdfUrl, zipUrl
switch (vizsgatargy) {
case 'inf':
case 'infoism':
switch (file) {
case 'forras':
switch (tipus) {
case 'fl':
zipUrl = `${baseUrl}${ev}${idoszak}_${szint}/${prefix}${forras}_${shortev}${honap}_${tipus}.zip`
pdfUrl = `${baseUrl}${ev}${idoszak}_${szint}/${prefix}_${shortev}${honap}_${tipus}.pdf`
break
case 'ut':
zipUrl = `${baseUrl}${ev}${idoszak}_${szint}/${prefix}${forras}_${shortev}${honap}_fl.zip`
pdfUrl = `${baseUrl}${ev}${idoszak}_${szint}/${prefix}_${shortev}${honap}_${tipus}.pdf`
break
default:
return res.status(400).json({ error: 'Érvénytelen fájltípus' })
}
break
case 'megoldas':
switch (tipus) {
case 'ut':
zipUrl = `${baseUrl}${ev}${idoszak}_${szint}/${prefix}${megoldas}_${shortev}${honap}_${tipus}.zip`
pdfUrl = `${baseUrl}${ev}${idoszak}_${szint}/${prefix}_${shortev}${honap}_${tipus}.pdf`
break
case 'fl':
zipUrl = `${baseUrl}${ev}${idoszak}_${szint}/${prefix}${megoldas}_${shortev}${honap}_ut.zip`
pdfUrl = `${baseUrl}${ev}${idoszak}_${szint}/${prefix}_${shortev}${honap}_${tipus}.pdf`
break
default:
return res.status(400).json({ error: 'Érvénytelen fájltípus' })
}
break
default:
return res.status(400).json({ error: 'Érvénytelen fájltípus' })
}
break
default:
pdfUrl = `${baseUrl}${ev}${idoszak}_${szint}/${prefix}_${ev!.slice(
-2
)}${honap}_${tipus}.pdf`
break
}
res.status(200).json({ pdfUrl, zipUrl })
}

View file

@ -1,187 +1,197 @@
import Link from 'next/link'
import { useState, useEffect } from 'react'
export default function Home() {
const [pdfLink, setPdfLink] = useState<string>('')
const [zipLink, setZipLink] = useState<string>('')
const [selectedSubject, setSelectedSubject] = useState<string>('')
const [selectedYear, setSelectedYear] = useState<string>('')
const [selectedSeason, setSelectedSeason] = useState<string>('')
const [selectedLevel, setSelectedLevel] = useState<string>('')
const [selectedType, setSelectedType] = useState<string>('')
const [selectedFile, setSelectedFile] = useState<string>('')
const [pdfLink, setPdfLink] = useState<string>('')
const [zipLink, setZipLink] = useState<string>('')
const [selectedSubject, setSelectedSubject] = useState<string>('')
const [selectedYear, setSelectedYear] = useState<string>('')
const [selectedPeriod, setSelectedPeriod] = useState<string>('')
const [selectedLevel, setSelectedLevel] = useState<string>('')
const [selectedType, setSelectedType] = useState<string>('')
const [selectedFile, setSelectedFile] = useState<string>('')
const subjects = [
{ value: 'magyir', label: 'Magyar' },
{ value: 'mat', label: 'Matek' },
{ value: 'tort', label: 'Történelem' },
{ value: 'angol', label: 'Angol' },
{ value: 'nemet', label: 'Német' },
{ value: 'inf', label: 'Közismereti Informatika' },
{ value: 'infoism', label: 'Szakmai Informatika' },
]
const subjects = [
{ value: 'magyir', label: 'Magyar nyelv és irodalom' },
{ value: 'mat', label: 'Matematika' },
{ value: 'tort', label: 'Történelem' },
{ value: 'angol', label: 'Angol nyelv' },
{ value: 'nemet', label: 'Német nyelv' },
{ value: 'inf', label: 'Informatika' },
{ value: 'infoism', label: 'Informatikai ismeretek' },
]
const [years, setYears] = useState<string[]>([])
const [years, setYears] = useState<string[]>([])
useEffect(() => {
const currentYear = new Date().getFullYear()
const availableYears: string[] = []
for (let year = currentYear; year >= 2005; year--) {
availableYears.push(year.toString())
useEffect(() => {
const currentYear = new Date().getFullYear()
const availableYears: string[] = []
for (let year = currentYear; year >= 2013; year--) {
availableYears.push(year.toString())
}
setYears(availableYears)
}, [])
useEffect(() => {
const fetchData = async () => {
try {
let url = `/api/erettsegi?vizsgatargy=${selectedSubject}&ev=${selectedYear}&idoszak=${selectedPeriod}&szint=${selectedLevel}&tipus=${selectedType}`
switch (selectedSubject) {
case 'inf':
case 'infoism':
url += `&file=${selectedFile}`
break
default:
break
}
setYears(availableYears)
}, [])
useEffect(() => {
const fetchData = async () => {
try {
let url = `/api/erettsegi?vizsgatargy=${selectedSubject}&ev=${selectedYear}&evszak=${selectedSeason}&szint=${selectedLevel}&tipus=${selectedType}`
const response = await fetch(url)
if (
selectedSubject === 'inf' ||
selectedSubject === 'infoism'
) {
url += `&file=${selectedFile}`
} else {
url += `&file="none"`
}
if (response.ok) {
const data = await response.json()
const response = await fetch(url)
if (data.pdfUrl) {
setPdfLink(data.pdfUrl)
} else {
console.error('Nincs érvényes PDF link a válaszban.')
}
if (response.ok) {
const data = await response.json()
if (data.pdfUrl) {
setPdfLink(data.pdfUrl)
} else {
console.error('Nincs érvényes PDF link a válaszban.')
}
if (data.zipUrl) {
setZipLink(data.zipUrl)
} else {
console.error('Nincs érvényes ZIP link a válaszban.')
}
} else {
console.error('Hiba történt az API hívás során.')
}
} catch (error) {
console.error('Hiba történt az API hívás során.', error)
}
if (data.zipUrl) {
setZipLink(data.zipUrl)
} else {
console.error('Nincs érvényes ZIP link a válaszban.')
}
} else {
console.error('Hiba történt az API hívás során.')
}
fetchData()
}, [
selectedSubject,
selectedYear,
selectedSeason,
selectedLevel,
selectedType,
selectedFile,
])
} catch (error) {
console.error('Hiba történt az API hívás során.', error)
}
}
fetchData()
}, [
selectedSubject,
selectedYear,
selectedPeriod,
selectedLevel,
selectedType,
selectedFile,
])
return (
<main className="flex min-h-screen flex-col items-center justify-between p-24">
<div className="container mx-auto mt-15">
<div className="flex flex-col items-center justify-center">
<div className="mb-3">
<select
value={selectedSubject}
onChange={(e) => setSelectedSubject(e.target.value)}
className="bg-[#181a1b] text-[#efefef] w-56 max-w-lg h-10 px-4 text-sm border border-[#3C4143] rounded-lg focus:outline-none"
>
<option value="">Tantárgy</option>
{subjects.map((subject) => (
<option
key={subject.value}
value={subject.value}
>
{subject.label}
</option>
))}
</select>
</div>
<div className="mb-3">
<select
value={selectedYear}
onChange={(e) => setSelectedYear(e.target.value)}
className="bg-[#181a1b] text-[#efefef] w-56 max-w-lg h-10 px-4 text-sm border border-[#3C4143] rounded-lg focus:outline-none"
>
<option value="">Év</option>
{years.map((year) => (
<option key={year} value={year}>
{year}
</option>
))}
</select>
</div>
<div className="mb-3">
<select
value={selectedSeason}
onChange={(e) => setSelectedSeason(e.target.value)}
className="bg-[#181a1b] text-[#efefef] w-56 max-w-lg h-10 px-4 text-sm border border-[#3C4143] rounded-lg focus:outline-none"
>
<option value="">Évszak</option>
<option value="tavasz">Tavasz</option>
<option value="osz">Ősz</option>
</select>
</div>
<div className="mb-3">
<select
value={selectedLevel}
onChange={(e) => setSelectedLevel(e.target.value)}
className="bg-[#181a1b] text-[#efefef] w-56 max-w-lg h-10 px-4 text-sm border border-[#3C4143] rounded-lg focus:outline-none"
>
<option value="">Szint</option>
<option value="kozep">Közép</option>
<option value="emelt">Emelt</option>
</select>
</div>
<div className="mb-3">
<select
value={selectedType}
onChange={(e) => setSelectedType(e.target.value)}
className="bg-[#181a1b] text-[#efefef] w-56 max-w-lg h-10 px-4 text-sm border border-[#3C4143] rounded-lg focus:outline-none"
>
<option value="">Típus</option>
<option value="fl">Feladatlap</option>
<option value="ut">Útmutató</option>
</select>
</div>
{selectedSubject === 'inf' ||
selectedSubject === 'infoism' ? (
<div className="mb-3">
<select
value={selectedFile}
onChange={(e) =>
setSelectedFile(e.target.value)
}
className="bg-[#181a1b] text-[#efefef] w-56 max-w-lg h-10 px-4 text-sm border border-[#3C4143] rounded-lg focus:outline-none"
>
<option value="">Fájl</option>
<option value="forras">Forrás</option>
<option value="megoldas">Megoldás</option>
</select>
</div>
) : null}
<button
className="mt-3 bg-blue-500 hover:bg-blue-700 text-white font-bold py-2 px-4 rounded"
onClick={
pdfLink ? () => window.open(pdfLink) : () => {}
}
>
Megnyitás
</button>
{selectedSubject === 'inf' ||
selectedSubject === 'infoism' ? (
<button
className="mt-3 bg-blue-500 hover:bg-blue-700 text-white font-bold py-2 px-4 rounded"
onClick={
zipLink ? () => window.open(zipLink) : () => {}
}
>
Letöltés
</button>
) : null}
</div>
return (
<main className="flex min-h-screen flex-col items-center justify-between p-24">
<div className="container mx-auto mt-15">
<div className="flex flex-col items-center justify-center">
<div className="mb-3">
<select
value={selectedSubject}
onChange={(e) => setSelectedSubject(e.target.value)}
className="bg-[#181a1b] text-[#efefef] w-56 max-w-lg h-10 px-4 text-sm border border-[#3C4143] rounded-lg focus:outline-none"
>
<option value="">Tárgy</option>
{subjects.map((subject) => (
<option key={subject.value} value={subject.value}>
{subject.label}
</option>
))}
</select>
</div>
<div className="mb-3">
<select
value={selectedYear}
onChange={(e) => setSelectedYear(e.target.value)}
className="bg-[#181a1b] text-[#efefef] w-56 max-w-lg h-10 px-4 text-sm border border-[#3C4143] rounded-lg focus:outline-none"
>
<option value="">Év</option>
{years.map((year) => (
<option key={year} value={year}>
{year}
</option>
))}
</select>
</div>
<div className="mb-3">
<select
value={selectedPeriod}
onChange={(e) => setSelectedPeriod(e.target.value)}
className="bg-[#181a1b] text-[#efefef] w-56 max-w-lg h-10 px-4 text-sm border border-[#3C4143] rounded-lg focus:outline-none"
>
<option value="">Időszak</option>
<option value="tavasz">Tavasz</option>
<option value="osz">Ősz</option>
</select>
</div>
<div className="mb-3">
<select
value={selectedLevel}
onChange={(e) => setSelectedLevel(e.target.value)}
className="bg-[#181a1b] text-[#efefef] w-56 max-w-lg h-10 px-4 text-sm border border-[#3C4143] rounded-lg focus:outline-none"
>
<option value="">Szint</option>
<option value="kozep">Közép</option>
<option value="emelt">Emelt</option>
</select>
</div>
<div className="mb-3">
<select
value={selectedType}
onChange={(e) => setSelectedType(e.target.value)}
className="bg-[#181a1b] text-[#efefef] w-56 max-w-lg h-10 px-4 text-sm border border-[#3C4143] rounded-lg focus:outline-none"
>
<option value="">Típus</option>
<option value="fl">Feladatlap</option>
<option value="ut">Útmutató</option>
</select>
</div>
{selectedSubject === 'inf' || selectedSubject === 'infoism' ? (
<div className="mb-3">
<select
value={selectedFile}
onChange={(e) => setSelectedFile(e.target.value)}
className="bg-[#181a1b] text-[#efefef] w-56 max-w-lg h-10 px-4 text-sm border border-[#3C4143] rounded-lg focus:outline-none"
>
<option value="">Fájl</option>
<option value="forras">Forrás</option>
<option value="megoldas">Megoldás</option>
</select>
</div>
</main>
)
) : null}
<button
className="mt-3 bg-blue-500 hover:bg-blue-700 text-white font-bold py-2 px-4 rounded"
onClick={pdfLink ? () => window.open(pdfLink) : () => {}}
>
Megnyitás
</button>
{selectedSubject === 'inf' || selectedSubject === 'infoism' ? (
<button
className="mt-3 bg-blue-500 hover:bg-blue-700 text-white font-bold py-2 px-4 rounded"
onClick={zipLink ? () => window.open(zipLink) : () => {}}
>
Letöltés
</button>
) : null}
</div>
<div className="fixed bottom-5 left-0 right-0 text-center py-4">
<p className="text-sm text-gray-400">
<Link
href="https://albert.lol"
target="_blank"
className="text-blue-500 hover:text-blue-700"
>
albert
</Link>
{' | '}
<Link
href="https://github.com/skidoodle/erettsegi-browser"
target="_blank"
className="text-blue-500 hover:text-blue-700"
>
github
</Link>
</p>
</div>
</div>
</main>
)
}

View file

@ -3,5 +3,5 @@
@tailwind utilities;
body {
background-color: #0e0f0f;
background-color: #0e0f0f;
}