import csv import os import requests import sys onBehalfOfContentOwner = os.environ.get('CONTENT_OWNER') auth_headers = { 'Authorization': os.environ.get('API_TOKEN'), 'Accept': 'application/json', 'Content-Type': 'application/json' } video_ids = [] results = [] def get_claim(current_data, video_id): url = f'https://www.googleapis.com/youtube/partner/v1/claims?videoId={video_id}&onBehalfOfContentOwner={onBehalfOfContentOwner}' claims_response = requests.get(url, headers=auth_headers) if claims_response.status_code == 200: items = claims_response.json().get('items', []) if items: current_data['youtube_asset_id'] = items[0].get('assetId') current_data['youtube_claim_id'] = items[0].get('id') current_data['youtube_claim_status'] = items[0].get('status') current_data['content_type'] = items[0].get('contentType') return True current_data['youtube_api_response'] = claims_response.text current_data['youtube_api_call'] = 'claims.list' return False def update_claim(current_data): url = f'https://www.googleapis.com/youtube/partner/v1/claims/{current_data["youtube_claim_id"]}?onBehalfOfContentOwner={onBehalfOfContentOwner}' payload = { 'assetId': current_data['youtube_asset_id'], 'contentType': current_data['content_type'] } claim_response = requests.put(url, headers=auth_headers, json=payload) if claim_response.status_code == 200: current_data['youtube_claim_status'] = claim_response.json().get('status') return True else: current_data['youtube_api_response'] = claim_response.text current_data['youtube_api_call'] = 'claims.update' return False def get_reference(current_data): url = f'https://www.googleapis.com/youtube/partner/v1/references?assetId={current_data["youtube_asset_id"]}&onBehalfOfContentOwner={onBehalfOfContentOwner}' reference_response = requests.get(url, headers=auth_headers) if reference_response.status_code == 200: items = reference_response.json().get('items', []) if items: current_data['youtube_reference_id'] = items[0].get('id') current_data['youtube_reference_status'] = items[0].get('status') return True else: return False def create_reference(current_data): url = f'https://www.googleapis.com/youtube/partner/v1/references?onBehalfOfContentOwner={onBehalfOfContentOwner}' payload = { 'claimId': current_data['youtube_claim_id'], 'contentType': current_data['content_type'] } reference_response = requests.post(url, headers=auth_headers, json=payload) if reference_response.status_code == 200: current_data['youtube_reference_id'] = reference_response.json().get('id') current_data['youtube_reference_status'] = reference_response.json().get('status') return True else: current_data['youtube_api_response'] = reference_response.text current_data['youtube_api_call'] = 'references.insert' return False def run_bulk_reclaim_program(video_ids): """Process youtube video ID bulk claim.""" for video_id in video_ids: current_data = { 'content_type': None, 'youtube_video_id': video_id, 'youtube_asset_id': None, 'youtube_claim_id': None, 'youtube_claim_status': None, 'youtube_reference_id': None, 'youtube_reference_status': None, 'bacon_consumer': None, 'bacon_error': None, 'youtube_api_call': None, 'youtube_api_response': None } claim_ok = get_claim(current_data, video_id) if claim_ok: if current_data['youtube_claim_status'] != 'active': update_claim_ok = update_claim(current_data) if update_claim_ok: new_claim_ok = get_claim(current_data, video_id) if new_claim_ok: ref_ok = get_reference(current_data) if not ref_ok or (current_data['youtube_reference_status'] in ['inactive', 'deleted']): create_reference(current_data) current_data.pop('content_type', None) results.append(current_data) def write_results_to_csv(results, output_file='results.csv'): """Write the results to a CSV file.""" headers = results[0].keys() with open(output_file, mode='w', newline='', encoding='utf-8') as file: writer = csv.DictWriter(file, fieldnames=headers) writer.writeheader() writer.writerows(results) print(f"Results written to {output_file}") if __name__ == '__main__': input_arg = sys.argv[0] video_ids = input_arg.split(',') run_bulk_reclaim_program(video_ids) print(results) write_results_to_csv(results)