File size: 2,379 Bytes
6755a2d
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
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
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73

from collections import namedtuple
from typing import NamedTuple, Tuple, List
import logging
import os
import numpy as np
import subprocess

import requests

import wget 

from .youtube import download_youtube
from .flicker import download_flickr
from .ffmpeg import ffmpeg_load

logger = logging.getLogger(__name__)

# DownloadStatus  = namedtuple("DownloadStatus", ["status_code", "msg"])

status_code = {0: "download: succ",
              -1: "download: failed",
              -2: "clip: failed",
              -3: "directory not exists",
              -4: "skip task",
              - 404: "param error"}


def download_with_request(url, path):
    res = requests.get(url)
    if res.status_code == '200' or res.status_code == 200:
        with open(path, "wb") as f:
            f.write(res.content)
    else:
        print('request failed')
    return path

def download_video(url, save_path:str=None, save_dir:str=None, basename:str=None, filename:str=None, format:str=None, data_type: str="wget", **kwargs) -> Tuple[int, str]:
    if save_path is None:
        if basename is None:
            basename =  f"{filename}.{format}"
        save_path = os.path.join(save_dir, basename)
    if save_dir is None:
        save_dir = os.path.dirname(save_path)
    if basename is None:
        basename = os.path.basename(save_path)
    if filename is None:
        filename, format = os.path.splitext(basename)
    os.makedirs(save_dir, exist_ok=True)

    if os.path.exists(save_path):
        return (-4, save_path)

    try:
        if data_type == "requests":
             save_path = download_with_request(url=url, path=save_path)
        elif data_type == "wget":
            save_path = wget.download(url=url, out=save_path)
        elif data_type == "youtube":
            save_path = download_youtube(url, format=format, save_dir=save_dir, filename=basename)
        elif data_type == "flickr":
            save_path = download_flickr(url, save_path)
        elif data_type == "ffmpeg":
            code = ffmpeg_load(url=url, save_path=save_path)
        else:
            raise ValueError(f"data_type shoulbe one of [wget, youtube, flickr, ffmpeg], but given {data_type}")
    except Exception as e:
        logger.error("failed download file {} to {} failed!".format(url, save_path))
        logger.exception(e)
        return (-1, None)

    return (0, save_path)