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
    })