mirror of
https://github.com/tubearchivist/tubearchivist
synced 2024-11-17 21:25:49 +00:00
[API] add playlist stats
This commit is contained in:
parent
e74c26fe36
commit
a466c02304
@ -167,6 +167,34 @@ class Channel(AggBase):
|
|||||||
return response
|
return response
|
||||||
|
|
||||||
|
|
||||||
|
class Playlist(AggBase):
|
||||||
|
"""get playlist stats"""
|
||||||
|
|
||||||
|
name = "playlist_stats"
|
||||||
|
path = "ta_playlist/_search"
|
||||||
|
data = {
|
||||||
|
"size": 0,
|
||||||
|
"aggs": {
|
||||||
|
"playlist_count": {"value_count": {"field": "playlist_id"}},
|
||||||
|
"playlist_active": {"terms": {"field": "playlist_active"}},
|
||||||
|
"playlist_subscribed": {"terms": {"field": "playlist_subscribed"}},
|
||||||
|
},
|
||||||
|
}
|
||||||
|
|
||||||
|
def process(self):
|
||||||
|
"""process aggregation"""
|
||||||
|
aggregations = self.get()
|
||||||
|
response = {"doc_count": aggregations["playlist_count"].get("value")}
|
||||||
|
for bucket in aggregations["playlist_active"]["buckets"]:
|
||||||
|
key = f"active_{bucket['key_as_string']}"
|
||||||
|
response.update({key: bucket.get("doc_count")})
|
||||||
|
for bucket in aggregations["playlist_subscribed"]["buckets"]:
|
||||||
|
key = f"subscribed_{bucket['key_as_string']}"
|
||||||
|
response.update({key: bucket.get("doc_count")})
|
||||||
|
|
||||||
|
return response
|
||||||
|
|
||||||
|
|
||||||
class WatchProgress(AggBase):
|
class WatchProgress(AggBase):
|
||||||
"""get watch progress"""
|
"""get watch progress"""
|
||||||
|
|
||||||
|
@ -161,6 +161,11 @@ urlpatterns = [
|
|||||||
views.StatChannelView.as_view(),
|
views.StatChannelView.as_view(),
|
||||||
name="api-stats-channel",
|
name="api-stats-channel",
|
||||||
),
|
),
|
||||||
|
path(
|
||||||
|
"stats/playlist/",
|
||||||
|
views.StatPlaylistView.as_view(),
|
||||||
|
name="api-stats-playlist",
|
||||||
|
),
|
||||||
path(
|
path(
|
||||||
"stats/watch/",
|
"stats/watch/",
|
||||||
views.StatWatchProgress.as_view(),
|
views.StatWatchProgress.as_view(),
|
||||||
|
@ -4,6 +4,7 @@ from api.src.aggs import (
|
|||||||
BiggestChannel,
|
BiggestChannel,
|
||||||
Channel,
|
Channel,
|
||||||
DownloadHist,
|
DownloadHist,
|
||||||
|
Playlist,
|
||||||
Video,
|
Video,
|
||||||
WatchProgress,
|
WatchProgress,
|
||||||
)
|
)
|
||||||
@ -1171,6 +1172,18 @@ class StatChannelView(ApiBaseView):
|
|||||||
return Response(Channel().process())
|
return Response(Channel().process())
|
||||||
|
|
||||||
|
|
||||||
|
class StatPlaylistView(ApiBaseView):
|
||||||
|
"""resolves to /api/stats/playlist/
|
||||||
|
GET: return playlist stats
|
||||||
|
"""
|
||||||
|
|
||||||
|
def get(self, request):
|
||||||
|
"""get stats"""
|
||||||
|
# pylint: disable=unused-argument
|
||||||
|
|
||||||
|
return Response(Playlist().process())
|
||||||
|
|
||||||
|
|
||||||
class StatWatchProgress(ApiBaseView):
|
class StatWatchProgress(ApiBaseView):
|
||||||
"""resolves to /api/stats/watchprogress/
|
"""resolves to /api/stats/watchprogress/
|
||||||
GET: return watch/unwatch progress stats
|
GET: return watch/unwatch progress stats
|
||||||
|
Loading…
Reference in New Issue
Block a user