-
Notifications
You must be signed in to change notification settings - Fork 0
/
Copy pathpeertube.vbml
208 lines (188 loc) · 7.45 KB
/
peertube.vbml
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
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
172
173
174
175
176
177
178
179
180
181
182
183
184
185
186
187
188
189
190
191
192
193
194
195
196
197
198
199
200
201
202
203
204
205
206
207
208
# VBML 1.0.3
#--------------------------------------------------------------------------------------------------
# Properties
#--------------------------------------------------------------------------------------------------
type: backend
source: https://raw.githubusercontent.com/omega-gg/backend/master/peertube.vbml
api: 1.0.3
version: 1.0.23
title: PeerTube
host: peertube.fr
cover: /cover/peertube.png
validate: /(watch|w|video-channels|c)/(?!.*/)
#--------------------------------------------------------------------------------------------------
# Routines
#--------------------------------------------------------------------------------------------------
TRACK_ID: |
SET url (URL_REMOVE_PREFIX (URL_REMOVE_EXTENSION url))
IF (EQUAL (CONTAIN url (REGEXP "/(watch|w)/(?!.*/)")) false)
OR (GREATER (COUNT_STRING url '/') 2)
RETURN ""
FI
RETURN url
PLAYLIST_INFO: |
SET url (URL_REMOVE_PREFIX (URL_REMOVE_EXTENSION url))
SET index (INDEX_OF url (REGEXP "/(video-channels|c)/(?!.*/)"))
IF (EQUAL index -1)
SET index (INDEX_OF url (REGEXP "/(video-playlists|p)/(?!.*/)"))
IF (EQUAL index -1)
RETURN false
FI
SET type "playlist"
SET path "/api/v1/video-playlists/"
ELSE
SET type "feed"
SET path "/api/v1/video-channels/"
FI
SET id (APPEND queryData path (MID url (INDEX_END url '/' (ADD index 1))) \
/videos?start=0&count=100&sort=-publishedAt&skipCount=true&nsfw=false)
RETURN true
URL_TRACK: |
RETURN (APPEND "https://" id)
URL_PLAYLIST: |
RETURN (APPEND "https://" id)
QUERY_SOURCE: |
SET url (URL_REMOVE_PREFIX (URL_REMOVE_EXTENSION url))
SET index (INDEX_OF url (REGEXP "/(watch|w)/(?!.*/)"))
IF (EQUAL index -1)
RETURN false
FI
SET url (APPEND "https://" (MID url 0 index) "/api/v1/videos/" \
(MID url (INDEX_END url '/' (ADD index 1))))
RETURN true
QUERY_TRACK: |
SET url (URL_REMOVE_PREFIX (URL_REMOVE_EXTENSION url))
SET index (INDEX_OF url (REGEXP "/(watch|w)/(?!.*/)"))
IF (EQUAL index -1)
OR (GREATER (COUNT_STRING url '/') 2)
RETURN false
FI
SET queryData (MID url 0 index)
SET url (APPEND "https://" queryData "/api/v1/videos/" \
(MID url (INDEX_END url '/' (ADD index 1))))
RETURN true
QUERY_PLAYLIST: |
SET url (URL_REMOVE_PREFIX (URL_REMOVE_EXTENSION url))
SET index (INDEX_OF url (REGEXP "/(video-channels|c)/(?!.*/)"))
IF (EQUAL index -1)
SET index (INDEX_OF url (REGEXP "/(video-playlists|p)/(?!.*/)"))
IF (EQUAL index -1)
RETURN false
FI
SET path "/api/v1/video-playlists/"
ELSE
SET path "/api/v1/video-channels/"
FI
SET queryData (MID url 0 (INDEX_OF url '/'))
SET url (APPEND "https://" queryData path (MID url (INDEX_END url '/' (ADD index 1))) \
/videos?start=0&count=100&sort=-publishedAt&skipCount=true&nsfw=false)
RETURN true
CREATE_QUERY: |
IF (EQUAL label "tracks")
IF (EQUAL method "search")
SET id 1
SET queryData (MID q 0 (INDEX_OF q '?'))
SET q (MID q (INDEX_OF q "?search="))
SET url (APPEND "https://" queryData "/api/v1/videos" q \
"&count=100&skipCount=true&nsfw=false")
ELIF (EQUAL method "related")
SET index (INDEX_OF q (REGEXP "/(watch|w)/(?!.*/)"))
IF (EQUAL index -1)
RETURN false
FI
SET id 2
SET queryData (LIST q t)
SET url (APPEND "https://" (MID q 0 index) "/api/v1/videos/" \
(MID q (INDEX_END q '/' (ADD index 1))))
FI
ELIF (EQUAL method "view")
AND (CONTAIN q "/trending")
SET id 1
SET queryData (MID q 0 (INDEX_OF q '/'))
SET url (APPEND "https://" queryData \
"/api/v1/videos?start=0&count=100&sort=-trending&skipCount=true&nsfw=false")
FI
EXTRACT_SOURCE: |
SET data (READ data "utf-8")
SET data (JSON_EXTRACT data "files")
SET list (JSON_SPLIT data)
FOREACH list data
SET quality (CHOP (JSON_EXTRACT data "label") 1)
HASH_SET medias quality (JSON_EXTRACT data "fileDownloadUrl")
END
IF (NOT_EQUAL (COUNT medias) 1)
RETURN
FI
SET url (HASH_GET medias quality)
IF (NOT_EQUAL (URL_EXTENSION url) "vbml")
RETURN
FI
HASH_SET next "backend" "vbml"
HASH_SET next "url" url
EXTRACT_TRACK: |
SET data (READ data "utf-8")
SET title (JSON_EXTRACT_UTF8 data "name")
SET index (INDEX_OF data "\"channel\"")
SET feed (JSON_EXTRACT data "url" index)
SET author (JSON_EXTRACT_UTF8 data "name" index)
SET url (JSON_EXTRACT data "fileDownloadUrl")
IF (EQUAL (URL_EXTENSION url) "vbml")
HASH_SET next "backend" "vbml"
HASH_SET next "url" url
RETURN
FI
# NOTE: We only load the cover on a native track to optimize bandwidth.
SET cover (APPEND "https://" queryData (JSON_EXTRACT data "previewPath"))
EXTRACT_PLAYLIST: |
SET data (READ data "utf-8")
IF (EQUAL id 2) # Related
SET url (JSON_EXTRACT data "fileDownloadUrl")
IF (EQUAL (URL_EXTENSION url) "vbml")
SET t (LIST_GET queryData 1)
# NOTE: When a time is set we let the client handle the related tracks.
IF (LENGTH t)
HASH_SET next "url" (APPEND \
"vbml:run?backend=vbml&method=related&label=tracks&q=" url \
"&t=" t)
RETURN
FI
SET queryData (LIST_GET queryData 0)
SET queryData (MID queryData 0 (INDEX_OF queryData '/'))
HASH_SET next "id" 3
HASH_SET next "queryData" (LIST queryData url)
ELSE
SET queryData (LIST_GET queryData 0)
SET queryData (MID queryData 0 (INDEX_OF queryData '/'))
HASH_SET next "queryData" queryData
FI
SET list (JSON_SPLIT (JSON_EXTRACT_UTF8 data "tags"))
FOREACH list data
SET tags (APPEND tags "&tagsOneOf=" data)
END
HASH_SET next "url" (APPEND "https://" queryData "/api/v1/search/videos?start=0&count=20" \
tags "&sort=-publishedAt&searchTarget=local")
ELSE # Tracks
IF (EQUAL id 3) # Related VBML
HASH_SET next "url" (APPEND "vbml:run?backend=vbml&method=related&label=tracks&q=" \
(LIST_GET queryData 1))
SET queryData (LIST_GET queryData 0)
FI
SET queryData (APPEND "https://" queryData)
IF (EQUAL id 0) # Playlist
SET channel (JSON_EXTRACT data "channel")
SET title (JSON_EXTRACT_UTF8 channel "displayName")
SET channel (JSON_EXTRACT channel "avatars")
IF (NOT_EQUAL channel "")
SET cover (APPEND queryData (JSON_EXTRACT channel "path" \
(LAST_INDEX_OF channel "\"path\"")))
FI
FI
SET data (JSON_EXTRACT data "data")
SET list (JSON_SPLIT data)
FOREACH list data
HASH_SET track "source" (APPEND queryData "/w/" (JSON_EXTRACT data "shortUUID"))
HASH_SET track "title" (JSON_EXTRACT_UTF8 data "name")
HASH_SET track "cover" (APPEND queryData (JSON_EXTRACT data "previewPath"))
LIST_APPEND tracks track
END
FI