from youtube import api from youtube import config from retrying import retry import sys """BACON Fingerprinting Tool Creates a reference for the given video(s). """ @retry(stop_max_attempt_number=10, wait_fixed=0.5) def execute_call(youtube_call): return youtube_call.execute() def get_claims(video_id, owner): partner = config.api_mapping.youtube_partner search_call = partner.claimSearch().list( videoId=video_id, onBehalfOfContentOwner=owner, includeThirdPartyClaims=True) result = execute_call(search_call) items = result.get('items') or [] return items def list_references(asset_id, owner): partner = config.api_mapping.youtube_partner list_call = partner.references().list( assetId=asset_id, onBehalfOfContentOwner=owner) result = execute_call(list_call) # don't worry about pagination for this items = result.get('items') or [] return items def insert_reference(claim_id, owner, content_type): partner = config.api_mapping.youtube_partner insert_call = partner.references().insert( claimId=claim_id, onBehalfOfContentOwner=owner, body={'contentType': content_type}) return execute_call(insert_call) if len(sys.argv) < 3: print('Usage: {} content_owner video_id_1 [... video_id_n]'.format(sys.argv[0])) exit() owner = sys.argv[1] print('Content owner: {}'.format(owner)) video_ids = sys.argv[2:len(sys.argv)] for video_id in video_ids: try: print('Processing video {}...'.format(video_id)) claims = get_claims(video_id, owner) if len(claims) != 1: print('Got {} claims'.format(len(claims))) continue claim = claims[0] if claim.get('thirdPartyClaim'): print('Got a third-party claim') continue asset_id = claim.get('assetId') if not asset_id: print('Got no asset ID') continue claim_id = claim.get('id') if not claim_id: print('Got no claim ID') continue content_type = claim.get('contentType') if not content_type: print('Got no content type') continue existing_refs = list_references(asset_id, owner) if existing_refs: print('We already have references for asset {}'.format(asset_id)) print(existing_refs) continue reference = insert_reference(claim_id, owner, content_type) print('Created reference for video {}, asset {}, claim {}'.format(video_id, asset_id, claim_id)) print(reference) except Exception as e: print('BARF on video {}'.format(video_id)) print(str(e))