Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/python/331.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Python YouTube API订户计数不正确,因为频道名称相同_Python_Google Api_Youtube_Youtube Api_Youtube Data Api - Fatal编程技术网

Python YouTube API订户计数不正确,因为频道名称相同

Python YouTube API订户计数不正确,因为频道名称相同,python,google-api,youtube,youtube-api,youtube-data-api,Python,Google Api,Youtube,Youtube Api,Youtube Data Api,代码: 这没关系: 输入:谷歌 输出:谷歌有9640000个订户!呜呼 这是而不是: 输入:Markiplier 输出:Markiplier拥有84900个订户!呜呼!(实际上,他的主频道拥有2780万用户) 我遇到了同名频道的不幸问题。如何防止这种情况发生?你必须承认YouTube网站的以下特点:它(通过设计)允许非常相同的名称——在你的例子中是Markiplier——成为一个频道的自定义URL,同时也是另一个频道的(传统)用户名 请阅读这篇文章,回答一个非常相关的问题。从这里,您将很好地了解

代码:

这没关系:

输入:谷歌

输出:谷歌有9640000个订户!呜呼

这是而不是

输入:Markiplier

输出:Markiplier拥有84900个订户!呜呼!(实际上,他的主频道拥有2780万用户)


我遇到了同名频道的不幸问题。如何防止这种情况发生?

你必须承认YouTube网站的以下特点:它(通过设计)允许非常相同的名称——在你的例子中是
Markiplier
——成为一个频道的自定义URL,同时也是另一个频道的(传统)用户名

请阅读这篇文章,回答一个非常相关的问题。从这里,您将很好地了解这两个(有时令人困惑)概念之间的区别:频道用户名和频道自定义URL

具体地说,如果您使用我的Python3公共脚本,您将看到有两个不同的通道显示我刚才描述的w.r.t.名称
Markiplier

import requests
import json

key = 'key' #api key
url = 'https://www.googleapis.com/youtube/v3/channels?part=statistics&key='+ key +'&forUsername='

youtuber = input('What\'s the name of the youtuber: ') #get youtuber name
url += youtuber.lower() #youtuber name all lowercase

r = requests.get(url) #get data from youtuber channel webpage

try:
    subs = json.loads(r.text)['items'][0]['statistics']['subscriberCount']
except:
    print('Your youtuber doesn\'t exist ):')
    exit()
print(youtuber,"has",subs,"subscribers! Woohoo!")
请注意,
youtube search.py
需要一个有效的API键作为命令行选项
--app key
的参数传递给它,或者作为环境变量
youtube\u DATA\u app\u key
传递给它。(使用命令行选项
--help
获取简要的帮助信息。)

以下URL上的进一步API端点查询:

https://www.googleapis.com/youtube/v3/channels?id=UCxubOASK0482qC5psq89MsQ,UC7_YxT-KID8kRbqZo7MyscQ&part=id,snippet,statistics&fields=items(id,snippet(title,description,customUrl),statistics(subscriberCount))&maxResults=2&key=…

将确认您所经历的差异:

{
“项目”:[
{
“id”:“UCXUBOASK0482QC5PSK89MSQ”,
“片段”:{
“标题”:“markiplier”,
“说明”:“我将不再更新此频道!我的所有新视频都将上载到markiplierGAME!请重新订阅该频道以保持我的视频的最新状态!”
},
“统计”:{
“subscriberCount”:“85000”
}
},
{
“id”:“UC7_YxT-KID8kRbqZo7MyscQ”,
“片段”:{
“标题”:“Markiplier”,
“描述”:“欢迎来到Markiplier!在这里您可以找到一些有趣的游戏视频、原创喜剧小品、动画模仿和其他娱乐节目!如果这听起来像您喜欢的频道,请立即订阅!\n\n慈善募捐总额▶ $3,000,000+",
“customUrl”:“markiplier”
},
“统计”:{
“subscriberCount”:“27800000”
}
}
]
}
现在,为了总结我的观点,w.r.t.你的问题——我遇到了一个不幸的问题,即同名频道。我如何防止这种情况发生?--,我注意到:

  • 确保您希望从API获得什么:自定义URL和用户名是不同的API概念
  • 如果您试图获取有关您拥有其用户名的频道的信息,请使用
    channel.list
    端点,并使用相应的
    forUsername
    参数进行查询
  • 如果您试图获取有关给定自定义URL的频道的信息,请使用我在回答此问题时描述的过程和Python代码。还要为该过程可能出现的故障做好准备(由于API当前的实现方式,该过程很可能在某些有效的自定义URL上失败)
  • $ python3 youtube-search.py --user-name Markiplier
    UCxubOASK0482qC5psq89MsQ
    
    $ python3 youtube-search.py --custom-url Markiplier
    UC7_YxT-KID8kRbqZo7MyscQ