如何通过YouTube合作伙伴API获取特定视频的内容所有者信息?

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了如何通过YouTube合作伙伴API获取特定视频的内容所有者信息?相关的知识,希望对你有一定的参考价值。

有没有办法通过YouTube合作伙伴API获取特定视频的内容所有者信息(归因)?

例如,这个视频:http://www.youtube.com/watch?v=I67cgXr6L6o&feature=c4-overview&list=UUGnjeahCJW1AF34HBmQTJ-Q归功于VEVO。

有没有办法通过API以某种方式获取该信息?

答案

现在可能:

https://developers.google.com/youtube/partner/docs/v1/ownership/

[编辑]

我已经使用this sample创建了下面的剪辑,并成功获得了资产内容所有者。您需要正确设置python环境和clients_secrets.file

#!/usr/bin/python

import httplib2
import os
import sys
import logging
import requests
import json
import time

from apiclient.discovery import build
from oauth2client.file import Storage
from oauth2client.client import flow_from_clientsecrets
from oauth2client.tools import argparser, run_flow
from symbol import for_stmt







# The CLIENT_SECRETS_FILE variable specifies the name of a file that contains
# the OAuth 2.0 information for this application, including its client_id and
# client_secret. You can acquire an OAuth 2.0 client ID and client secret from
# the Google Developers Console at
# https://console.developers.google.com/.
# Please ensure that you have enabled the YouTube Data API for your project.
# For more information about using OAuth2 to access the YouTube Data API, see:
#   https://developers.google.com/youtube/v3/guides/authentication
# For more information about the client_secrets.json file format, see:
#   https://developers.google.com/api-client-library/python/guide/aaa_client_secrets
CLIENT_SECRETS_FILE = "client_secrets.json"

# This variable defines a message to display if the CLIENT_SECRETS_FILE is
# missing.
MISSING_CLIENT_SECRETS_MESSAGE = """
WARNING: Please configure OAuth 2.0

To make this sample run you will need to populate the client_secrets.json file
found at:

   %s

with information from the Developers Console
https://console.developers.google.com/

For more information about the client_secrets.json file format, please visit:
https://developers.google.com/api-client-library/python/guide/aaa_client_secrets
""" % os.path.abspath(os.path.join(os.path.dirname(__file__), CLIENT_SECRETS_FILE))

YOUTUBE_SCOPES = (
  # This OAuth 2.0 access scope allows for read-only access to the authenticated
  # user's account, but not other types of account access.
  "https://www.googleapis.com/auth/youtube.readonly",
  # This OAuth 2.0 scope grants access to YouTube Content ID API functionality.
  "https://www.googleapis.com/auth/youtubepartner")
YOUTUBE_API_SERVICE_NAME = "youtube"
YOUTUBE_API_VERSION = "v3"
YOUTUBE_PARTNER_API_SERVICE_NAME = "youtubePartner"
YOUTUBE_PARTNER_API_VERSION = "v1"

KEY = "USE YOUR KEY"


# Authorize the request and store authorization credentials.
def get_authenticated_services(args):
  flow = flow_from_clientsecrets(CLIENT_SECRETS_FILE, scope=" ".join(YOUTUBE_SCOPES), message=MISSING_CLIENT_SECRETS_MESSAGE)

  storage = Storage("%s-oauth2.json" % sys.argv[0])
  credentials = storage.get()

  if credentials is None or credentials.invalid:
    credentials = run_flow(flow, storage, args)

  youtube = build(YOUTUBE_API_SERVICE_NAME, YOUTUBE_API_VERSION,  http=credentials.authorize(httplib2.Http()))

  youtube_partner = build(YOUTUBE_PARTNER_API_SERVICE_NAME, YOUTUBE_PARTNER_API_VERSION, http=credentials.authorize(httplib2.Http()))

  return (youtube, youtube_partner)


def get_content_owner_id(youtube_partner):
  content_owners_list_response = youtube_partner.contentOwners().list(fetchMine=True).execute()

  return content_owners_list_response["items"][0]["id"]
#def

def claim_search(youtube_partner, content_owner_id, _videoId):

  video_info = get_video_info(_videoId)  
  print '
---------- CLAIM SEARCH LIST - VIDEO (',video_info['title'],') ID: (',_videoId,')'
  claims = youtube_partner.claimSearch().list( videoId=_videoId, onBehalfOfContentOwner=content_owner_id).execute()
  print ' --- CLAIMS: ',claims

  if claims['pageInfo']['totalResults'] < 1:
    print " --- DOESN'T HAVE CLAIMS"
    return

  assetId = claims['items'][0]['assetId']
  print ' --- ASSET ID: ', assetId

  ownershipHistory = youtube_partner.ownershipHistory().list(assetId=assetId, onBehalfOfContentOwner=content_owner_id).execute()
  print ' --- OWNERSHIP HISTORY: ', ownershipHistory  

  contentOwnerId = ownershipHistory['items'][0]['origination']['owner']
  print ' --- CONTENT OWNER ID: ', contentOwnerId

  contentOwners = youtube_partner.contentOwners().get(contentOwnerId=contentOwnerId, onBehalfOfContentOwner=content_owner_id).execute()
  print ' --- CONTENT OWNERS: ', contentOwners


def get_video_info(videoId):
  r = requests.get("https://www.googleapis.com/youtube/v3/videos?id="+videoId+"&part=id,snippet,contentDetails,status,statistics,topicDetails,recordingDetails&key="+KEY)
  content = r.content

  content = json.loads(content)
  return content['items'][0]['snippet']






if __name__ == "__main__":
  args = argparser.parse_args()
  (youtube, youtube_partner) = get_authenticated_services(args)

  #video id's. Ex: "https://www.youtube.com/watch?v=lgSLz5FeXUg"
  videos = ['I67cgXr6L6o', 'lgSLz5FeXUg']

  content_owner_id = get_content_owner_id(youtube_partner)

  for vid in videos :
      claim_search(youtube_partner, content_owner_id, vid)
      time.sleep(0.5)

(审查)证据:enter image description here

另一答案

无法检查其他人对视频或频道的所有权或管理权。 YouTube故意避免这种情况。

另一答案

虽然ownershipHistory工作,我看到GET https://www.googleapis.com/youtube/partner/v1/assets?id=[multiple asset ids]也用fetchOwnership=effective选项调用

https://developers.google.com/youtube/partner/docs/v1/assets/list

以上是关于如何通过YouTube合作伙伴API获取特定视频的内容所有者信息?的主要内容,如果未能解决你的问题,请参考以下文章

Youtube API - 获取特定关键字的热门视频

如何使用 YouTube Java API 通过主题标签获取随机视频

如何通过 youtube API 获取已删除视频的列表

是否可以使用其 API 获取 YouTube 的所有视频?

如何通过 YouTube Data API v3 从我自己的 YouTube 频道获取所有视频

如何使用 Youtube API 访问特定播放列表中的所有视频?