【问题标题】:Getting channel subscriptions list by Youtube Data Api通过 Youtube Data Api 获取频道订阅列表
【发布时间】:2020-10-26 13:38:23
【问题描述】:

有没有办法按最近订阅的顺序来排序 Youtube 频道的订阅列表?

youtube
       .subscriptions()
       .list("snippet")
       .setOrder("")// relevance, unread, alphabetical
       .setMaxResults((long) 1000) // it is not affecting, the max limit is 50
       .setMine(true)
       .execute();

根据文档,我一次最多只能获取50个项目,并且我只有三个订单类型参数相关性未读字母强>.

但我需要访问我最后订阅的频道。如果有人帮助我处理这个问题,我将不胜感激。

提前致谢!

【问题讨论】:

    标签: android youtube youtube-data-api


    【解决方案1】:

    我从您的问题中了解到,您想在 Youtube Data API V3 的帮助下检查您是否正在关注特定的 youtube 频道。

    为此,document 中提到您可以使用forChannelId 参数。

    此外,Youtube Data API 有一个游乐场,可让您查看查询结果。您可以在forChannelId字段中简单地放置一个channelId,如果您未订阅指定频道,结果将返回一个空数组,如果您订阅了该频道,则结果将返回该指定频道的数据。

    您可以从 Java 应用发出一个简单的请求以获取结果。在此代码示例中,我正在检查授权的 youtube API 用户是否订阅了Firebase Youtube Channel

    SubscriptionListResponse response = request.setForChannelId("UC_x5XG1OV2P6uZZ5FSM9Ttw")
            .setMine(true)
            .execute();
    

    并且响应将在您将提出的请求中包含指定渠道的详细信息。我还分享了我在上面分享的请求的响应。

    {
      "kind": "youtube#SubscriptionListResponse",
      "etag": "zCQ7lTwIBgdyVsQmbymEu-fUgjU",
      "pageInfo": {
        "totalResults": 1,
        "resultsPerPage": 5
      },
      "items": [
        {
          "kind": "youtube#subscription",
          "etag": "A-G_B0BnSqn7XtJi7BgHJEk9L3Q",
          "id": "uTEDDg6jpPBwnsim9moHkataEljshwFopudOgIy34nk",
          "snippet": {
            "publishedAt": "2020-07-08T14:02:43.789000Z",
            "title": "Google Developers",
            "description": "The Google Developers channel features talks from events, educational series, best practices, tips, and the latest updates across our products and platforms.",
            "resourceId": {
              "kind": "youtube#channel",
              "channelId": "UC_x5XG1OV2P6uZZ5FSM9Ttw"
            },
            "channelId": "UCC77fYySvfP7p-6QGaa-3lw",
            "thumbnails": {
              "default": {
                "url": "https://yt3.ggpht.com/-Fgp8KFpgQqE/AAAAAAAAAAI/AAAAAAAAAAA/Wyh1vV5Up0I/s88-c-k-no-mo-rj-c0xffffff/photo.jpg"
              },
              "medium": {
                "url": "https://yt3.ggpht.com/-Fgp8KFpgQqE/AAAAAAAAAAI/AAAAAAAAAAA/Wyh1vV5Up0I/s240-c-k-no-mo-rj-c0xffffff/photo.jpg"
              },
              "high": {
                "url": "https://yt3.ggpht.com/-Fgp8KFpgQqE/AAAAAAAAAAI/AAAAAAAAAAA/Wyh1vV5Up0I/s800-c-k-no-mo-rj-c0xffffff/photo.jpg"
              }
            }
          }
        }
      ]
    }
    

    【讨论】:

      【解决方案2】:

      根据the docs,您可以使用以下参数:

      myRecentSubscribers(布尔值)

      此参数只能在经过适当授权的请求中使用。将此参数的值设置为 true 以按时间倒序(最新的优先)检索经过身份验证的用户的订阅者的订阅源。

      请注意,此参数仅支持检索经过身份验证的用户频道的最近 1000 个订阅者。要检索完整的订阅者列表,请使用 mySubscribers 参数。该参数不按特定顺序返回订阅者,不限制可检索的订阅者数量。

      也就是说:在上面代码的设置器序列中插入类似.setMyRecentSubscribers(true) 的内容。 (您也可以删除setChannelId setter 调用,因为通过要求您被授权调用此端点,API 已经知道您的调用所指的通道。)

      另请注意,参数的maxResults 最大值为50。要仅接收最近的订阅者,请在上面的设置器序列中使用.setMaxResults(1)


      如果您想获取所有订阅的列表,那么有以下参数:

      我的(布尔值)

      此参数只能在正确的authorized request 中使用。将此参数的值设置为 true 以检索经过身份验证的用户订阅的提要。

      在你的二传手序列中有.setMine(true)(没有.setChannelId)。

      您必须重复调用 API 的端点来获取您的所有订阅,因为该端点提供了paginated result sets。获得所有订阅后,按snippet.publishedAt 对其进行排序。

      如果您只想获取最近订阅的频道,而不是排序算法,则在同一属性上使用最大算法(O(n) 而不是O(n log n))就足够了。

      有关如何在代码中实现分页的示例,请查看 Google 自己提供的一些 sample code

      【讨论】:

      • 感谢您的回复!但我已经看到了这一点,但它是针对获取订阅者的,我正在寻找的是订阅。我的意思是我最近订阅的频道不是我的订阅者列表。
      • @haliltprkk,如果这是您想要的方式,那么您帖子的文字会产生误导;为了达到您想要的结果,除了请求您的所有订阅列表(.setMine(true) 没有.setChannelId(...))然后对属性snippet.publishedAt 进行排序之外,我没有看到其他解决方案。
      • @haliltprkk:请注意,此 API 端点生成 paginated result sets;也就是说,您必须重复调用传递给它的端点正确的pageToken 参数。
      • 嗯,它看起来是唯一的分页方式。我希望它会有类似.setMyRecentSubscribers(true) 的东西。非常感谢?
      • @haliltprkk:你的意思是setMyRecentSubscriptions(true),对吧?
      猜你喜欢
      • 2015-03-27
      • 2019-02-15
      • 1970-01-01
      • 2022-12-24
      • 1970-01-01
      • 1970-01-01
      • 2021-02-19
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多