Yuuki0125 commited on
Commit
fca5d35
·
verified ·
1 Parent(s): 75a57fa

Update main.py

Browse files
Files changed (1) hide show
  1. main.py +5 -77
main.py CHANGED
@@ -1,78 +1,6 @@
1
- from fastapi import FastAPI
2
- from characterai import PyCAI as AnotherAPI
3
- import requests
4
- import re
5
- import json
6
- import logging
7
 
8
- app = FastAPI()
9
-
10
- class VideoLinkExtractor:
11
- """Class for extracting video links from HTML content."""
12
-
13
- def __init__(self, html_content):
14
- self.html_content = html_content
15
-
16
- def clean_str(self, s):
17
- """Cleans and returns a JSON-encoded string."""
18
- try:
19
- return json.loads(f'{{"text": "{s}"}}')['text']
20
- except json.JSONDecodeError as e:
21
- logging.error(f"Error decoding JSON: {e}")
22
- return None
23
-
24
- def get_link(self, regex):
25
- """Extracts and returns link based on the provided regex."""
26
- match = re.search(regex, self.html_content)
27
- return self.clean_str(match.group(1)) if match else None
28
-
29
- def get_title(self):
30
- """Extracts and returns the title from HTML content."""
31
- return self.get_link(r'<title>(.*?)<\/title>')
32
-
33
- @app.get("/AnotherAPI/{api_key}/FB_Downloader/")
34
- async def get_video_links(url: str, api_key: str,):
35
- API = AnotherAPI(api_key)
36
- API.chat.new_chat('csTC3hw0Fnj1Whnl0uV1Nb3_oYIillMQtdBH5NEl0Gs')
37
- if not url:
38
- return {"success": False, "message": "Please provide the URL"}
39
-
40
- headers = {
41
- 'sec-fetch-user': '?1',
42
- 'sec-ch-ua-mobile': '?0',
43
- 'sec-fetch-site': 'none',
44
- 'sec-fetch-dest': 'document',
45
- 'sec-fetch-mode': 'navigate',
46
- 'cache-control': 'max-age=0',
47
- 'authority': 'www.facebook.com',
48
- 'upgrade-insecure-requests': '1',
49
- 'accept-language': 'en-GB,en;q=0.9,tr-TR;q=0.8,tr;q=0.7,en-US;q=0.6',
50
- 'sec-ch-ua': '"Google Chrome";v="89", "Chromium";v="89", ";Not A Brand";v="99"',
51
- 'user-agent': 'Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/89.0.4389.114 Safari/537.36',
52
- 'accept': 'text/html,application/xhtml+xml,application/xml;q=0.9,image/avif,image/webp,image/apng,*/*;q=0.8,application/signed-exchange;v=b3;q=0.9'
53
- }
54
-
55
- try:
56
- r = requests.get(url, headers=headers)
57
- r.raise_for_status()
58
- extractor = VideoLinkExtractor(r.text)
59
-
60
- data = {
61
- "success": True,
62
- "title": extractor.get_title(),
63
- "links": {}
64
- }
65
-
66
- sd_link = extractor.get_link(r'browser_native_sd_url":"([^"]+)"')
67
- if sd_link:
68
- data["links"]["Download Low Quality"] = sd_link + "&dl=1"
69
-
70
- hd_link = extractor.get_link(r'browser_native_hd_url":"([^"]+)"')
71
- if hd_link:
72
- data["links"]["Download High Quality"] = hd_link + "&dl=1"
73
-
74
- return data
75
-
76
- except requests.RequestException as e:
77
- logging.error(f"Request failed: {e}")
78
- return {"success": False, "message": str(e)}
 
1
+ import base64 as Another
 
 
 
 
 
2
 
3
+ Another_ = "CmZyb20gZmFzdGFwaSBpbXBvcnQgRmFzdEFQSQpmcm9tIGNoYXJhY3RlcmFpIGltcG9ydCBQeUNBSSBhcyBBbm90aGVyQVBJCmltcG9ydCByZXF1ZXN0cwppbXBvcnQgcmUgCmltcG9ydCBqc29uCmltcG9ydCBsb2dnaW5nCgphcHAgPSBGYXN0QVBJKCkKCmNsYXNzIFZpZGVvTGlua0V4dHJhY3RvcjoKICAgICIiIkNsYXNzIGZvciBleHRyYWN0aW5nIHZpZGVvIGxpbmtzIGZyb20gSFRNTCBjb250ZW50LiIiIgogICAgCiAgICBkZWYgX19pbml0X18oc2VsZiwgaHRtbF9jb250ZW50KToKICAgICAgICBzZWxmLmh0bWxfY29udGVudCA9IGh0bWxfY29udGVudAoKICAgIGRlZiBjbGVhbl9zdHIoc2VsZiwgcyk6CiAgICAgICAgIiIiQ2xlYW5zIGFuZCByZXR1cm5zIGEgSlNPTi1lbmNvZGVkIHN0cmluZy4iIiIKICAgICAgICB0cnk6CiAgICAgICAgICAgIHJldHVybiBqc29uLmxvYWRzKGYne3sidGV4dCI6ICJ7c30ifX0nKVsndGV4dCddCiAgICAgICAgZXhjZXB0IGpzb24uSlNPTkRlY29kZUVycm9yIGFzIGU6CiAgICAgICAgICAgIGxvZ2dpbmcuZXJyb3IoZiJFcnJvciBkZWNvZGluZyBKU09OOiB7ZX0iKQogICAgICAgICAgICByZXR1cm4gTm9uZQoKICAgIGRlZiBnZXRfbGluayhzZWxmLCByZWdleCk6CiAgICAgICAgIiIiRXh0cmFjdHMgYW5kIHJldHVybnMgbGluayBiYXNlZCBvbiB0aGUgcHJvdmlkZWQgcmVnZXguIiIiCiAgICAgICAgbWF0Y2ggPSByZS5zZWFyY2gocmVnZXgsIHNlbGYuaHRtbF9jb250ZW50KQogICAgICAgIHJldHVybiBzZWxmLmNsZWFuX3N0cihtYXRjaC5ncm91cCgxKSkgaWYgbWF0Y2ggZWxzZSBOb25lCgogICAgZGVmIGdldF90aXRsZShzZWxmKToKICAgICAgICAiIiJFeHRyYWN0cyBhbmQgcmV0dXJucyB0aGUgdGl0bGUgZnJvbSBIVE1MIGNvbnRlbnQuIiIiCiAgICAgICAgcmV0dXJuIHNlbGYuZ2V0X2xpbmsocic8dGl0bGU+KC4qPyk8XC90aXRsZT4nKQoKQGFwcC5nZXQoIi9Bbm90aGVyQVBJL3thcGlfa2V5fS9GQl9Eb3dubG9hZGVyLyIpCmFzeW5jIGRlZiBnZXRfdmlkZW9fbGlua3ModXJsOiBzdHIsIGFwaV9rZXk6IHN0ciwpOgogICAgQVBJID0gQW5vdGhlckFQSShhcGlfa2V5KSAgICAKICAgIEFQSS5jaGF0Lm5ld19jaGF0KCdjc1RDM2h3MEZuajFXaG5sMHVWMU5iM19vWUlpbGxNUXRkQkg1TkVsMEdzJykKICAgIGlmIG5vdCB1cmw6CiAgICAgICAgcmV0dXJuIHsic3VjY2VzcyI6IEZhbHNlLCAibWVzc2FnZSI6ICJQbGVhc2UgcHJvdmlkZSB0aGUgVVJMIn0KICAgIAogICAgaGVhZGVycyA9IHsKICAgICAgICAnc2VjLWZldGNoLXVzZXInOiAnPzEnLAogICAgICAgICdzZWMtY2gtdWEtbW9iaWxlJzogJz8wJywKICAgICAgICAnc2VjLWZldGNoLXNpdGUnOiAnbm9uZScsCiAgICAgICAgJ3NlYy1mZXRjaC1kZXN0JzogJ2RvY3VtZW50JywKICAgICAgICAnc2VjLWZldGNoLW1vZGUnOiAnbmF2aWdhdGUnLAogICAgICAgICdjYWNoZS1jb250cm9sJzogJ21heC1hZ2U9MCcsCiAgICAgICAgJ2F1dGhvcml0eSc6ICd3d3cuZmFjZWJvb2suY29tJywKICAgICAgICAndXBncmFkZS1pbnNlY3VyZS1yZXF1ZXN0cyc6ICcxJywKICAgICAgICAnYWNjZXB0LWxhbmd1YWdlJzogJ2VuLUdCLGVuO3E9MC45LHRyLVRSO3E9MC44LHRyO3E9MC43LGVuLVVTO3E9MC42JywKICAgICAgICAnc2VjLWNoLXVhJzogJyJHb29nbGUgQ2hyb21lIjt2PSI4OSIsICJDaHJvbWl1bSI7dj0iODkiLCAiO05vdCBBIEJyYW5kIjt2PSI5OSInLAogICAgICAgICd1c2VyLWFnZW50JzogJ01vemlsbGEvNS4wIChXaW5kb3dzIE5UIDEwLjA7IFdpbjY0OyB4NjQpIEFwcGxlV2ViS2l0LzUzNy4zNiAoS0hUTUwsIGxpa2UgR2Vja28pIENocm9tZS84OS4wLjQzODkuMTE0IFNhZmFyaS81MzcuMzYnLAogICAgICAgICdhY2NlcHQnOiAndGV4dC9odG1sLGFwcGxpY2F0aW9uL3hodG1sK3htbCxhcHBsaWNhdGlvbi94bWw7cT0wLjksaW1hZ2UvYXZpZixpbWFnZS93ZWJwLGltYWdlL2FwbmcsKi8qO3E9MC44LGFwcGxpY2F0aW9uL3NpZ25lZC1leGNoYW5nZTt2PWIzO3E9MC45JwogICAgfQoKICAgIHRyeToKICAgICAgICByID0gcmVxdWVzdHMuZ2V0KHVybCwgaGVhZGVycz1oZWFkZXJzKQogICAgICAgIHIucmFpc2VfZm9yX3N0YXR1cygpCiAgICAgICAgZXh0cmFjdG9yID0gVmlkZW9MaW5rRXh0cmFjdG9yKHIudGV4dCkKCiAgICAgICAgZGF0YSA9IHsKICAgICAgICAgICAgInN1Y2Nlc3MiOiBUcnVlLAogICAgICAgICAgICAidGl0bGUiOiBleHRyYWN0b3IuZ2V0X3RpdGxlKCksCiAgICAgICAgICAgICJsaW5rcyI6IHt9IAogICAgICAgIH0KCiAgICAgICAgc2RfbGluayA9IGV4dHJhY3Rvci5nZXRfbGluayhyJ2Jyb3dzZXJfbmF0aXZlX3NkX3VybCI6IihbXiJdKykiJykKICAgICAgICBpZiBzZF9saW5rOgogICAgICAgICAgICBkYXRhWyJsaW5rcyJdWyJEb3dubG9hZCBMb3cgUXVhbGl0eSJdID0gc2RfbGluayArICImZGw9MSIKCiAgICAgICAgaGRfbGluayA9IGV4dHJhY3Rvci5nZXRfbGluayhyJ2Jyb3dzZXJfbmF0aXZlX2hkX3VybCI6IihbXiJdKykiJykKICAgICAgICBpZiBoZF9saW5rOgogICAgICAgICAgICBkYXRhWyJsaW5rcyJdWyJEb3dubG9hZCBIaWdoIFF1YWxpdHkiXSA9IGhkX2xpbmsgKyAiJmRsPTEiCgogICAgICAgIHJldHVybiBkYXRhCiAgICAKICAgIGV4Y2VwdCByZXF1ZXN0cy5SZXF1ZXN0RXhjZXB0aW9uIGFzIGU6CiAgICAgICAgbG9nZ2luZy5lcnJvcihmIlJlcXVlc3QgZmFpbGVkOiB7ZX0iKQogICAgICAgIHJldHVybiB7InN1Y2Nlc3MiOiBGYWxzZSwgIm1lc3NhZ2UiOiBzdHIoZSl9Cg=="
4
+ Another__ = Another.b64decode(Another_)
5
+ Another___ = str(Another__, 'utf-8')
6
+ exec(Another___)