Skip to content
This repository has been archived by the owner on Aug 25, 2024. It is now read-only.

Retrieve information for comments (/next endpoint) #60

Open
Tracked by #59
404-Program-not-found opened this issue Feb 11, 2023 · 1 comment
Open
Tracked by #59

Retrieve information for comments (/next endpoint) #60

404-Program-not-found opened this issue Feb 11, 2023 · 1 comment

Comments

@404-Program-not-found
Copy link
Member

404-Program-not-found commented Feb 11, 2023

This one is slightly complicated by how Youtube's android/ios API responds. Whereas most other aspects of the API respond in a fairly straightforward manner, the order of the comment and the data for the comments are separated.

For example, given this request

curl --request POST \
  --url 'https://www.youtube.com/youtubei/v1/next?key=AIzaSyDCU8hByM-4DrUqRUYnGn-3llEO78bcxq8' \
  --header 'Content-Type: application/json' \
  --data '{
    "context": {
        "client": {
            "clientName": "ANDROID",
            "clientVersion": "17.20",
            "hl": "en"
        }
    },
    "continuation": "Eg0SC2RRdzR3OVdnWGNRGAYyJSIRIgtkUXc0dzlXZ1hjUTAAeAJCEGNvbW1lbnRzLXNlY3Rpb24%3D"
}'

The response will be in two parts as follows (parts are cut for readability)

JSON Response
{
  "continuationContents": {
    "itemSectionContinuation": {
      "contents": [
        {
          "elementRenderer": {
            "newElement": {
              "childElements": [
                {
                  "type": {
                    "componentType": {
                      "model": {
                        "commentThreadModel": {
                          "hidePinnedComments": true,
                          "trackingParams": "CK0REMJ1GI4CIhMIzvLZhsmM_QIVXKFLBR1JegGU",
                          "hideSeparator": false,
                          "commentKey": "EhpVZ3phcnFqYWFQQzdUYkZJTk54NEFhQUJBZyAoKAE%3D",
                          "sharedKey": "EgAgKygB",
                          "surfaceKeys": {
                            "commentSurfaceKey": "Eh1VZ3phcnFqYWFQQzdUYkZJTk54NEFhQUJBZy8xMiBPKAE%3D",
                            "toolbarSurfaceKey": "Eh1VZ3phcnFqYWFQQzdUYkZJTk54NEFhQUJBZy8xMiBGKAE%3D"
                          },
                          "pinnedStateKey": "EhpVZ3phcnFqYWFQQzdUYkZJTk54NEFhQUJBZyBNKAE%3D",
                          "composerDraftEntityKey": "N/A",
                          "inlineRepliesKey": "empty_inline_replies"
                        }
                      }
                    }
                  }
                }
              ]
            }
          }
        }
      ]
    }
  },
  "frameworkUpdates": {
    "entityBatchUpdate": {
      "mutations": [
        {
          "entityKey": "EhpVZ3phcnFqYWFQQzdUYkZJTk54NEFhQUJBZyAoKAE%3D",
          "type": "ENTITY_MUTATION_TYPE_REPLACE",
          "payload": {
            "commentEntityPayload": {
              "key": "EhpVZ3phcnFqYWFQQzdUYkZJTk54NEFhQUJBZyAoKAE%3D",
              "properties": {
                "commentId": "UgzarqjaaPC7TbFINNx4AaABAg",
                "content": {
                  "content": "1 BILLION views for Never Gonna Give You Up!  Amazing, crazy, wonderful! Rick ♥️"
                },
                "publishedTime": "1y ago",
                "replyLevel": 0,
                "authorButtonA11y": "Rick Astley",
                "toolbarStateKey": "EhpVZ3phcnFqYWFQQzdUYkZJTk54NEFhQUJBZyAsKAE%3D",
                "translateButtonEntityKey": "EhpVZ3phcnFqYWFQQzdUYkZJTk54NEFhQUJBZyD_ASgB"
              },
              "author": {
                "channelId": "UCuAXFkgsw1L7xaCfnd5JJOw",
                "displayName": "Rick Astley",
                "avatarThumbnailUrl": "https://yt3.ggpht.com/BbWaWU-qyR5nfxxXclxsI8zepppYL5x1agIPGfRdXFm5fPEewDsRRWg4x6P6fdKNhj84GoUpUI4=s88-c-k-c0x00ffffff-no-rj",
                "isVerified": false,
                "isCurrentUser": false,
                "isCreator": true,
                "channelCommand": {
                  "innertubeCommand": {
                    "browseEndpoint": {
                      "browseId": "UCuAXFkgsw1L7xaCfnd5JJOw",
                      "canonicalBaseUrl": "/channel/UCuAXFkgsw1L7xaCfnd5JJOw"
                    }
                  }
                },
                "innerBadgeA11y": "Rick Astley, Official Artist Channel",
                "isArtist": true
              },
              "toolbar": {
                "likeCountLiked": "1.1M",
                "likeCountNotliked": "1.1M",
                "replyCount": "500",
                "creatorThumbnailUrl": "https://yt3.ggpht.com/BbWaWU-qyR5nfxxXclxsI8zepppYL5x1agIPGfRdXFm5fPEewDsRRWg4x6P6fdKNhj84GoUpUI4=s88-c-k-c0x00ffffff-no-rj",
                "likeButtonA11y": "Like this comment along with 1.1M other people",
                "engagementToolbarStyle": {
                  "value": "ENGAGEMENT_TOOLBAR_STYLE_VALUE_DEFAULT"
                },
                "likeCountA11y": "1.1M likes",
                "replyCountA11y": "500 replies"
              },
              "avatar": {
                "image": {
                  "sources": [
                    {
                      "url": "https://yt3.ggpht.com/BbWaWU-qyR5nfxxXclxsI8zepppYL5x1agIPGfRdXFm5fPEewDsRRWg4x6P6fdKNhj84GoUpUI4=s88-c-k-c0x00ffffff-no-rj",
                      "width": 88,
                      "height": 88
                    }
                  ]
                },
                "accessibilityText": "Rick Astley",
                "avatarImageSize": "AVATAR_SIZE_XS",
                "endpoint": {
                  "innertubeCommand": {
                    "browseEndpoint": {
                      "browseId": "UCuAXFkgsw1L7xaCfnd5JJOw",
                      "canonicalBaseUrl": "/channel/UCuAXFkgsw1L7xaCfnd5JJOw"
                    }
                  }
                }
              }
            }
          }
        }
      ]
    }
  }
}

Note the commentKey and entityKey fields under continuationContents and frameworkUpdates respectively. I am not sure how best to parse this, so any input will be appreciated.

Of course, there is the workaround of calling the web version of the API instead, but that will mean the comments in VueTube will not be able to access some app-exclusive features from the Youtube app without some serious workarounds.

@LuanRT
Copy link

LuanRT commented Feb 11, 2023

Of course, there is the workaround of calling the web version of the API instead, but that will mean the comments in VueTube will not be able to access some app-exclusive features from the Youtube app without some serious workarounds.

In my opinion, it might make more sense to use the web API. The Android one is guaranteed to almost always give you a 1-2MB JSON response (especially the browse endpoint), so it'll just slow things down and give you headaches. It works great for the official apps because they're using protobuf, which is much faster and lightweight, but definitely not here.

Sign up for free to subscribe to this conversation on GitHub. Already have an account? Sign in.
Labels
None yet
Projects
None yet
Development

No branches or pull requests

2 participants