1
0
Fork 0
mirror of synced 2024-06-28 19:10:41 +12:00
bulk-downloader-for-reddit/bulkredditdownloader/__main__.py

129 lines
5.1 KiB
Python
Raw Normal View History

#!/usr/bin/env python3
2021-02-11 12:10:40 +13:00
import argparse
import logging
import sys
2021-02-11 12:10:40 +13:00
from bulkredditdownloader.downloader import RedditDownloader
from bulkredditdownloader.errors import BulkDownloaderException
logger = logging.getLogger()
parser = argparse.ArgumentParser(allow_abbrev=False,
description="This program downloads media from reddit posts")
def _add_options():
parser.add_argument("directory",
help="Specifies the directory where posts will be downloaded to",
metavar="DIRECTORY")
parser.add_argument("--verbose", "-v",
action="store_true",
2021-03-01 19:41:31 +13:00
count=True)
2021-02-11 12:10:40 +13:00
parser.add_argument("--link", "-l",
help="Get posts from link",
2021-02-15 21:05:04 +13:00
action='append',
2021-02-11 12:10:40 +13:00
metavar="link")
parser.add_argument("--submitted",
action="store_true",
help="Gets posts of --user")
2021-03-05 16:29:57 +13:00
parser.add_argument("--saved",
action="store_true",
help="Gets upvoted posts of --user")
2021-02-11 12:10:40 +13:00
parser.add_argument("--upvoted",
action="store_true",
help="Gets upvoted posts of --user")
parser.add_argument("--subreddit",
nargs="+",
help="Triggers subreddit mode and takes subreddit's name without r/. use \"frontpage\" "
"for frontpage",
metavar="SUBREDDIT",
type=str)
parser.add_argument("--multireddit",
help="Triggers multireddit mode and takes multireddit's name without m",
metavar="MULTIREDDIT",
2021-03-01 19:41:31 +13:00
action='append',
2021-02-11 12:10:40 +13:00
type=str)
parser.add_argument("--user",
help="reddit username if needed. use \"me\" for current user",
required="--multireddit" in sys.argv or "--submitted" in sys.argv,
metavar="redditor",
2021-03-01 19:41:31 +13:00
default=None,
2021-02-11 12:10:40 +13:00
type=str)
parser.add_argument("--search",
help="Searches for given query in given subreddits",
metavar="query",
2021-03-01 19:41:31 +13:00
default=None,
2021-02-11 12:10:40 +13:00
type=str)
parser.add_argument("--sort",
help="Either hot, top, new, controversial, rising or relevance default: hot",
choices=["hot", "top", "new", "controversial", "rising", "relevance"],
metavar="SORT TYPE",
2021-03-01 19:41:31 +13:00
default='hot',
2021-02-11 12:10:40 +13:00
type=str)
parser.add_argument("--limit",
help="default: unlimited",
metavar="Limit",
2021-02-15 16:55:33 +13:00
default=None,
2021-02-11 12:10:40 +13:00
type=int)
parser.add_argument("--time",
help="Either hour, day, week, month, year or all. default: all",
choices=["all", "hour", "day", "week", "month", "year"],
metavar="TIME_LIMIT",
2021-03-01 19:41:31 +13:00
default='all',
2021-02-11 12:10:40 +13:00
type=str)
parser.add_argument("--skip",
nargs="+",
help="Skip posts with given type",
type=str,
default=[])
parser.add_argument("--skip-domain",
nargs="+",
help="Skip posts with given domain",
type=str,
default=[])
2021-03-01 19:41:31 +13:00
parser.add_argument("--set-folder-scheme",
2021-02-11 12:10:40 +13:00
action="store_true",
help="Set custom folderpath",
default='{SUBREDDIT}'
)
2021-03-01 19:41:31 +13:00
parser.add_argument("--set-file-scheme",
2021-02-11 12:10:40 +13:00
action="store_true",
help="Set custom filename",
default='{REDDITOR}_{TITLE}_{POSTID}'
)
parser.add_argument("--no-dupes",
action="store_true",
help="Do not download duplicate posts on different subreddits",
)
def _setup_logging(verbosity: int):
logger.setLevel(1)
stream = logging.StreamHandler(sys.stdout)
formatter = logging.Formatter('[%(asctime)s - %(name)s - %(levelname)s] - %(message)s')
stream.setFormatter(formatter)
logger.addHandler(stream)
if verbosity < 0:
stream.setLevel(logging.INFO)
else:
2021-02-11 12:10:40 +13:00
stream.setLevel(logging.DEBUG)
2021-02-11 12:10:40 +13:00
logging.getLogger('praw').setLevel(logging.CRITICAL)
logging.getLogger('prawcore').setLevel(logging.CRITICAL)
logging.getLogger('urllib3').setLevel(logging.CRITICAL)
2021-02-11 12:10:40 +13:00
def main(args: argparse.Namespace):
_setup_logging(args.verbose)
try:
2021-02-11 12:10:40 +13:00
reddit_downloader = RedditDownloader(args)
reddit_downloader.download()
except BulkDownloaderException as e:
logger.critical(f'An error occured {e}')
2021-02-11 12:10:40 +13:00
if __name__ == '__main__':
_add_options()
args = parser.parse_args()
main(args)