mirror of
https://github.com/danielmiessler/fabric
synced 2024-11-10 07:10:31 +00:00
Updated readme.
This commit is contained in:
parent
adeea67a2e
commit
d8e03d5981
@ -24,19 +24,9 @@ windows:
|
||||
download instructions https://www.ffmpeg.org/download.html
|
||||
```
|
||||
|
||||
```bash
|
||||
````bash
|
||||
usage: yt [-h] [--duration] [--transcript] [url]
|
||||
|
||||
vm (video meta) extracts metadata about a video, such as the transcript and the video's duration. By Daniel Miessler.
|
||||
|
||||
positional arguments:
|
||||
url YouTube video URL
|
||||
|
||||
options:
|
||||
-h, --help show this help message and exit
|
||||
--duration Output only the duration
|
||||
--transcript Output only the transcript
|
||||
```
|
||||
|
||||
```bash
|
||||
ts -h
|
||||
@ -49,4 +39,4 @@ positional arguments:
|
||||
|
||||
options:
|
||||
-h, --help show this help message and exit
|
||||
```
|
||||
````
|
||||
|
@ -11,17 +11,17 @@ import argparse
|
||||
|
||||
def get_video_id(url):
|
||||
# Extract video ID from URL
|
||||
pattern = r'(?:https?:\/\/)?(?:www\.)?(?:youtube\.com\/(?:[^\/\n\s]+\/\S+\/|(?:v|e(?:mbed)?)\/|\S*?[?&]v=)|youtu\.be\/)([a-zA-Z0-9_-]{11})'
|
||||
pattern = r"(?:https?:\/\/)?(?:www\.)?(?:youtube\.com\/(?:[^\/\n\s]+\/\S+\/|(?:v|e(?:mbed)?)\/|\S*?[?&]v=)|youtu\.be\/)([a-zA-Z0-9_-]{11})"
|
||||
match = re.search(pattern, url)
|
||||
return match.group(1) if match else None
|
||||
|
||||
|
||||
def main_function(url, options):
|
||||
# Load environment variables from .env file
|
||||
load_dotenv(os.path.expanduser('~/.config/fabric/.env'))
|
||||
load_dotenv(os.path.expanduser("~/.config/fabric/.env"))
|
||||
|
||||
# Get YouTube API key from environment variable
|
||||
api_key = os.getenv('YOUTUBE_API_KEY')
|
||||
api_key = os.getenv("YOUTUBE_API_KEY")
|
||||
if not api_key:
|
||||
print("Error: YOUTUBE_API_KEY not found in ~/.config/fabric/.env")
|
||||
return
|
||||
@ -34,25 +34,23 @@ def main_function(url, options):
|
||||
|
||||
try:
|
||||
# Initialize the YouTube API client
|
||||
youtube = build('youtube', 'v3', developerKey=api_key)
|
||||
youtube = build("youtube", "v3", developerKey=api_key)
|
||||
|
||||
# Get video details
|
||||
video_response = youtube.videos().list(
|
||||
id=video_id,
|
||||
part='contentDetails'
|
||||
).execute()
|
||||
video_response = (
|
||||
youtube.videos().list(id=video_id, part="contentDetails").execute()
|
||||
)
|
||||
|
||||
# Extract video duration and convert to minutes
|
||||
duration_iso = video_response['items'][0]['contentDetails']['duration']
|
||||
duration_iso = video_response["items"][0]["contentDetails"]["duration"]
|
||||
duration_seconds = isodate.parse_duration(duration_iso).total_seconds()
|
||||
duration_minutes = round(duration_seconds / 60)
|
||||
|
||||
# Get video transcript
|
||||
try:
|
||||
transcript_list = YouTubeTranscriptApi.get_transcript(video_id)
|
||||
transcript_text = ' '.join([item['text']
|
||||
for item in transcript_list])
|
||||
transcript_text = transcript_text.replace('\n', ' ')
|
||||
transcript_text = " ".join([item["text"] for item in transcript_list])
|
||||
transcript_text = transcript_text.replace("\n", " ")
|
||||
except Exception as e:
|
||||
transcript_text = "Transcript not available."
|
||||
|
||||
@ -63,24 +61,26 @@ def main_function(url, options):
|
||||
print(transcript_text)
|
||||
else:
|
||||
# Create JSON object
|
||||
output = {
|
||||
"transcript": transcript_text,
|
||||
"duration": duration_minutes
|
||||
}
|
||||
output = {"transcript": transcript_text, "duration": duration_minutes}
|
||||
# Print JSON object
|
||||
print(json.dumps(output))
|
||||
except HttpError as e:
|
||||
print("Error: Failed to access YouTube API. Please check your YOUTUBE_API_KEY and ensure it is valid.")
|
||||
print(
|
||||
"Error: Failed to access YouTube API. Please check your YOUTUBE_API_KEY and ensure it is valid."
|
||||
)
|
||||
|
||||
|
||||
def main():
|
||||
parser = argparse.ArgumentParser(
|
||||
description='vm (video meta) extracts metadata about a video, such as the transcript and the video\'s duration. By Daniel Miessler.')
|
||||
parser.add_argument('url', nargs='?', help='YouTube video URL')
|
||||
parser.add_argument('--duration', action='store_true',
|
||||
help='Output only the duration')
|
||||
parser.add_argument('--transcript', action='store_true',
|
||||
help='Output only the transcript')
|
||||
description="vm (video meta) extracts metadata about a video, such as the transcript and the video's duration. By Daniel Miessler."
|
||||
)
|
||||
parser.add_argument("url", nargs="?", help="YouTube video URL")
|
||||
parser.add_argument(
|
||||
"--duration", action="store_true", help="Output only the duration"
|
||||
)
|
||||
parser.add_argument(
|
||||
"--transcript", action="store_true", help="Output only the transcript"
|
||||
)
|
||||
args = parser.parse_args()
|
||||
|
||||
if args.url:
|
||||
|
Loading…
Reference in New Issue
Block a user