File size: 2,431 Bytes
a20d046 39fecc6 ff3432c a20d046 3e7d013 |
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 |
from fastapi import FastAPI, Request, Form
from fastapi.responses import HTMLResponse
from fastapi.templating import Jinja2Templates
import requests
import json
from bs4 import BeautifulSoup
# FastAPI setup
app = FastAPI()
# Set up Jinja2 for templating
templates = Jinja2Templates(directory="templates")
# Custom headers for the requests
headers = {
'User-Agent': 'Mozilla/5.0 (X11; Ubuntu; Linux x86_64; rv:127.0) Gecko/20100101 Firefox/127.0',
'Accept': 'application/json, text/javascript, */*; q=0.01',
'Accept-Language': 'en-US,en;q=0.5',
'X-Requested-With': 'XMLHttpRequest',
'DNT': '1',
'Sec-GPC': '1',
'Connection': 'keep-alive',
'Referer': 'https://eduboom.it/',
'Pragma': 'no-cache',
'Cache-Control': 'no-cache',
}
def get_m3u8(temp_url):
response = requests.get(temp_url, headers=headers)
soup = BeautifulSoup(response.text, 'lxml')
data_params = soup.find('div', class_='ucha-player play-button')['data-params']
real_data = json.loads(data_params)
m3u8_link = real_data['sources']['main']['smil']
if "smil:trailer" in m3u8_link:
m3u8_link = m3u8_link.replace("smil:trailers", "smil:videos").replace("/registration", "")
return m3u8_link
def eduboom(query):
params = {'term': query}
response = requests.get('https://elmythus.serv00.net/https://eduboom.it/ajax/lessons-search', params=params, headers=headers)
print(response)
print(response.text)
data = response.json()
return data
@app.get("/", response_class=HTMLResponse)
async def search_form(request: Request):
return templates.TemplateResponse("search.html", {"request": request})
@app.post("/search", response_class=HTMLResponse)
async def search_results(request: Request, query: str = Form(...)):
results = eduboom(query)
return templates.TemplateResponse("results.html", {"request": request, "results": results, "query": query})
@app.get("/video/{video_id}", response_class=HTMLResponse)
async def video_details(request: Request, video_id: int, query: str):
results = eduboom(query)
selected_item = results[video_id - 1]
link = selected_item['url']
m3u8_link = get_m3u8(link)
return templates.TemplateResponse("detail.html", {
"request": request,
"name": selected_item['value'],
"category": selected_item['category'],
"grade": selected_item['grade'],
"m3u8_link": m3u8_link
})
|