1
Fork 0
mirror of https://github.com/Steffo99/bbbdl.git synced 2024-11-22 07:44:18 +00:00

🗼 Stabilize

This commit is contained in:
Steffo 2020-10-26 18:02:37 +01:00
parent 28921b5efa
commit ccd1be4774
5 changed files with 60 additions and 10 deletions

2
.gitattributes vendored
View file

@ -1,2 +0,0 @@
# Auto detect text files and perform LF normalization
* text=auto

5
.gitignore vendored
View file

@ -1,5 +1,6 @@
# Aulavirtuale-dl ignores # bbbdl ignores
VideoLezioni/ *.json
*.mp4
# Python ignores # Python ignores
**/__pycache__/ **/__pycache__/

View file

@ -1,3 +1,9 @@
# bbbdl # bbbdl
A tool for downloading BigBlueButton meetings A tool for downloading BigBlueButton meetings
## Installing
```
pip install bbbdl
```

View file

@ -1,20 +1,65 @@
import requests
import ffmpeg import ffmpeg
import click import click
import json
import os
from .resources import Meeting from .resources import Meeting
from .composer import compose_lesson from .composer import compose_lesson
@click.command() @click.group()
def main():
pass
@main.command()
@click.option("-i", "--input-url", type=str, prompt=True, @click.option("-i", "--input-url", type=str, prompt=True,
help="The URL of the meeting to download.") help="The URL of the meeting to download.")
@click.option("-o", "--output-file", type=str, prompt=True, @click.option("-o", "--output-file", type=str, prompt=True,
help="The file the video should be written to.") help="The file the video should be written to.")
def download(input_url, output_file): @click.option("-O", "--overwrite", is_flag=True,
help="Overwrite existing files instead of skipping them.")
@click.option("-v", "--verbose-ffmpeg", is_flag=True,
help="Print ffmpeg info to stderr.")
def download(input_url, output_file, overwrite=False, verbose_ffmpeg=False):
if not overwrite and os.path.exists(output_file):
raise click.ClickException(f"Output file already exists: {output_file}")
click.echo(f"Downloading: {input_url} -> {output_file}", err=True)
meeting = Meeting.from_url(input_url) meeting = Meeting.from_url(input_url)
streams = compose_lesson(meeting) streams = compose_lesson(meeting)
output = ffmpeg.output(*streams, output_file) output = ffmpeg.output(*streams, output_file)
output.run()
output.run(quiet=not verbose_ffmpeg, overwrite_output=True)
@main.command()
@click.option("-f", "--file", type=click.File(),
help="The JSON file containing the files to download.")
@click.option("-r", "--remote-file", type=str,
help="The URL where the JSON file containing the files to download can be fetched.")
@click.option("-O", "--overwrite", is_flag=True,
help="Overwrite existing files instead of skipping them.")
@click.option("-v", "--verbose-ffmpeg", is_flag=True,
help="Print ffmpeg info to stderr.")
@click.pass_context
def sync(ctx: click.Context, file=None, remote_file=None, overwrite=False, verbose_ffmpeg=False):
if file:
click.echo(f"Syncing from local file: {file.name}", err=True)
j = json.load(file)
elif remote_file:
click.echo(f"Syncing from remote file: {remote_file}", err=True)
j = requests.get(remote_file).json()
else:
raise click.ClickException("No JSON file was specified.")
for output_file, input_url in j.items():
try:
ctx.invoke(download, input_url=input_url, output_file=output_file, overwrite=overwrite, verbose_ffmpeg=verbose_ffmpeg)
except click.ClickException:
click.echo(f"Skipped: {input_url} -> {output_file}", err=True)
if __name__ == "__main__": if __name__ == "__main__":
download() main()

View file

@ -1,10 +1,10 @@
[tool.poetry] [tool.poetry]
name = "bbbdl" name = "bbbdl"
version = "0.1.0" version = "1.0.0"
description = "A downloader for BigBlueButton meetings" description = "A downloader for BigBlueButton meetings"
authors = [ authors = [
"Stefano Pigozzi <ste.pigozzi@gmail.com>",
"g.minoccari <g.minoccari@gmail.com>", "g.minoccari <g.minoccari@gmail.com>",
"Stefano Pigozzi <ste.pigozzi@gmail.com>"
] ]
license = "AGPL-3.0-or-later" license = "AGPL-3.0-or-later"