Как я могу получить идентификатор канала YouTube, используя URL-адрес названия канала?

Я сделал программу, в которой пользователи указывают URL-адрес канала YouTube, а взамен я показываю пользователю идентификатор его канала.

Лайк, если кто-то поставит URL вида: https://youtube.com/@AndreoBee то я верну его ID канала.

const axios = require('axios');

async function getChannelId(url) {
  const channelUsername = url.split('/').pop();
  const response = await axios.get(`https://www.googleapis.com/youtube/v3/channels?part=id&forUsername=${channelUsername}&key=myapi`);

  if (response.data.items.length === 0) {
    throw new Error(`Channel not found: ${url}`);
  }

  console.info(response.data.items[0].id);
}

getChannelId('https://www.youtube.com/@AndreoBee');

Выход:

/home/runner/ytcheck/index.js:7 если (ответ.данные.элементы.длина === 0) { ^

TypeError: невозможно прочитать свойства неопределенного (чтение «длина») в getChannelId (/home/runner/ytcheck/index.js:7:27)

Ошибка говорит, что response.data.items не определено. Убедитесь, что ответ соответствует вашему мнению.

phuzi 07.02.2023 12:50

Это основная проблема, она не дает поле элементов в response.data

Ansh Tyagi 07.02.2023 13:10

Официальные API YouTube не поддерживают дескрипторы каналов, продублируйте этот вопрос.

Benjamin Loison 07.02.2023 13:34
Поведение ключевого слова "this" в стрелочной функции в сравнении с нормальной функцией
Поведение ключевого слова "this" в стрелочной функции в сравнении с нормальной функцией
В JavaScript одним из самых запутанных понятий является поведение ключевого слова "this" в стрелочной и обычной функциях.
Концепция локализации и ее применение в приложениях React ⚡️
Концепция локализации и ее применение в приложениях React ⚡️
Локализация - это процесс адаптации приложения к различным языкам и культурным требованиям. Это позволяет пользователям получить опыт, соответствующий...
Улучшение производительности загрузки с помощью Google Tag Manager и атрибута Defer
Улучшение производительности загрузки с помощью Google Tag Manager и атрибута Defer
В настоящее время производительность загрузки веб-сайта имеет решающее значение не только для удобства пользователей, но и для ранжирования в...
Безумие обратных вызовов в javascript [JS]
Безумие обратных вызовов в javascript [JS]
Здравствуйте! Юный падаван 🚀. Присоединяйся ко мне, чтобы разобраться в одной из самых запутанных концепций, когда вы начинаете изучать мир...
Система управления парковками с использованием HTML, CSS и JavaScript
Система управления парковками с использованием HTML, CSS и JavaScript
Веб-сайт по управлению парковками был создан с использованием HTML, CSS и JavaScript. Это простой сайт, ничего вычурного. Основная цель -...
JavaScript Вопросы с множественным выбором и ответы
JavaScript Вопросы с множественным выбором и ответы
Если вы ищете платформу, которая предоставляет вам бесплатный тест JavaScript MCQ (Multiple Choice Questions With Answers) для оценки ваших знаний,...
0
3
114
2
Перейти к ответу Данный вопрос помечен как решенный

Ответы 2

Вы можете получить идентификатор канала, используя /search Youtube API. Вместо этого используйте это:

https://www.googleapis.com/youtube/v3/channels?part=id&forUsername=${channelUsername}&key=myapi

Попробуйте с этой конечной точкой:

https://youtube.googleapis.com/youtube/v3/search?part=snippet&maxResults=25&q=${channelUsername}&type=channel&key=myapi

Он не дает правильный идентификатор. Правильный идентификатор = UCjdjyjdcdmldCK5XuuWbn1A, который он дает = UCnmkfAgbsF2dPt4DL2ZqUrQ

Ansh Tyagi 07.02.2023 13:08

Вы пробовали с другим индексом? response.data.items[1].id

Jordy 07.02.2023 13:15

Проблема в том, что он не показывает нужный мне канал, он показывает все остальные каналы

Ansh Tyagi 07.02.2023 14:31

Как насчет этого https://yt.lemnoslife.com/channels?handle=@AndreoBee

Jordy 07.02.2023 14:40

хорошо, этот URL сработал. Скажите мне, этот URL-адрес также содержит ограничения, такие как Google API

Ansh Tyagi 07.02.2023 14:53

Согласно https://yt.lemnoslife.com/, на данный момент нет ограничений, но будущее, которое может произойти

Jordy 07.02.2023 15:11
Ответ принят как подходящий

Одним из вариантов использования YouTube Data API может быть:

  • Используйте конечную точку search:list для поиска каналов, соответствующих критериям — в данном случае имени/дескриптору канала.

Пример:

Поиск каналов с именем «AndreoBee» — вы получаете это значение в переменной channelUsername в вашем коде:

URL-адрес:

https://youtube.googleapis.com/youtube/v3/search?part=id%2Csnippet&maxResults=10&q=AndreoBee&type=channel&key=[YOUR_API_KEY]

Ответ:

{
  "kind": "youtube#searchListResponse",
  "etag": "K2G-sXJIFnrJFyMaoDvw4XMBym4",
  "nextPageToken": "CAoQAA",
  "regionCode": "CO",
  "pageInfo": {
    "totalResults": 6740,
    "resultsPerPage": 10
  },
  "items": [
    {
      "kind": "youtube#searchResult",
      "etag": "oeyNublAqxB8TOEQbtwA4k0Oqgs",
      "id": {
        "kind": "youtube#channel",
        "channelId": "UCjdjyjdcdmldCK5XuuWbn1A"
      },
      "snippet": {
        "publishedAt": "2020-01-21T15:12:27Z",
        "channelId": "UCjdjyjdcdmldCK5XuuWbn1A",
        "title": "AndreoBee",
        "description": "I am a Youtuber.",
        "thumbnails": {
          "default": {
            "url": "https://yt3.ggpht.com/ytc/AL5GRJW_gCXDGAviuBWh0GwUO4V5Ia4JNYzC0Mp9bYhigA=s88-c-k-c0xffffffff-no-rj-mo"
          },
          "medium": {
            "url": "https://yt3.ggpht.com/ytc/AL5GRJW_gCXDGAviuBWh0GwUO4V5Ia4JNYzC0Mp9bYhigA=s240-c-k-c0xffffffff-no-rj-mo"
          },
          "high": {
            "url": "https://yt3.ggpht.com/ytc/AL5GRJW_gCXDGAviuBWh0GwUO4V5Ia4JNYzC0Mp9bYhigA=s800-c-k-c0xffffffff-no-rj-mo"
          }
        },
        "channelTitle": "AndreoBee",
        "liveBroadcastContent": "none",
        "publishTime": "2020-01-21T15:12:27Z"
      }
    },
    {
      "kind": "youtube#searchResult",
      "etag": "iG8-NwZab0LLB245AY2MkJ6pexI",
      "id": {
        "kind": "youtube#channel",
        "channelId": "UC2Xpzteb9hbamaeEHZRxPCw"
      },
      "snippet": {
        "publishedAt": "2020-11-27T07:07:23Z",
        "channelId": "UC2Xpzteb9hbamaeEHZRxPCw",
        "title": "AndreoBee",
        "description": "This is my backup channel guys ;)",
        "thumbnails": {
          "default": {
            "url": "https://yt3.ggpht.com/ytc/AL5GRJVgMinAIKpEHBPjM2Os8fHFKcsxtTyTIflqTwVR=s88-c-k-c0xffffffff-no-rj-mo"
          },
          "medium": {
            "url": "https://yt3.ggpht.com/ytc/AL5GRJVgMinAIKpEHBPjM2Os8fHFKcsxtTyTIflqTwVR=s240-c-k-c0xffffffff-no-rj-mo"
          },
          "high": {
            "url": "https://yt3.ggpht.com/ytc/AL5GRJVgMinAIKpEHBPjM2Os8fHFKcsxtTyTIflqTwVR=s800-c-k-c0xffffffff-no-rj-mo"
          }
        },
        "channelTitle": "AndreoBee",
        "liveBroadcastContent": "none",
        "publishTime": "2020-11-27T07:07:23Z"
      }
    },
    {
      "kind": "youtube#searchResult",
      "etag": "3X2zApHnPAW2p2awm4tIETn9ybI",
      "id": {
        "kind": "youtube#channel",
        "channelId": "UCp6iawa7GPTszoJxOiG5d_Q"
      },
      "snippet": {
        "publishedAt": "2021-03-15T16:19:39Z",
        "channelId": "UCp6iawa7GPTszoJxOiG5d_Q",
        "title": "AndreoBee",
        "description": "Welcome my ARS GAMING YouTube channel I am uploading full movies or shorts and how to download movies on my YouTube ...",
        "thumbnails": {
          "default": {
            "url": "https://yt3.ggpht.com/Z2CC1zWbsD3k-z9cX0RlPBstKELZw0_sUgFPggIt-DhVkJWL8iJG8pCLizxr3StB8lbZX9PT7U8=s88-c-k-c0xffffffff-no-rj-mo"
          },
          "medium": {
            "url": "https://yt3.ggpht.com/Z2CC1zWbsD3k-z9cX0RlPBstKELZw0_sUgFPggIt-DhVkJWL8iJG8pCLizxr3StB8lbZX9PT7U8=s240-c-k-c0xffffffff-no-rj-mo"
          },
          "high": {
            "url": "https://yt3.ggpht.com/Z2CC1zWbsD3k-z9cX0RlPBstKELZw0_sUgFPggIt-DhVkJWL8iJG8pCLizxr3StB8lbZX9PT7U8=s800-c-k-c0xffffffff-no-rj-mo"
          }
        },
        "channelTitle": "AndreoBee",
        "liveBroadcastContent": "none",
        "publishTime": "2021-03-15T16:19:39Z"
      }
    },
    {
      "kind": "youtube#searchResult",
      "etag": "VHP4HsDcIiETPleAWN0cSC7fvbE",
      "id": {
        "kind": "youtube#channel",
        "channelId": "UCWLY3sMMYHH3-9xQ2lhFj8g"
      },
      "snippet": {
        "publishedAt": "2022-06-27T01:08:10Z",
        "channelId": "UCWLY3sMMYHH3-9xQ2lhFj8g",
        "title": "AndreoBee",
        "description": "Hii guus i am Andreo I hope you like my videos and please support me guys thank you have a good day.",
        "thumbnails": {
          "default": {
            "url": "https://yt3.ggpht.com/bHaKoA8QZnZSJXfmK7udtrzxmpCOOhpTHIoP_RQUD2KLv9qNXtLLKY_bewbaQGdfZGIPCcO9Ag=s88-c-k-c0xffffffff-no-rj-mo"
          },
          "medium": {
            "url": "https://yt3.ggpht.com/bHaKoA8QZnZSJXfmK7udtrzxmpCOOhpTHIoP_RQUD2KLv9qNXtLLKY_bewbaQGdfZGIPCcO9Ag=s240-c-k-c0xffffffff-no-rj-mo"
          },
          "high": {
            "url": "https://yt3.ggpht.com/bHaKoA8QZnZSJXfmK7udtrzxmpCOOhpTHIoP_RQUD2KLv9qNXtLLKY_bewbaQGdfZGIPCcO9Ag=s800-c-k-c0xffffffff-no-rj-mo"
          }
        },
        "channelTitle": "AndreoBee",
        "liveBroadcastContent": "none",
        "publishTime": "2022-06-27T01:08:10Z"
      }
    },
    {
      "kind": "youtube#searchResult",
      "etag": "01NvBqsdnNimHwnwHnGkeVOhJ-8",
      "id": {
        "kind": "youtube#channel",
        "channelId": "UC3yVv5tuR3tBcVf97j33mQQ"
      },
      "snippet": {
        "publishedAt": "2020-12-12T14:31:22Z",
        "channelId": "UC3yVv5tuR3tBcVf97j33mQQ",
        "title": "Andreobee",
        "description": "Describe the game All best game for play on Android in 2GB ram and 3GB phone.",
        "thumbnails": {
          "default": {
            "url": "https://yt3.ggpht.com/ytc/AL5GRJXval25GhQFpbqoFgQXvWBol5aqf4ZCOluMMOe-=s88-c-k-c0xffffffff-no-rj-mo"
          },
          "medium": {
            "url": "https://yt3.ggpht.com/ytc/AL5GRJXval25GhQFpbqoFgQXvWBol5aqf4ZCOluMMOe-=s240-c-k-c0xffffffff-no-rj-mo"
          },
          "high": {
            "url": "https://yt3.ggpht.com/ytc/AL5GRJXval25GhQFpbqoFgQXvWBol5aqf4ZCOluMMOe-=s800-c-k-c0xffffffff-no-rj-mo"
          }
        },
        "channelTitle": "Andreobee",
        "liveBroadcastContent": "none",
        "publishTime": "2020-12-12T14:31:22Z"
      }
    },
    {
      "kind": "youtube#searchResult",
      "etag": "B5TOx4aFyuua9eQVa-QBbKDjIng",
      "id": {
        "kind": "youtube#channel",
        "channelId": "UCBR0QlbTtbT52oFmmDZIamw"
      },
      "snippet": {
        "publishedAt": "2022-02-01T14:44:18Z",
        "channelId": "UCBR0QlbTtbT52oFmmDZIamw",
        "title": "AndreoBee",
        "description": "",
        "thumbnails": {
          "default": {
            "url": "https://yt3.ggpht.com/TfGkwtvsAvJdWnMOdRLRn2HKRvnVj872dxLZdZ_ghFwpF4SrY2BqBwJ3syc1V6HLL3LyJiSABQ=s88-c-k-c0xffffffff-no-rj-mo"
          },
          "medium": {
            "url": "https://yt3.ggpht.com/TfGkwtvsAvJdWnMOdRLRn2HKRvnVj872dxLZdZ_ghFwpF4SrY2BqBwJ3syc1V6HLL3LyJiSABQ=s240-c-k-c0xffffffff-no-rj-mo"
          },
          "high": {
            "url": "https://yt3.ggpht.com/TfGkwtvsAvJdWnMOdRLRn2HKRvnVj872dxLZdZ_ghFwpF4SrY2BqBwJ3syc1V6HLL3LyJiSABQ=s800-c-k-c0xffffffff-no-rj-mo"
          }
        },
        "channelTitle": "AndreoBee",
        "liveBroadcastContent": "none",
        "publishTime": "2022-02-01T14:44:18Z"
      }
    },
    {
      "kind": "youtube#searchResult",
      "etag": "t04J8v3aRhQhmFsyv54ddTXGDMQ",
      "id": {
        "kind": "youtube#channel",
        "channelId": "UCBvdbv05Cb4Ulf_PlunMJtA"
      },
      "snippet": {
        "publishedAt": "2021-08-12T06:59:40Z",
        "channelId": "UCBvdbv05Cb4Ulf_PlunMJtA",
        "title": "AndreoBee",
        "description": "",
        "thumbnails": {
          "default": {
            "url": "https://yt3.ggpht.com/S3J1R-s_P481lUpBULskSiQ0Pv-Z_iLnE_YrZ10OL1cydCFx6a1aOXvRJskMxY-gVpa8cqwuzQ=s88-c-k-c0xffffffff-no-rj-mo"
          },
          "medium": {
            "url": "https://yt3.ggpht.com/S3J1R-s_P481lUpBULskSiQ0Pv-Z_iLnE_YrZ10OL1cydCFx6a1aOXvRJskMxY-gVpa8cqwuzQ=s240-c-k-c0xffffffff-no-rj-mo"
          },
          "high": {
            "url": "https://yt3.ggpht.com/S3J1R-s_P481lUpBULskSiQ0Pv-Z_iLnE_YrZ10OL1cydCFx6a1aOXvRJskMxY-gVpa8cqwuzQ=s800-c-k-c0xffffffff-no-rj-mo"
          }
        },
        "channelTitle": "AndreoBee",
        "liveBroadcastContent": "none",
        "publishTime": "2021-08-12T06:59:40Z"
      }
    },
    {
      "kind": "youtube#searchResult",
      "etag": "dmhfSWj6r1CzXr4yopXkorSsVL0",
      "id": {
        "kind": "youtube#channel",
        "channelId": "UCvXV0HSenVdIpdAuogNPuOQ"
      },
      "snippet": {
        "publishedAt": "2022-11-02T12:01:42Z",
        "channelId": "UCvXV0HSenVdIpdAuogNPuOQ",
        "title": "AndreoBee",
        "description": "PLZ  SUB.....",
        "thumbnails": {
          "default": {
            "url": "https://yt3.ggpht.com/NfH1RxDcGEbLe8cOoi7VwFz-dfUcAToV-84rag4x1CIQM8GSnZirguR5SI30M3bZnMP80tA=s88-c-k-c0xffffffff-no-rj-mo"
          },
          "medium": {
            "url": "https://yt3.ggpht.com/NfH1RxDcGEbLe8cOoi7VwFz-dfUcAToV-84rag4x1CIQM8GSnZirguR5SI30M3bZnMP80tA=s240-c-k-c0xffffffff-no-rj-mo"
          },
          "high": {
            "url": "https://yt3.ggpht.com/NfH1RxDcGEbLe8cOoi7VwFz-dfUcAToV-84rag4x1CIQM8GSnZirguR5SI30M3bZnMP80tA=s800-c-k-c0xffffffff-no-rj-mo"
          }
        },
        "channelTitle": "AndreoBee",
        "liveBroadcastContent": "none",
        "publishTime": "2022-11-02T12:01:42Z"
      }
    },
    {
      "kind": "youtube#searchResult",
      "etag": "c5Y3zUOZKiyJ-pI7mrLdi4WPegc",
      "id": {
        "kind": "youtube#channel",
        "channelId": "UCmrR9PVxSVRLdp2HK_xP2yA"
      },
      "snippet": {
        "publishedAt": "2021-09-13T06:16:47Z",
        "channelId": "UCmrR9PVxSVRLdp2HK_xP2yA",
        "title": "ANDREOBEE",
        "description": "AndreoBee fan Club For business inquiries ANDREOBEEofficial.",
        "thumbnails": {
          "default": {
            "url": "https://yt3.ggpht.com/CtsMEUKLJC5apm5bX7vEr_3g7nIJn-GfjLodWXLVLF-jFGfyXhFBTiLUvOU8l51e3kVPph5MUQ=s88-c-k-c0xffffffff-no-rj-mo"
          },
          "medium": {
            "url": "https://yt3.ggpht.com/CtsMEUKLJC5apm5bX7vEr_3g7nIJn-GfjLodWXLVLF-jFGfyXhFBTiLUvOU8l51e3kVPph5MUQ=s240-c-k-c0xffffffff-no-rj-mo"
          },
          "high": {
            "url": "https://yt3.ggpht.com/CtsMEUKLJC5apm5bX7vEr_3g7nIJn-GfjLodWXLVLF-jFGfyXhFBTiLUvOU8l51e3kVPph5MUQ=s800-c-k-c0xffffffff-no-rj-mo"
          }
        },
        "channelTitle": "ANDREOBEE",
        "liveBroadcastContent": "none",
        "publishTime": "2021-09-13T06:16:47Z"
      }
    },
    {
      "kind": "youtube#searchResult",
      "etag": "-lb0jmjUJcQsLJDGHH7KVs14-nU",
      "id": {
        "kind": "youtube#channel",
        "channelId": "UCvqm9nqHYYehmq7FcorjS4Q"
      },
      "snippet": {
        "publishedAt": "2021-01-13T05:54:00Z",
        "channelId": "UCvqm9nqHYYehmq7FcorjS4Q",
        "title": "AndreoBEE",
        "description": "",
        "thumbnails": {
          "default": {
            "url": "https://yt3.ggpht.com/ytc/AL5GRJUIkodf8aTOx2ZcNoyycMHQqgqNvehuXN_iz9Ii=s88-c-k-c0xffffffff-no-rj-mo"
          },
          "medium": {
            "url": "https://yt3.ggpht.com/ytc/AL5GRJUIkodf8aTOx2ZcNoyycMHQqgqNvehuXN_iz9Ii=s240-c-k-c0xffffffff-no-rj-mo"
          },
          "high": {
            "url": "https://yt3.ggpht.com/ytc/AL5GRJUIkodf8aTOx2ZcNoyycMHQqgqNvehuXN_iz9Ii=s800-c-k-c0xffffffff-no-rj-mo"
          }
        },
        "channelTitle": "AndreoBEE",
        "liveBroadcastContent": "none",
        "publishTime": "2021-01-13T05:54:00Z"
      }
    }
  ]
}

NB: в этом случае я соглашусь с тем, что первым результатом является канал, который я ищу, однако обратите внимание, что вы можете получить более одного канала, который соответствует названию канала.

Чтобы определить, какой из результатов поиска соответствует искомому каналу, вы можете затем сделать запрос к конечной точке канала: список, передав channel_id результата поиска, и увидеть их значение customUrl и/ или проверьте канал, на котором больше видео/подписчиков/и т. д.

Проверьте мой ответ для получения дополнительной информации.

Другие вопросы по теме