[scrolller] move GraphQL queries
This commit is contained in:
@@ -98,7 +98,7 @@ class ScrolllerExtractor(Extractor):
|
||||
"Sec-Fetch-Site": "same-site",
|
||||
}
|
||||
data = {
|
||||
"query" : QUERIES[opname],
|
||||
"query" : self.utils("graphql", opname),
|
||||
"variables" : variables,
|
||||
"authorization": self.auth_token,
|
||||
}
|
||||
@@ -206,144 +206,3 @@ class ScrolllerPostExtractor(ScrolllerExtractor):
|
||||
variables = {"url": "/" + self.groups[0]}
|
||||
data = self._request_graphql("SubredditPostQuery", variables)
|
||||
return (data["getPost"],)
|
||||
|
||||
|
||||
QUERIES = {
|
||||
|
||||
"SubredditPostQuery": """\
|
||||
query SubredditPostQuery(
|
||||
$url: String!
|
||||
) {
|
||||
getPost(
|
||||
data: { url: $url }
|
||||
) {
|
||||
__typename id url title subredditId subredditTitle subredditUrl
|
||||
redditPath isNsfw hasAudio fullLengthSource gfycatSource redgifsSource
|
||||
ownerAvatar username displayName favoriteCount isPaid tags
|
||||
commentsCount commentsRepliesCount isFavorite
|
||||
albumContent { mediaSources { url width height isOptimized } }
|
||||
mediaSources { url width height isOptimized }
|
||||
blurredMediaSources { url width height isOptimized }
|
||||
}
|
||||
}
|
||||
""",
|
||||
|
||||
"SubredditQuery": """\
|
||||
query SubredditQuery(
|
||||
$url: String!
|
||||
$iterator: String
|
||||
$sortBy: GallerySortBy
|
||||
$filter: GalleryFilter
|
||||
$limit: Int!
|
||||
) {
|
||||
getSubreddit(
|
||||
data: {
|
||||
url: $url,
|
||||
iterator: $iterator,
|
||||
filter: $filter,
|
||||
limit: $limit,
|
||||
sortBy: $sortBy
|
||||
}
|
||||
) {
|
||||
__typename id url title secondaryTitle description createdAt isNsfw
|
||||
subscribers isComplete itemCount videoCount pictureCount albumCount
|
||||
isPaid username tags isFollowing
|
||||
banner { url width height isOptimized }
|
||||
children {
|
||||
iterator items {
|
||||
__typename id url title subredditId subredditTitle subredditUrl
|
||||
redditPath isNsfw hasAudio fullLengthSource gfycatSource
|
||||
redgifsSource ownerAvatar username displayName favoriteCount
|
||||
isPaid tags commentsCount commentsRepliesCount isFavorite
|
||||
albumContent { mediaSources { url width height isOptimized } }
|
||||
mediaSources { url width height isOptimized }
|
||||
blurredMediaSources { url width height isOptimized }
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
""",
|
||||
|
||||
"SubredditChildrenQuery": """\
|
||||
query SubredditChildrenQuery(
|
||||
$subredditId: Int!
|
||||
$iterator: String
|
||||
$filter: GalleryFilter
|
||||
$sortBy: GallerySortBy
|
||||
$limit: Int!
|
||||
$isNsfw: Boolean
|
||||
) {
|
||||
getSubredditChildren(
|
||||
data: {
|
||||
subredditId: $subredditId,
|
||||
iterator: $iterator,
|
||||
filter: $filter,
|
||||
sortBy: $sortBy,
|
||||
limit: $limit,
|
||||
isNsfw: $isNsfw
|
||||
},
|
||||
) {
|
||||
iterator items {
|
||||
__typename id url title subredditId subredditTitle subredditUrl
|
||||
redditPath isNsfw hasAudio fullLengthSource gfycatSource
|
||||
redgifsSource ownerAvatar username displayName favoriteCount isPaid
|
||||
tags commentsCount commentsRepliesCount isFavorite
|
||||
albumContent { mediaSources { url width height isOptimized } }
|
||||
mediaSources { url width height isOptimized }
|
||||
blurredMediaSources { url width height isOptimized }
|
||||
}
|
||||
}
|
||||
}
|
||||
""",
|
||||
|
||||
"GetFollowingSubreddits": """\
|
||||
query GetFollowingSubreddits(
|
||||
$iterator: String,
|
||||
$limit: Int!,
|
||||
$filter: GalleryFilter,
|
||||
$isNsfw: Boolean,
|
||||
$sortBy: GallerySortBy
|
||||
) {
|
||||
getFollowingSubreddits(
|
||||
data: {
|
||||
isNsfw: $isNsfw
|
||||
limit: $limit
|
||||
filter: $filter
|
||||
iterator: $iterator
|
||||
sortBy: $sortBy
|
||||
}
|
||||
) {
|
||||
iterator items {
|
||||
__typename id url title secondaryTitle description createdAt isNsfw
|
||||
subscribers isComplete itemCount videoCount pictureCount albumCount
|
||||
isFollowing
|
||||
}
|
||||
}
|
||||
}
|
||||
""",
|
||||
|
||||
"LoginQuery": """\
|
||||
query LoginQuery(
|
||||
$username: String!,
|
||||
$password: String!
|
||||
) {
|
||||
login(
|
||||
username: $username,
|
||||
password: $password
|
||||
) {
|
||||
username token expiresAt isAdmin status isPremium
|
||||
}
|
||||
}
|
||||
""",
|
||||
|
||||
"ItemTypeQuery": """\
|
||||
query ItemTypeQuery(
|
||||
$url: String!
|
||||
) {
|
||||
getItemType(
|
||||
url: $url
|
||||
)
|
||||
}
|
||||
""",
|
||||
|
||||
}
|
||||
|
||||
144
gallery_dl/extractor/utils/scrolller_graphql.py
Normal file
144
gallery_dl/extractor/utils/scrolller_graphql.py
Normal file
@@ -0,0 +1,144 @@
|
||||
# -*- coding: utf-8 -*-
|
||||
|
||||
# Copyright 2026 Mike Fährmann
|
||||
#
|
||||
# This program is free software; you can redistribute it and/or modify
|
||||
# it under the terms of the GNU General Public License version 2 as
|
||||
# published by the Free Software Foundation.
|
||||
|
||||
|
||||
SubredditPostQuery = """\
|
||||
query SubredditPostQuery(
|
||||
$url: String!
|
||||
) {
|
||||
getPost(
|
||||
data: { url: $url }
|
||||
) {
|
||||
__typename id url title subredditId subredditTitle subredditUrl
|
||||
redditPath isNsfw hasAudio fullLengthSource gfycatSource redgifsSource
|
||||
ownerAvatar username displayName favoriteCount isPaid tags
|
||||
commentsCount commentsRepliesCount isFavorite
|
||||
albumContent { mediaSources { url width height isOptimized } }
|
||||
mediaSources { url width height isOptimized }
|
||||
blurredMediaSources { url width height isOptimized }
|
||||
}
|
||||
}
|
||||
"""
|
||||
|
||||
SubredditQuery = """\
|
||||
query SubredditQuery(
|
||||
$url: String!
|
||||
$iterator: String
|
||||
$sortBy: GallerySortBy
|
||||
$filter: GalleryFilter
|
||||
$limit: Int!
|
||||
) {
|
||||
getSubreddit(
|
||||
data: {
|
||||
url: $url,
|
||||
iterator: $iterator,
|
||||
filter: $filter,
|
||||
limit: $limit,
|
||||
sortBy: $sortBy
|
||||
}
|
||||
) {
|
||||
__typename id url title secondaryTitle description createdAt isNsfw
|
||||
subscribers isComplete itemCount videoCount pictureCount albumCount
|
||||
isPaid username tags isFollowing
|
||||
banner { url width height isOptimized }
|
||||
children {
|
||||
iterator items {
|
||||
__typename id url title subredditId subredditTitle subredditUrl
|
||||
redditPath isNsfw hasAudio fullLengthSource gfycatSource
|
||||
redgifsSource ownerAvatar username displayName favoriteCount
|
||||
isPaid tags commentsCount commentsRepliesCount isFavorite
|
||||
albumContent { mediaSources { url width height isOptimized } }
|
||||
mediaSources { url width height isOptimized }
|
||||
blurredMediaSources { url width height isOptimized }
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
"""
|
||||
|
||||
SubredditChildrenQuery = """\
|
||||
query SubredditChildrenQuery(
|
||||
$subredditId: Int!
|
||||
$iterator: String
|
||||
$filter: GalleryFilter
|
||||
$sortBy: GallerySortBy
|
||||
$limit: Int!
|
||||
$isNsfw: Boolean
|
||||
) {
|
||||
getSubredditChildren(
|
||||
data: {
|
||||
subredditId: $subredditId,
|
||||
iterator: $iterator,
|
||||
filter: $filter,
|
||||
sortBy: $sortBy,
|
||||
limit: $limit,
|
||||
isNsfw: $isNsfw
|
||||
},
|
||||
) {
|
||||
iterator items {
|
||||
__typename id url title subredditId subredditTitle subredditUrl
|
||||
redditPath isNsfw hasAudio fullLengthSource gfycatSource
|
||||
redgifsSource ownerAvatar username displayName favoriteCount isPaid
|
||||
tags commentsCount commentsRepliesCount isFavorite
|
||||
albumContent { mediaSources { url width height isOptimized } }
|
||||
mediaSources { url width height isOptimized }
|
||||
blurredMediaSources { url width height isOptimized }
|
||||
}
|
||||
}
|
||||
}
|
||||
"""
|
||||
|
||||
GetFollowingSubreddits = """\
|
||||
query GetFollowingSubreddits(
|
||||
$iterator: String,
|
||||
$limit: Int!,
|
||||
$filter: GalleryFilter,
|
||||
$isNsfw: Boolean,
|
||||
$sortBy: GallerySortBy
|
||||
) {
|
||||
getFollowingSubreddits(
|
||||
data: {
|
||||
isNsfw: $isNsfw
|
||||
limit: $limit
|
||||
filter: $filter
|
||||
iterator: $iterator
|
||||
sortBy: $sortBy
|
||||
}
|
||||
) {
|
||||
iterator items {
|
||||
__typename id url title secondaryTitle description createdAt isNsfw
|
||||
subscribers isComplete itemCount videoCount pictureCount albumCount
|
||||
isFollowing
|
||||
}
|
||||
}
|
||||
}
|
||||
"""
|
||||
|
||||
LoginQuery = """\
|
||||
query LoginQuery(
|
||||
$username: String!,
|
||||
$password: String!
|
||||
) {
|
||||
login(
|
||||
username: $username,
|
||||
password: $password
|
||||
) {
|
||||
username token expiresAt isAdmin status isPremium
|
||||
}
|
||||
}
|
||||
"""
|
||||
|
||||
ItemTypeQuery = """\
|
||||
query ItemTypeQuery(
|
||||
$url: String!
|
||||
) {
|
||||
getItemType(
|
||||
url: $url
|
||||
)
|
||||
}
|
||||
"""
|
||||
Reference in New Issue
Block a user