File size: 3,721 Bytes
e37348d
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
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
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
import re
import json
import requests
from helpers.functions import Utils

class Embed:
    def __init__(self):
        self.base_url = "https://embed.su"
        self.headers = {
            "Referer": "https://embed.su",
            "Origin": "https://embed.su",
        }
        self.videoDataList = []
        self.utils = Utils()
        
    def build_url(self, tmdb_id, media_type, season=None, episode=None):
        if media_type == "movie":
            return f"{self.base_url}/embed/movie/{tmdb_id}"
        elif media_type == "tv":
            return f"{self.base_url}/embed/tv/{tmdb_id}/{season}/{episode}"
        else:
            raise ValueError("Invalid media type. Must be 'movie' or 'tv'.")
        
    def extract_sctream_data(self, data):
        data = data.split("atob(`")[1].split("`));")[0]
        return data
        
    def get_stream_ids(self, raw_data):
        encoded_data = self.extract_sctream_data(raw_data)
        encoded_hash = json.loads(self.utils.b64_decode(encoded_data))['hash']
        decoded_hash = self.utils.b64_decode(encoded_hash).split(".")
        stream_data_list = json.loads(self.utils.b64_decode(decoded_hash[1]+decoded_hash[0]))
        stream_id_list = []
        for stream_data in stream_data_list:
            stream_id_list.append(stream_data['hash'])
        return stream_id_list
    
    def get_individual_streams(self, data):
        resolutions = []
        stream_urls = []
        data = requests.get(data, headers=self.headers).text
        for line in data.splitlines():
            match_res = re.search(r'RESOLUTION=(\d{3,4})x(\d{3,4})', line)
            if match_res:
                resolutions.append(f"{match_res.group(2)}")
            match_url = re.search(r'^/api/.*.png$', line)
            if match_url:
                stream_urls.append(f"{self.base_url}{match_url.group(0).replace('.png', '.m3u8')}")
        return resolutions, stream_urls
    
    def get_stream(self, tmdb_id, imdb_id, media_type, title, year, season=None, episode=None):
        final_url = self.build_url(tmdb_id=tmdb_id, media_type=media_type, season=season, episode=episode)
        raw_data = requests.get(final_url, headers=self.headers).text
        stream_id_list = self.get_stream_ids(raw_data)
        for stream_id in stream_id_list:
            stream_url = f"{self.base_url}/api/e/{stream_id}"
            response = requests.get(stream_url, headers=self.headers)
            if response.status_code == 200 and 'source' in response.json():
                data = response.json()
                resolutions, stream_urls = self.get_individual_streams(data['source'])
                for (resolution, stream_url) in zip(resolutions, stream_urls):
                    self.videoDataList.append(
                        {
                            "videoSource": f"EMBED_{len(self.videoDataList)+1} ({resolution})",
                            "videoUrl": stream_url,
                            "videoHeaders": self.headers,
                        }
                    )
            else:
                continue
        return self.videoDataList          

if __name__ == "__main__":
    auto_embed = Embed()
    media_type = "movie"
    tmdb_id = "822119"
    imdb_id = "tt14513804"
    title = "Captain America: Brave New World"
    year = "2025"
    season = None
    episode = None
    try:
        encoded_data = auto_embed.get_streams(tmdb_id=tmdb_id, imdb_id=imdb_id, media_type=media_type, title=title, year=year, season=season, episode=episode)
        print(json.dumps(encoded_data, indent=4))
    except Exception as e:
        print(f"Error: {e}")