Esempio n. 1
0
    def upload(self, files, token, yes):
        """Uploads a file(s) to YouTube using the YouTube service API

        This function uploads a list of videos and/or directories of videos to YouTube.

        Args:
            token            - location of an oauth2 token
            files            - list of files and directories to upload
            yes              - if True, assume yes to all interaction (default: False)
        """
        # check if token exists
        if not os.path.exists(token):
            print(
                "{} does not exist, please specify a valid token file".format(
                    token))
            return
        # gather videos specified and vids from folders specified into list
        videos = []
        for item in files:
            # crawl subfolders
            if os.path.isdir(item):
                for root, dirs, files_ in os.walk(item):
                    for f in files_:
                        filepath = os.path.join(root, f)
                        # check if its a video and make sure its not a duplicate
                        if YoutubeService.valid_video_file(
                                filepath) and filepath not in videos:
                            videos.append(filepath)
            # if it exists it is a single file, check if its a video, and make sure its not a duplicate
            elif os.path.exists(item) and YoutubeService.valid_video_file(
                    item) and item not in videos:
                videos.append(item)
        # now begin upload process
        if not videos:
            print("Nothing to upload")
        else:
            youtube_service = YoutubeService()
            # authorize with OAuth2 token
            youtube_service.authorize(token)
            if not yes:
                print("Found videos:")
                print("\n".join(videos))
            question = "Are you sure you would like to upload these videos? [Y/n] "
            if yes or raw_input(question).lower() in ('', 'y', 'yes'):
                for video in videos:
                    self.handle_response(youtube_service.upload_video(video))
Esempio n. 2
0
def gather_videos(files):
    """Gather all valid videos into a set for upload"""
    # Because we are using a set, no duplicates will be present
    videos = set()
    for item in files:
        # Crawl subfolders
        if os.path.isdir(item):
            for root, _, filenames in os.walk(item):
                for filename in filenames:
                    filepath = os.path.join(root, filename)
                    # Check if its a video
                    if YoutubeService.valid_video_file(filepath):
                        videos.add(filepath)
        # If it exists it is a single file, check if its a video
        elif os.path.exists(item) and YoutubeService.valid_video_file(item):
            videos.add(item)
    return videos
Esempio n. 3
0
def gather_videos(files):
    """Gather all valid videos into a set for upload"""
    # Because we are using a set, no duplicates will be present
    videos = set()
    for item in files:
        # Crawl subfolders
        if os.path.isdir(item):
            for root, _, filenames in os.walk(item):
                for filename in filenames:
                    filepath = os.path.join(root, filename)
                    # Check if its a video
                    if YoutubeService.valid_video_file(filepath):
                        videos.add(filepath)
        # If it exists it is a single file, check if its a video
        elif os.path.exists(item) and YoutubeService.valid_video_file(item):
            videos.add(item)
    return videos
Esempio n. 4
0
    def upload(self, files, token, yes):
        """Uploads a file(s) to YouTube using the YouTube service API

        This function uploads a list of videos and/or directories of videos to YouTube.

        Args:
            token            - location of an oauth2 token
            files            - list of files and directories to upload
            yes              - if True, assume yes to all interaction (default: False)
        """
        # check if token exists
        if not os.path.exists(token):
            print("{} does not exist, please specify a valid token file".format(token))
            return
        # gather videos specified and vids from folders specified into list
        videos = []
        for item in files:
            # crawl subfolders
            if os.path.isdir(item):
                for root, dirs, files_ in os.walk(item):
                    for f in files_:
                        filepath = os.path.join(root, f)
                        # check if its a video and make sure its not a duplicate
                        if YoutubeService.valid_video_file(filepath) and filepath not in videos:
                            videos.append(filepath)
            # if it exists it is a single file, check if its a video, and make sure its not a duplicate
            elif os.path.exists(item) and YoutubeService.valid_video_file(item) and item not in videos:
                videos.append(item)
        # now begin upload process
        if not videos:
            print("Nothing to upload")
        else:
            youtube_service = YoutubeService()
            # authorize with OAuth2 token
            youtube_service.authorize(token)
            if not yes:
                print("Found videos:")
                print("\n".join(videos))
            question = "Are you sure you would like to upload these videos? [Y/n] "
            if yes or raw_input(question).lower() in ('', 'y', 'yes'):
                for video in videos:
                    self.handle_response(youtube_service.upload_video(video))
Esempio n. 5
0
    def cmd_line(self, argv):
        """Initializes command line interface

        Args:
            argv: command line arguments to parse
        """
        self.parser.add_argument("-c", "--client_secrets",
                                 help="Path to client secrets file", default=self.client_secrets)
        self.parser.add_argument("-t", "--token",
                                 help="Path to OAuth2 token", default=self.oauth2_token)
        self.parser.add_argument("-f", "--files",
                                 help="Path to file or filefolder for upload", default=self.video_directory)
        self.parser.add_argument("-y", "--yes",
                                 help="Assume yes", action="store_true")
        flags = self.parser.parse_args(argv[1:])
        youtube_service = YoutubeService()
        # command line arguments neede for Google Python Client need to always be passed in for authentication
        youtube_service.authenticate(flags.client_secrets, flags.token, flags)
        # path doesn't exist, print an error message
        if not os.path.exists(flags.files):
            print "{} does not exit".format(flags.files)
        # path is a folder, upload all videos in the folder
        elif os.path.isdir(flags.files):
            self.upload_folder_cmd_line(youtube_service, flags.files, flags.yes)
        # single file check if it is an uploadable video file
        elif youtube_service.valid_video_file(flags.files):
            if flags.yes:
                self.handle_response(youtube_service.upload_video(flags.files))
            else:
                response = raw_input(
                    "Are you sure you would like to upload the following file? [Y/n]\n" + flags.files + "\n")
                if response.lower() in ('', 'y', 'yes'):
                    self.handle_response(youtube_service.upload_video(flags.files))
        # if this case is reached it means there is nothing to upload
        else:
            print "Nothing to upload"
Esempio n. 6
0
def test_valid_video_file(video, expected):
    """Tests valid_video_file function for all test cases."""
    assert YoutubeService.valid_video_file(video) == expected