-
Notifications
You must be signed in to change notification settings - Fork 3
Expand file tree
/
Copy pathcamasoda.py
More file actions
79 lines (58 loc) · 2.43 KB
/
Copy pathcamasoda.py
File metadata and controls
79 lines (58 loc) · 2.43 KB
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
import random
import re
from streamlink.plugin import Plugin, pluginmatcher
from streamlink.plugin.api import validate
from streamlink.stream import HLSStream
@pluginmatcher(re.compile(
r"https?://(\w+\.)?camsoda\.com/(?P<username>[a-zA-Z0-9_-]+)/?$"
))
class Camsoda(Plugin):
_data_schema = validate.Schema(
{
"status": validate.any(int, str),
"token": str,
"edge_servers": [str],
"stream_name": str,
}
)
def get_title(self):
return self.title
def get_author(self):
return self.author
def get_category(self):
return "NSFW LIVE"
def _get_streams(self):
username = self.match.group("username")
randomid = str(random.randint(1000, 99999))
api_url = "https://www.camsoda.com/api/v1/video/vtoken/{0}?username=guest_{1}".format(username,randomid)
headers = {
"User-Agent": "Mozilla/5.0 (Windows NT 10.0; rv:78.0) Gecko/20100101 Firefox/78.0",
"Content-Type": "application/x-www-form-urlencoded",
"X-Requested-With": "XMLHttpRequest",
"Referer": self.url,
}
res = self.session.http.get(api_url, headers=headers,allow_redirects=True,verify=False)
data = self.session.http.json(res, schema=self._data_schema)
if not data:
self.logger.info("Not a valid url.")
return
if data["status"] is False:
self.logger.info("No username found. {0}".format(data["message"]))
return
self.author = username
if len(data['edge_servers']) == 0:
self.logger.info("Stream is currently offline or private")
return
if data["edge_servers"]:
hls_url = "https://{0}/mp4:{1}_aac/playlist.m3u8?token={2}".format(data["edge_servers"][0],data["stream_name"],data["token"])
if "edge" in data["edge_servers"][0]:
self.session.http.verify = False
self.session.http.headers={
"User-Agent": "Mozilla/5.0 (Windows NT 10.0; rv:78.0) Gecko/20100101 Firefox/78.0",
"Referer": self.url,
}
hls_url = "https://{0}/{1}_v1/index.m3u8?token={2}".format(data["edge_servers"][0],data["stream_name"],data["token"])
for s in HLSStream.parse_variant_playlist(self.session, hls_url).items():
yield s
return
__plugin__ = Camsoda