Browse Source

more initial files

master
sharky555 4 years ago
parent
commit
7405de872c
2 changed files with 131 additions and 7 deletions
  1. +14
    -7
      autoupload.py
  2. +117
    -0
      smpy.py

+ 14
- 7
autoupload.py View File

@@ -46,12 +46,17 @@ 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://jpopsuki.eu/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]

# 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
soup = BeautifulSoup(smpage.text, 'html5lib')
rel2 = str(soup.select('#content .thin .main_column .torrent_table tbody'))
authkey = re.findall('authkey=(.*)&amp;torrent_pass=', rel2)
return authkey return authkey
@@ -70,6 +75,7 @@ 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.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.
@@ -542,8 +548,9 @@ def detectlanguage(string):


def uploadtorrent(torrent, cover, releasedata): def uploadtorrent(torrent, cover, releasedata):


languages = ('Japanese', 'English', 'Korean', 'Chinese', 'Vietnamese')
# POST url. # POST url.
uploadurl = "https://jpopsuki.eu/upload.php"
uploadurl = "https://sugoimusic.me/upload.php"


# Dataset containing all of the information obtained from our FLAC files. # Dataset containing all of the information obtained from our FLAC files.
data = releasedata data = releasedata


+ 117
- 0
smpy.py View File

@@ -0,0 +1,117 @@
import os
import pickle
import datetime
from urllib.parse import urlparse
import requests


class MyLoginSession:
def __init__(self,
loginUrl,
loginData,
loginTestUrl,
loginTestString,
sessionFileAppendix='_session.dat',
maxSessionTimeSeconds=30 * 60,
proxies=None,
userAgent='Mozilla/5.0 (Windows NT 6.1; WOW64; rv:40.0) Gecko/20100101 Firefox/40.1',
debug=False,
forceLogin=False,
**kwargs):
"""
save some information needed to login the session

you'll have to provide 'loginTestString' which will be looked for in the
responses html to make sure, you've properly been logged in

'proxies' is of format { 'https' : 'https://user:pass@server:port', 'http' : ...
'loginData' will be sent as post data (dictionary of id : value).
'maxSessionTimeSeconds' will be used to determine when to re-login.
"""
urlData = urlparse(loginUrl)

self.proxies = proxies
self.loginData = loginData
self.loginUrl = loginUrl
self.loginTestUrl = loginTestUrl
self.maxSessionTime = maxSessionTimeSeconds
self.sessionFile = urlData.netloc + sessionFileAppendix
self.userAgent = userAgent
self.loginTestString = loginTestString
self.debug = debug

self.login(forceLogin, **kwargs)

def modification_date(self, filename):
"""
return last file modification date as datetime object
"""
t = os.path.getmtime(filename)
return datetime.datetime.fromtimestamp(t)

def login(self, forceLogin=False, **kwargs):
"""
login to a session. Try to read last saved session from cache file. If this fails
do proper login. If the last cache access was too old, also perform a proper login.
Always updates session cache file.
"""
wasReadFromCache = False
if self.debug:
print('loading or generating session...')
if os.path.exists(self.sessionFile) and not forceLogin:
time = self.modification_date(self.sessionFile)

# only load if file less than 30 minutes old
lastModification = (datetime.datetime.now() - time).seconds
if lastModification < self.maxSessionTime:
with open(self.sessionFile, "rb") as f:
self.session = pickle.load(f)
wasReadFromCache = True
if self.debug:
print("loaded session from cache (last access %ds ago) "
% lastModification)
if not wasReadFromCache:
self.session = requests.Session()
self.session.headers.update({'user-agent': self.userAgent})
res = self.session.post(self.loginUrl, data=self.loginData,
proxies=self.proxies, **kwargs)

if self.debug:
print('created new session with login')
self.saveSessionToCache()

# test login
res = self.session.get(self.loginTestUrl)
if res.text.lower().find(self.loginTestString.lower()) < 0:
if self.debug:
print(res.text)
raise Exception("could not log into provided site '%s'"
" (did not find successful login string)"
% self.loginUrl)

def saveSessionToCache(self):
"""
save session to a cache file
"""
# always save (to update timeout)
with open(self.sessionFile, "wb") as f:
pickle.dump(self.session, f)
if self.debug:
print('updated session cache-file %s' % self.sessionFile)

def retrieveContent(self, url, method="get", postData=None, postDataFiles=None, **kwargs):
"""
return the content of the url with respect to the session.

If 'method' is not 'get', the url will be called with 'postData'
as a post request.
"""
if method == 'get':
res = self.session.get(url, proxies=self.proxies, **kwargs)
else:
res = self.session.post(url, data=postData, proxies=self.proxies, files=postDataFiles, **kwargs)

# the session has been updated on the server, so also update in cache
self.saveSessionToCache()

return res

Loading…
Cancel
Save