fix(route): update mixcloud queries (#13319)

This commit is contained in:
欠陥電気 2023-09-17 00:31:12 +08:00 committed by GitHub
parent 9f7688334f
commit 0d0f482ba7
No known key found for this signature in database
GPG Key ID: 4AEE18F83AFDEB23
2 changed files with 214 additions and 223 deletions

View File

@ -6,6 +6,7 @@ const { queries } = require('./queries');
module.exports = async (ctx) => {
const host = 'https://www.mixcloud.com';
const imageBaseURL = 'https://thumbnailer.mixcloud.com/unsafe/480x480/';
const graphqlURL = 'https://app.mixcloud.com/graphql';
const headers = {
Referer: host,
'Content-Type': 'application/json',
@ -40,7 +41,6 @@ module.exports = async (ctx) => {
username: ctx.params.username,
},
orderBy: 'LATEST',
audioTypes: ['SHOW'],
},
},
favorites: {
@ -59,37 +59,20 @@ module.exports = async (ctx) => {
},
},
},
profile: {
query: queries.profile.query,
variables: {
lookup: {
username: ctx.params.username,
},
},
},
};
const profile = (
await got({
method: 'post',
url: `${host}/graphql`,
json: payloads.profile,
headers,
})
).data.data;
const biog = profile.user.biog;
const image = `${imageBaseURL}${profile.user.picture.urlRoot}`;
const data = (
await got({
method: 'post',
url: `${host}/graphql`,
url: graphqlURL,
json: payloads[type],
headers,
})
).data.data;
const biog = data.user.biog;
const image = `${imageBaseURL}${data.user.picture.urlRoot}`;
// https://github.com/ytdl-org/youtube-dl/blob/f1487d4fca40fd37d735753e24a7bae53a1b1513/youtube_dl/extractor/mixcloud.py#L72-L79
const decryptionKey = 'IFYOUWANTTHEARTISTSTOGETPAIDDONOTDOWNLOADFROMMIXCLOUD';
const decryptXorCipher = (key, cipherText) => {

View File

@ -1,6 +1,8 @@
const queries = {
stream: {
query: `query UserStreamQuery($lookup: UserLookup!) {
query: `query UserStreamQuery(
$lookup: UserLookup!
) {
user: userLookup(lookup: $lookup) {
username
...UserStreamPage_user
@ -27,6 +29,9 @@ const queries = {
username
isSubscribedTo
isViewer
affiliateUsers {
totalCount
}
}
...AudioCardFavoriteButton_cloudcast
...AudioCardRepostButton_cloudcast
@ -176,6 +181,7 @@ const queries = {
isPublic
slug
description
audioType
picture {
urlRoot
}
@ -209,6 +215,28 @@ const queries = {
...AudioCardTags_cloudcast
}
fragment AudioCardSubLinks_cloudcast on Cloudcast {
id
isExclusive
owner {
id
displayName
username
...Hovercard_user
}
creatorAttributions(first: 2) {
totalCount
edges {
node {
id
displayName
username
...Hovercard_user
}
}
}
}
fragment AudioCardTags_cloudcast on Cloudcast {
tags(country: "GLOBAL") {
tag {
@ -224,18 +252,20 @@ const queries = {
slug
name
audioType
audioQuality
isLiveRecording
isExclusive
owner {
id
displayName
username
...Hovercard_user
...UserBadge_user
}
creatorAttributions(first: 2) {
totalCount
}
...AudioCardSubLinks_cloudcast
...AudioCardPlayButton_cloudcast
...ExclusiveCloudcastBadgeContainer_cloudcast
...CloudcastHQAudio_cloudcast
}
fragment AudioCard_cloudcast on Cloudcast {
@ -275,10 +305,6 @@ const queries = {
}
}
fragment CloudcastHQAudio_cloudcast on Cloudcast {
audioQuality
}
fragment ExclusiveCloudcastBadgeContainer_cloudcast on Cloudcast {
isExclusive
isExclusivePreviewOnly
@ -301,6 +327,17 @@ const queries = {
}
}
fragment ShareAudioCardList_user on User {
biog
username
displayName
id
isUploader
picture {
urlRoot
}
}
fragment UGCImage_picture on Picture {
urlRoot
primaryColor
@ -316,15 +353,16 @@ const queries = {
id
displayName
username
...ShareAudioCardList_user
stream(first: 10) {
edges {
cursor
repostedBy
node {
id
...AudioCard_cloudcast
__typename
}
cursor
}
pageInfo {
endCursor
@ -341,11 +379,10 @@ const queries = {
query: `query UserUploadsQuery(
$lookup: UserLookup!
$orderBy: CloudcastOrderByEnum
$audioTypes: [AudioTypeEnum!]
) {
user: userLookup(lookup: $lookup) {
username
...UserUploadsPage_user_3HcCKF
...UserUploadsPage_user_7FfCv
id
}
viewer {
@ -369,6 +406,9 @@ const queries = {
username
isSubscribedTo
isViewer
affiliateUsers {
totalCount
}
}
...AudioCardFavoriteButton_cloudcast
...AudioCardRepostButton_cloudcast
@ -518,6 +558,7 @@ const queries = {
isPublic
slug
description
audioType
picture {
urlRoot
}
@ -551,6 +592,28 @@ const queries = {
...AudioCardTags_cloudcast
}
fragment AudioCardSubLinks_cloudcast on Cloudcast {
id
isExclusive
owner {
id
displayName
username
...Hovercard_user
}
creatorAttributions(first: 2) {
totalCount
edges {
node {
id
displayName
username
...Hovercard_user
}
}
}
}
fragment AudioCardTags_cloudcast on Cloudcast {
tags(country: "GLOBAL") {
tag {
@ -566,18 +629,20 @@ const queries = {
slug
name
audioType
audioQuality
isLiveRecording
isExclusive
owner {
id
displayName
username
...Hovercard_user
...UserBadge_user
}
creatorAttributions(first: 2) {
totalCount
}
...AudioCardSubLinks_cloudcast
...AudioCardPlayButton_cloudcast
...ExclusiveCloudcastBadgeContainer_cloudcast
...CloudcastHQAudio_cloudcast
}
fragment AudioCard_cloudcast on Cloudcast {
@ -617,10 +682,6 @@ const queries = {
}
}
fragment CloudcastHQAudio_cloudcast on Cloudcast {
audioQuality
}
fragment ExclusiveCloudcastBadgeContainer_cloudcast on Cloudcast {
isExclusive
isExclusivePreviewOnly
@ -643,6 +704,17 @@ const queries = {
}
}
fragment ShareAudioCardList_user on User {
biog
username
displayName
id
isUploader
picture {
urlRoot
}
}
fragment UGCImage_picture on Picture {
urlRoot
primaryColor
@ -654,16 +726,13 @@ const queries = {
hasPremiumFeatures
}
fragment UserUploadsPage_user_3HcCKF on User {
fragment UserUploadsPage_user_7FfCv on User {
id
displayName
username
uploads(
first: 10
orderBy: $orderBy
audioTypes: $audioTypes
isPublic: true
) {
isViewer
...ShareAudioCardList_user
uploads(first: 10, isPublic: true, orderBy: $orderBy, audioTypes: [SHOW]) {
edges {
node {
...AudioCard_cloudcast
@ -684,7 +753,9 @@ const queries = {
}`,
},
favorites: {
query: `query UserFavoritesQuery($lookup: UserLookup!) {
query: `query UserFavoritesQuery(
$lookup: UserLookup!
) {
user: userLookup(lookup: $lookup) {
username
hiddenFavorites: favorites {
@ -714,6 +785,9 @@ const queries = {
username
isSubscribedTo
isViewer
affiliateUsers {
totalCount
}
}
...AudioCardFavoriteButton_cloudcast
...AudioCardRepostButton_cloudcast
@ -863,6 +937,7 @@ const queries = {
isPublic
slug
description
audioType
picture {
urlRoot
}
@ -896,6 +971,28 @@ const queries = {
...AudioCardTags_cloudcast
}
fragment AudioCardSubLinks_cloudcast on Cloudcast {
id
isExclusive
owner {
id
displayName
username
...Hovercard_user
}
creatorAttributions(first: 2) {
totalCount
edges {
node {
id
displayName
username
...Hovercard_user
}
}
}
}
fragment AudioCardTags_cloudcast on Cloudcast {
tags(country: "GLOBAL") {
tag {
@ -911,18 +1008,20 @@ const queries = {
slug
name
audioType
audioQuality
isLiveRecording
isExclusive
owner {
id
displayName
username
...Hovercard_user
...UserBadge_user
}
creatorAttributions(first: 2) {
totalCount
}
...AudioCardSubLinks_cloudcast
...AudioCardPlayButton_cloudcast
...ExclusiveCloudcastBadgeContainer_cloudcast
...CloudcastHQAudio_cloudcast
}
fragment AudioCard_cloudcast on Cloudcast {
@ -962,10 +1061,6 @@ const queries = {
}
}
fragment CloudcastHQAudio_cloudcast on Cloudcast {
audioQuality
}
fragment ExclusiveCloudcastBadgeContainer_cloudcast on Cloudcast {
isExclusive
isExclusivePreviewOnly
@ -988,6 +1083,17 @@ const queries = {
}
}
fragment ShareAudioCardList_user on User {
biog
username
displayName
id
isUploader
picture {
urlRoot
}
}
fragment UGCImage_picture on Picture {
urlRoot
primaryColor
@ -1004,6 +1110,7 @@ const queries = {
displayName
username
isViewer
...ShareAudioCardList_user
favorites(first: 10) {
edges {
node {
@ -1028,7 +1135,9 @@ const queries = {
}`,
},
listens: {
query: `query UserListensQuery($lookup: UserLookup!) {
query: `query UserListensQuery(
$lookup: UserLookup!
) {
user: userLookup(lookup: $lookup) {
username
hiddenListeningHistory: listeningHistory {
@ -1058,6 +1167,9 @@ const queries = {
username
isSubscribedTo
isViewer
affiliateUsers {
totalCount
}
}
...AudioCardFavoriteButton_cloudcast
...AudioCardRepostButton_cloudcast
@ -1207,6 +1319,7 @@ const queries = {
isPublic
slug
description
audioType
picture {
urlRoot
}
@ -1240,6 +1353,28 @@ const queries = {
...AudioCardTags_cloudcast
}
fragment AudioCardSubLinks_cloudcast on Cloudcast {
id
isExclusive
owner {
id
displayName
username
...Hovercard_user
}
creatorAttributions(first: 2) {
totalCount
edges {
node {
id
displayName
username
...Hovercard_user
}
}
}
}
fragment AudioCardTags_cloudcast on Cloudcast {
tags(country: "GLOBAL") {
tag {
@ -1255,18 +1390,20 @@ const queries = {
slug
name
audioType
audioQuality
isLiveRecording
isExclusive
owner {
id
displayName
username
...Hovercard_user
...UserBadge_user
}
creatorAttributions(first: 2) {
totalCount
}
...AudioCardSubLinks_cloudcast
...AudioCardPlayButton_cloudcast
...ExclusiveCloudcastBadgeContainer_cloudcast
...CloudcastHQAudio_cloudcast
}
fragment AudioCard_cloudcast on Cloudcast {
@ -1306,10 +1443,6 @@ const queries = {
}
}
fragment CloudcastHQAudio_cloudcast on Cloudcast {
audioQuality
}
fragment ExclusiveCloudcastBadgeContainer_cloudcast on Cloudcast {
isExclusive
isExclusivePreviewOnly
@ -1332,166 +1465,7 @@ const queries = {
}
}
fragment UGCImage_picture on Picture {
urlRoot
primaryColor
}
fragment UserBadge_user on User {
hasProFeatures
isStaff
hasPremiumFeatures
}
fragment UserListensPage_user on User {
id
isViewer
displayName
username
listeningHistory(first: 10) {
totalCount
edges {
cursor
node {
id
cloudcast {
...AudioCard_cloudcast
id
}
__typename
}
}
pageInfo {
endCursor
hasNextPage
}
}
}
fragment UserListensPage_viewer on Viewer {
id
me {
id
}
...AudioCard_viewer
}`,
},
profile: {
query: `query UserProfileHeaderQuery($lookup: UserLookup!) {
user: userLookup(lookup: $lookup) {
id
displayName
username
isBranded
isStaff
isViewer
followers {
totalCount
}
hasCoverPicture
hasPremiumFeatures
hasProFeatures
picture {
primaryColor
...UGCImage_picture
}
coverPicture {
urlRoot
}
...ProfileNavigation_user
...UserBadge_user
...ShareUserButton_user
...ProfileRegisterUpsellComponent_user
...FollowButton_user
}
viewer {
...ProfileRegisterUpsellComponent_viewer
...FollowButton_viewer
id
}
}
fragment FollowButton_user on User {
id
isFollowed
isFollowing
isViewer
followers {
totalCount
}
username
displayName
}
fragment FollowButton_viewer on Viewer {
me {
id
}
}
fragment ProfileNavigation_user on User {
id
username
stream {
totalCount
}
favorites {
totalCount
}
listeningHistory {
totalCount
}
uploads(audioTypes: [SHOW]) {
totalCount
}
tracks: uploads(audioTypes: [TRACK]) {
totalCount
}
posts {
totalCount
}
profileNavigation(
showsAudioTypes: [SHOW]
tracksAudioTypes: [TRACK]
streamAudioTypes: [SHOW, TRACK]
) {
menuItems {
__typename
... on NavigationItemInterface {
__isNavigationItemInterface: __typename
inDropdown
}
... on HideableNavigationItemInterface {
__isHideableNavigationItemInterface: __typename
hidden
}
... on PlaylistNavigationItem {
count
playlist {
id
name
slug
}
}
}
}
}
fragment ProfileRegisterUpsellComponent_user on User {
id
displayName
followers {
totalCount
}
}
fragment ProfileRegisterUpsellComponent_viewer on Viewer {
me {
id
}
}
fragment ShareUserButton_user on User {
fragment ShareAudioCardList_user on User {
biog
username
displayName
@ -1511,6 +1485,40 @@ const queries = {
hasProFeatures
isStaff
hasPremiumFeatures
}
fragment UserListensPage_user on User {
id
isViewer
displayName
username
...ShareAudioCardList_user
listeningHistory(first: 10) {
totalCount
edges {
node {
id
cloudcast {
...AudioCard_cloudcast
id
}
__typename
}
cursor
}
pageInfo {
endCursor
hasNextPage
}
}
}
fragment UserListensPage_viewer on Viewer {
id
me {
id
}
...AudioCard_viewer
}`,
},
};