diff --git a/README.md b/README.md
index 79a0703..f35e1f3 100644
--- a/README.md
+++ b/README.md
@@ -12,7 +12,6 @@ This program downloads imgur, gfycat and direct image and video links of saved p
- Puts every post to its subreddit's folder
- Saves a reusable copy of posts' details that are found so that they can be re-downloaded again
- Logs failed ones in a file to so that you can try to download them later
-- Can run with double-clicking on Windows
## [Download the latest release](https://github.com/aliparlakci/bulk-downloader-for-reddit/releases/latest)
diff --git a/script.py b/script.py
index a40c878..d33b452 100644
--- a/script.py
+++ b/script.py
@@ -423,21 +423,36 @@ def postFromLog(fileName):
return posts
-def postExists(POST):
+def isPostExists(POST):
"""Figure out a file's name and checks if the file already exists"""
title = nameCorrector(POST['postTitle'])
- FILENAME = title + "_" + POST['postId']
PATH = GLOBAL.directory / POST["postSubreddit"]
+
possibleExtensions = [".jpg",".png",".mp4",".gif",".webm",".md"]
- for i in range(2):
- for extension in possibleExtensions:
- FILE_PATH = PATH / (FILENAME+extension)
- if FILE_PATH.exists():
- return True
- else:
- FILENAME = POST['postId']
+ for extension in possibleExtensions:
+
+ OLD_FILE_PATH = PATH / (
+ title
+ + "_" + POST['postId']
+ + extension
+ )
+ FILE_PATH = PATH / (
+ POST["postSubmitter"]
+ + "_" + title
+ + "_" + POST['postId']
+ + extension
+ )
+
+ SHORT_FILE_PATH = PATH / (POST['postId']+extension)
+
+ if OLD_FILE_PATH.exists() or \
+ FILE_PATH.exists() or \
+ SHORT_FILE_PATH.exists():
+
+ return True
+
else:
return False
@@ -523,7 +538,7 @@ def download(submissions):
)
)
- if postExists(submissions[i]):
+ if isPostExists(submissions[i]):
print(submissions[i]['postType'].upper())
print("It already exists")
duplicates += 1
diff --git a/src/downloader.py b/src/downloader.py
index 55eb370..4973051 100644
--- a/src/downloader.py
+++ b/src/downloader.py
@@ -87,13 +87,14 @@ class Erome:
extension = getExtension(IMAGES[0])
title = nameCorrector(post['postTitle'])
- print(title+"_" +post['postId']+extension)
+ print(post["postSubmitter"]+"_"+title+"_"+post['postId']+extension)
- fileDir = title + "_" + post['postId'] + extension
- fileDir = directory / fileDir
-
- tempDir = title + "_" + post['postId'] + '.tmp'
- tempDir = directory / tempDir
+ fileDir = directory / (
+ POST["postSubmitter"]+"_"+title+"_"+POST['postId']+extension
+ )
+ tempDir = directory / (
+ POST["postSubmitter"]+"_"+title+"_"+POST['postId']+".tmp"
+ )
imageURL = "https:" + IMAGES[0]
@@ -106,9 +107,11 @@ class Erome:
else:
title = nameCorrector(post['postTitle'])
- print(title+"_"+post['postId'],end="\n\n")
+ print(post["postSubmitter"]+"_"+title+"_"+post['postId'],end="\n\n")
- folderDir = directory / (title+"_"+post['postId'])
+ folderDir = directory / (
+ post["postSubmitter"] + "_" + title + "_" + post['postId']
+ )
try:
if not os.path.exists(folderDir):
@@ -220,13 +223,22 @@ class Imgur:
post['postExt'] = getExtension(post['mediaURL'])
title = nameCorrector(post['postTitle'])
- print(title+"_" +post['postId']+post['postExt'])
+ print(post["postSubmitter"]+"_"+title+"_"+post['postId']+post['postExt'])
- fileDir = title + "_" + post['postId'] + post['postExt']
- fileDir = directory / fileDir
+ fileDir = directory / (
+ post["postSubmitter"]
+ + "_" + title
+ + "_" + post['postId']
+ + post['postExt']
+ )
+
+ tempDir = directory / (
+ post["postSubmitter"]
+ + "_" + title
+ + "_" + post['postId']
+ + ".tmp"
+ )
- tempDir = title + "_" + post['postId'] + '.tmp'
- tempDir = directory / tempDir
try:
getFile(fileDir,tempDir,post['mediaURL'])
except FileNameTooLong:
@@ -242,9 +254,11 @@ class Imgur:
duplicates = 0
title = nameCorrector(post['postTitle'])
- print(title+"_"+post['postId'],end="\n\n")
+ print(post["postSubmitter"]+"_"+title+"_"+post['postId'],end="\n\n")
- folderDir = directory / (title+"_"+post['postId'])
+ folderDir = directory / (
+ post["postSubmitter"] + "_" + title + "_" + post['postId']
+ )
try:
if not os.path.exists(folderDir):
@@ -369,10 +383,15 @@ class Gfycat:
if not os.path.exists(directory): os.makedirs(directory)
title = nameCorrector(POST['postTitle'])
- print(title+"_"+POST['postId']+POST['postExt'])
+ print(POST["postSubmitter"]+"_"+title+"_"+POST['postId']+POST['postExt'])
- fileDir = directory / (title+"_"+POST['postId']+POST['postExt'])
- tempDir = directory / (title+"_"+POST['postId']+".tmp")
+ fileDir = directory / (
+ POST["postSubmitter"]+"_"+title+"_"+POST['postId']+POST['postExt']
+ )
+ tempDir = directory / (
+ POST["postSubmitter"]+"_"+title+"_"+POST['postId']+".tmp"
+ )
+
try:
getFile(fileDir,tempDir,POST['mediaURL'])
except FileNameTooLong:
@@ -418,13 +437,14 @@ class Direct:
POST['postExt'] = getExtension(POST['postURL'])
if not os.path.exists(directory): os.makedirs(directory)
title = nameCorrector(POST['postTitle'])
- print(title+"_"+POST['postId']+POST['postExt'])
+ print(POST["postSubmitter"]+"_"+title+"_"+POST['postId']+POST['postExt'])
- fileDir = title+"_"+POST['postId']+POST['postExt']
- fileDir = directory / fileDir
-
- tempDir = title+"_"+POST['postId']+".tmp"
- tempDir = directory / tempDir
+ fileDir = directory / (
+ POST["postSubmitter"]+"_"+title+"_"+POST['postId']+POST['postExt']
+ )
+ tempDir = directory / (
+ POST["postSubmitter"]+"_"+title+"_"+POST['postId']+".tmp"
+ )
try:
getFile(fileDir,tempDir,POST['postURL'])
@@ -439,10 +459,11 @@ class Self:
if not os.path.exists(directory): os.makedirs(directory)
title = nameCorrector(post['postTitle'])
- print(title+"_"+post['postId']+".md")
+ print(post["postSubmitter"]+"_"+title+"_"+post['postId']+".md")
- fileDir = title+"_"+post['postId']+".md"
- fileDir = directory / fileDir
+ fileDir = directory / (
+ post["postSubmitter"]+"_"+title+"_"+post['postId']+".md"
+ )
if Path.is_file(fileDir):
raise FileAlreadyExistsError
@@ -465,7 +486,11 @@ class Self:
+ ")\n"
+ post["postContent"]
+ "\n\n---\n\n"
- + "submitted by [u/"
+ + "submitted to [r/"
+ + post["postSubreddit"]
+ + "](https://www.reddit.com/r/"
+ + post["postSubreddit"]
+ + ") by [u/"
+ post["postSubmitter"]
+ "](https://www.reddit.com/user/"
+ post["postSubmitter"]
diff --git a/src/searcher.py b/src/searcher.py
index ea0d0ec..4c12676 100644
--- a/src/searcher.py
+++ b/src/searcher.py
@@ -14,60 +14,62 @@ from src.errors import (NoMatchingSubmissionFound, NoPrawSupport,
print = printToFile
-class GetAuth:
- def __init__(self,redditInstance,port):
- self.redditInstance = redditInstance
- self.PORT = int(port)
-
- def recieve_connection(self):
- """Wait for and then return a connected socket..
- Opens a TCP connection on port 8080, and waits for a single client.
- """
- server = socket.socket(socket.AF_INET, socket.SOCK_STREAM)
- server.setsockopt(socket.SOL_SOCKET, socket.SO_REUSEADDR, 1)
- server.bind(('localhost', self.PORT))
- server.listen(1)
- client = server.accept()[0]
- server.close()
- return client
-
- def send_message(self, message):
- """Send message to client and close the connection."""
- self.client.send('HTTP/1.1 200 OK\r\n\r\n{}'.format(message).encode('utf-8'))
- self.client.close()
-
- def getRefreshToken(self,*scopes):
- state = str(random.randint(0, 65000))
- url = self.redditInstance.auth.url(scopes, state, 'permanent')
- print("Go to this URL and login to reddit:\n\n",url)
- webbrowser.open(url,new=2)
-
- self.client = self.recieve_connection()
- data = self.client.recv(1024).decode('utf-8')
- param_tokens = data.split(' ', 2)[1].split('?', 1)[1].split('&')
- params = {
- key: value for (key, value) in [token.split('=') \
- for token in param_tokens]
- }
- if state != params['state']:
- self.send_message(
- client, 'State mismatch. Expected: {} Received: {}'
- .format(state, params['state'])
- )
- raise RedditLoginFailed
- elif 'error' in params:
- self.send_message(client, params['error'])
- raise RedditLoginFailed
-
- refresh_token = self.redditInstance.auth.authorize(params['code'])
- self.send_message(
- ""
- )
- return (self.redditInstance,refresh_token)
-
def beginPraw(config,user_agent = str(socket.gethostname())):
+ class GetAuth:
+ def __init__(self,redditInstance,port):
+ self.redditInstance = redditInstance
+ self.PORT = int(port)
+
+ def recieve_connection(self):
+ """Wait for and then return a connected socket..
+ Opens a TCP connection on port 8080, and waits for a single client.
+ """
+ server = socket.socket(socket.AF_INET, socket.SOCK_STREAM)
+ server.setsockopt(socket.SOL_SOCKET, socket.SO_REUSEADDR, 1)
+ server.bind(('localhost', self.PORT))
+ server.listen(1)
+ client = server.accept()[0]
+ server.close()
+ return client
+
+ def send_message(self, message):
+ """Send message to client and close the connection."""
+ self.client.send(
+ 'HTTP/1.1 200 OK\r\n\r\n{}'.format(message).encode('utf-8')
+ )
+ self.client.close()
+
+ def getRefreshToken(self,*scopes):
+ state = str(random.randint(0, 65000))
+ url = self.redditInstance.auth.url(scopes, state, 'permanent')
+ print("Go to this URL and login to reddit:\n\n",url)
+ webbrowser.open(url,new=2)
+
+ self.client = self.recieve_connection()
+ data = self.client.recv(1024).decode('utf-8')
+ param_tokens = data.split(' ', 2)[1].split('?', 1)[1].split('&')
+ params = {
+ key: value for (key, value) in [token.split('=') \
+ for token in param_tokens]
+ }
+ if state != params['state']:
+ self.send_message(
+ client, 'State mismatch. Expected: {} Received: {}'
+ .format(state, params['state'])
+ )
+ raise RedditLoginFailed
+ elif 'error' in params:
+ self.send_message(client, params['error'])
+ raise RedditLoginFailed
+
+ refresh_token = self.redditInstance.auth.authorize(params['code'])
+ self.send_message(
+ ""
+ )
+ return (self.redditInstance,refresh_token)
+
"""Start reddit instance"""
scopes = ['identity','history','read']
@@ -245,8 +247,6 @@ def getPosts(args):
raise MultiredditNotFound
elif "submitted" in args:
- # TODO
- # USE REDDIT.USER.ME() INSTEAD WHEN "ME" PASSED AS A --USER
print (
"submitted posts of {user}\nsort: {sort}\n" \
"time: {time}\nlimit: {limit}\n".format(
@@ -263,8 +263,6 @@ def getPosts(args):
)
elif "upvoted" in args:
- # TODO
- # USE REDDIT.USER.ME() INSTEAD WHEN "ME" PASSED AS A --USER
print (
"upvoted posts of {user}\nlimit: {limit}\n".format(
user=args["user"],