File size: 2,642 Bytes
31c07fa
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
500ef6b
31c07fa
a666d12
 
31c07fa
 
733d3b8
31c07fa
 
 
 
 
a666d12
31c07fa
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
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
import gradio as gr
import m3u8
import requests
from urllib.parse import urlparse, parse_qs

def generate_gallery(user_text):
    data = requests.get('https://net52.cc/pv/search.php', {'s': user_text}).json()['searchResult']
    return [f'https://imgcdn.kim/pv/341/{item["id"]}.jpg' for item in data], data

def on_image_click(evt: gr.SelectData, data):
    item = data[evt.index]
    return item['t'], item['y'], item['r'] if item['r'] != "Series" else "", item['id'], item['r'] == "Series"

def get_data(id):
    return requests.get('https://net52.cc/pv/post.php', {'id': id}).json() if id else {}

def get_video_data(id):
    if not id:
        return gr.Dropdown(choices=[]), {}
    res = requests.get('https://net52.cc/pv/playlist.php', {'id': id}).json()[0]
    in_data = parse_qs(urlparse(res['sources'][0]['file']).query)['in'][0]
    data = {
        "subtitle": [i['label'] for i in res.get('tracks', [])],
        "quality": {i.stream_info.resolution[1]: i.uri for i in m3u8.load(f'https://net52.cc/pv/hls/{id}.m3u8?in={in_data}').playlists}
    }
    q = list(data['quality'].keys())
    print(data)
    return gr.Dropdown(choices=q, value=q[0] if q else None), data

def on_quality_change(quality, video_state):
    if not video_state or not quality:  # Bug fix: None check
        return ""
    return video_state['quality'].get(quality, "")

with gr.Blocks() as demo:
    input_text = gr.Textbox(
        label="Search",
        placeholder="Movie / Series naam likho"
    )
    btn = gr.Button("Search")
    gallery = gr.Gallery(
        label="Results",
        columns=4,
        height=300
    )
    title_box = gr.Textbox(label="Title")
    year_box = gr.Textbox(label="Year")
    duration_box = gr.Textbox(label="Duration")
    is_series_box = gr.Checkbox(label="This is Series")
    get_data_btn = gr.Button("Get Data")
    json_box = gr.JSON(label="JSON")
    html_box = gr.HTML(html_template='<video src="${value}" controls></video>')
    dropdown = gr.Dropdown()
    get_movie = gr.Button("Get Movie")
    data_state = gr.State()
    id_state = gr.State()
    video_state = gr.State()

    btn.click(generate_gallery, input_text, [gallery, data_state])
    get_data_btn.click(get_data, id_state, json_box)
    get_movie.click(get_video_data, id_state, [dropdown, video_state])
    dropdown.change(on_quality_change, [dropdown, video_state], html_box)
    gallery.select(on_image_click, data_state, [title_box, year_box, duration_box, id_state, is_series_box])
    gallery.preview_close(lambda: ('', '', '', '', False, {}), outputs=[title_box, year_box, duration_box, id_state, is_series_box, json_box])

demo.launch()