-
Notifications
You must be signed in to change notification settings - Fork 1
/
Copy pathvideo.py
49 lines (41 loc) · 1.58 KB
/
video.py
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
from googleapiclient.discovery import build
from youtube_transcript_api import YouTubeTranscriptApi
import os
from dotenv import load_dotenv
load_dotenv()
def search_video(id, searchTerm):
result={}
result['messages'] = []
result['id'] = str(id)
count = 0
api_key = os.getenv('API_KEY')
youtube_service = build('youtube', 'v3', developerKey = api_key)
videoNameRequest = youtube_service.videos().list(
part="snippet,contentDetails",id=id)
videoDetails = videoNameRequest.execute()
if ('error' in videoDetails.keys() or len(videoDetails.get('items')) == 0 ):
result['messages'].append("\nInvalid Video ID")
youtube_service.close()
return result
title = videoDetails['items'][0]['snippet']['title']
result['titles'] = [(title, id)]
result[title] = {}
try:
transcript = YouTubeTranscriptApi.get_transcript(id)
result['messages'].append(f'Found transcript for video ->\n{title}\n')
except:
result['messages'].append("Transcripts are disabled for this video")
youtube_service.close()
return result
for line in transcript:
if(searchTerm.lower() in line['text'].lower()):
time = int(line['start'])
hours = time//(60*60)
minutes = (time//60)%60
seconds = time%60
result[title][str(time)] = (f"({hours:02d}:{minutes:02d}:{seconds:02d})", f"-> \"...{line['text']}...\"\n")
count += 1
if count == 0 :
result['messages'].append("No matches found :(")
youtube_service.close()
return result