| @@ -20,17 +20,16 @@ from tqdm import tqdm | |||||
| from langdetect import detect | from langdetect import detect | ||||
| # JPS-AU files | # JPS-AU files | ||||
| import jpspy | |||||
| import smpy | |||||
| def asciiart (): | def asciiart (): | ||||
| print(""" | print(""" | ||||
| ██╗██████╗ ███████╗ █████╗ ██╗ ██╗ | |||||
| ██║██╔══██╗██╔════╝ ██╔══██╗██║ ██║ | |||||
| ██║██████╔╝███████╗█████╗███████║██║ ██║ | |||||
| ██ ██║██╔═══╝ ╚════██║╚════╝██╔══██║██║ ██║ | |||||
| ╚█████╔╝██║ ███████║ ██║ ██║╚██████╔╝ | |||||
| ╚════╝ ╚═╝ ╚══════╝ ╚═╝ ╚═╝ ╚═════╝ | |||||
| ███████╗███╗ ███╗ █████╗ ██╗ ██╗ | |||||
| ██╔════╝████╗ ████║ ██╔══██╗██║ ██║ | |||||
| ███████╗██╔████╔██║█████╗███████║██║ ██║ | |||||
| ╚════██║██║╚██╔╝██║╚════╝██╔══██║██║ ██║ | |||||
| ███████║██║ ╚═╝ ██║ ██║ ██║╚██████╔╝ | |||||
| ╚══════╝╚═╝ ╚═╝ ╚═╝ ╚═╝ ╚═════╝ | |||||
| """) | """) | ||||
| # Get arguments using argparse | # Get arguments using argparse | ||||
| @@ -46,20 +45,19 @@ def getargs(): | |||||
| # Acquire the authkey used for torrent files from upload.php | # Acquire the authkey used for torrent files from upload.php | ||||
| def getauthkey(): | def getauthkey(): | ||||
| # uploadpage = j.retrieveContent("https://sugoimusic.me/upload.php") | |||||
| # soup = BeautifulSoup(uploadpage.text, 'html5lib') | |||||
| # rel2 = str(soup.select('#wrapper #content .thin')) | |||||
| # # Regex returns multiple matches, could be optimized. | |||||
| # authkey = re.findall("(?<=value=\")(.*)(?=\")", rel2)[0] | |||||
| # return authkey | |||||
| smpage = sm.retrieveContent("https://sugoimusic.me/torrents.php?id=118") # Arbitrary page on JPS that has authkey | |||||
| """ | |||||
| Get SM session authkey for use by uploadtorrent() data dict. | |||||
| Uses SM login data | |||||
| :return: authkey | |||||
| """ | |||||
| smpage = sm.retrieveContent("https://sugoimusic.me/torrents.php?id=118") # Arbitrary page on JPS that has authkey | |||||
| soup = BeautifulSoup(smpage.text, 'html5lib') | soup = BeautifulSoup(smpage.text, 'html5lib') | ||||
| rel2 = str(soup.select('#content .thin .main_column .torrent_table tbody')) | rel2 = str(soup.select('#content .thin .main_column .torrent_table tbody')) | ||||
| authkey = re.findall('authkey=(.*)&torrent_pass=', rel2) | authkey = re.findall('authkey=(.*)&torrent_pass=', rel2) | ||||
| return authkey | return authkey | ||||
| def copytree(src, dst, symlinks=False, ignore=None): | def copytree(src, dst, symlinks=False, ignore=None): | ||||
| for item in os.listdir(src): | for item in os.listdir(src): | ||||
| s = os.path.join(src, item) | s = os.path.join(src, item) | ||||
| @@ -75,13 +73,13 @@ def createtorrent(authkey, directory, filename, releasedata): | |||||
| trackers=[authkey]) # Torf requires we store authkeys in a list object. This makes it easier to add multiple announce urls. | trackers=[authkey]) # Torf requires we store authkeys in a list object. This makes it easier to add multiple announce urls. | ||||
| # Set torrent to private as standard practice for private trackers | # Set torrent to private as standard practice for private trackers | ||||
| t.private = True | t.private = True | ||||
| t.source = "SugoiMusic" | |||||
| t.source = "SugoiMusic" | |||||
| t.generate() | t.generate() | ||||
| ## Format releasedata to bring a suitable torrent name. | ## Format releasedata to bring a suitable torrent name. | ||||
| # The reason we don't just use the directory name is because of an error in POSTING. | # The reason we don't just use the directory name is because of an error in POSTING. | ||||
| # POSTS do not seem to POST hangul/jp characters alongside files. | # POSTS do not seem to POST hangul/jp characters alongside files. | ||||
| filename = f"{releasedata['artist']} - {releasedata['title']} [{releasedata['media']}-{releasedata['format']}].torrent" | filename = f"{releasedata['artist']} - {releasedata['title']} [{releasedata['media']}-{releasedata['format']}].torrent" | ||||
| #filename = filename.replace("\\","") | |||||
| #filename = filename.replace("\\","") | |||||
| try: | try: | ||||
| t.write(filename) | t.write(filename) | ||||
| print("_" * 100) | print("_" * 100) | ||||
| @@ -548,7 +546,7 @@ def detectlanguage(string): | |||||
| def uploadtorrent(torrent, cover, releasedata): | def uploadtorrent(torrent, cover, releasedata): | ||||
| languages = ('Japanese', 'English', 'Korean', 'Chinese', 'Vietnamese') | |||||
| languages = ('Japanese', 'English', 'Korean', 'Chinese', 'Vietnamese') | |||||
| # POST url. | # POST url. | ||||
| uploadurl = "https://sugoimusic.me/upload.php" | uploadurl = "https://sugoimusic.me/upload.php" | ||||
| @@ -572,7 +570,7 @@ def uploadtorrent(torrent, cover, releasedata): | |||||
| # If dryrun argument has not ben passed we will POST the results to JPopSuki. | # If dryrun argument has not ben passed we will POST the results to JPopSuki. | ||||
| if dryrun != True: | if dryrun != True: | ||||
| JPSres = j.retrieveContent(uploadurl, "post", data, postDataFiles) | |||||
| JPSres = sm.retrieveContent(uploadurl, "post", data, postDataFiles) | |||||
| print('\nUpload POSTED') | print('\nUpload POSTED') | ||||
| ## TODO Filter through JPSres.text and create error handling based on responses | ## TODO Filter through JPSres.text and create error handling based on responses | ||||
| @@ -664,12 +662,12 @@ if __name__ == "__main__": | |||||
| with open(f'json_data/config.json') as f: | with open(f'json_data/config.json') as f: | ||||
| cfg = json.load(f) | cfg = json.load(f) | ||||
| loginData = {'username': cfg['credentials']['username'], 'password': cfg['credentials']['password']} | loginData = {'username': cfg['credentials']['username'], 'password': cfg['credentials']['password']} | ||||
| loginUrl = "https://jpopsuki.eu/login.php" | |||||
| loginTestUrl = "https://jpopsuki.eu" | |||||
| successStr = "Latest 5 Torrents" | |||||
| loginUrl = "https://sugoimusic.me/login.php" | |||||
| loginTestUrl = "https://sugoimusic.me" | |||||
| successStr = "Enabled users" | |||||
| # j is an object which can be used to make requests with respect to the loginsession | # j is an object which can be used to make requests with respect to the loginsession | ||||
| j = jpspy.MyLoginSession(loginUrl, loginData, loginTestUrl, successStr, debug=args.debug) | |||||
| sm = smpy.MyLoginSession(loginUrl, loginData, loginTestUrl, successStr, debug=args.debug) | |||||
| # Acquire authkey | # Acquire authkey | ||||
| authkey = getauthkey() | authkey = getauthkey() | ||||
| # Gather data of FLAC file | # Gather data of FLAC file | ||||
| @@ -678,13 +676,13 @@ if __name__ == "__main__": | |||||
| # Folder_name equals the last folder in the path, this is used to rename .torrent files to something relevant. | # Folder_name equals the last folder in the path, this is used to rename .torrent files to something relevant. | ||||
| folder_name = os.path.basename(os.path.normpath(directory)) | folder_name = os.path.basename(os.path.normpath(directory)) | ||||
| # Identifying cover.jpg path | # Identifying cover.jpg path | ||||
| cover_path = directory + "/" + cfg['local_prefs']['cover_name'] | |||||
| # cover_path = directory + "/" + cfg['local_prefs']['cover_name'] | |||||
| # Create torrent file. | # Create torrent file. | ||||
| torrentfile = createtorrent(authkey, directory, folder_name, releasedata) | torrentfile = createtorrent(authkey, directory, folder_name, releasedata) | ||||
| # Upload torrent to JPopSuki | # Upload torrent to JPopSuki | ||||
| uploadtorrent(torrentfile, cover_path, releasedata) | |||||
| # uploadtorrent(torrentfile, cover_path, releasedata) | |||||
| # Setting variable for watch/download folders | # Setting variable for watch/download folders | ||||
| ftp_watch_folder = cfg['ftp_prefs']['ftp_watch_folder'] | ftp_watch_folder = cfg['ftp_prefs']['ftp_watch_folder'] | ||||