72 lines
2.3 KiB
Python
72 lines
2.3 KiB
Python
|
|
import sys, os, subprocess, getpass, pycurl, urllib.parse
|
|
if __name__ == "__main__":
|
|
def get_proxy():
|
|
proxy = ""
|
|
if "http_proxy" in os.environ:
|
|
proxy = os.environ["http_proxy"]
|
|
elif "https_proxy" in os.environ:
|
|
proxy = os.environ["https_proxy"]
|
|
host = proxy[proxy.rfind('/') + 1: proxy.rfind(':')]
|
|
port = proxy[proxy.rfind(':') + 1:]
|
|
foo = proxy.find("socks://") >= 0 or proxy.find("socks5h://")
|
|
return host, int(port), foo
|
|
|
|
def api_upload(endpoint, dest_fmt = "/microblog/%s"):
|
|
pages = []
|
|
with open("updatedfiles.txt") as f:
|
|
pages = f.readlines()
|
|
c = pycurl.Curl()
|
|
|
|
if "http_proxy" in os.environ or "https_proxy" in os.environ:
|
|
hostname, port_no, is_socks = get_proxy()
|
|
c.setopt(pycurl.PROXY, hostname)
|
|
c.setopt(pycurl.PROXYPORT, port_no)
|
|
if is_socks:
|
|
c.setopt(pycurl.PROXYTYPE, pycurl.PROXYTYPE_SOCKS5_HOSTNAME)
|
|
|
|
c.setopt(c.URL, endpoint)
|
|
c.setopt(c.POST, 1)
|
|
for page in pages:
|
|
p = page.strip('\n')
|
|
#i = p.rfind('/')
|
|
# folder = p[1:i]
|
|
# file = p[i]
|
|
destination = dest_fmt % p
|
|
source = p
|
|
print("sending @%s to %s" % (source, destination))
|
|
exists = True
|
|
try:
|
|
with open(source, 'r') as f:
|
|
pass
|
|
except FileNotFoundError as e:
|
|
exists = False
|
|
print(e)
|
|
if (exists):
|
|
c.setopt(c.HTTPPOST, [(destination, (c.FORM_FILE, source))])
|
|
try:
|
|
c.perform()
|
|
except pycurl.error as e:
|
|
print(e)
|
|
c.close()
|
|
|
|
def main():
|
|
if len(sys.argv) < 2:
|
|
print("Usage: neouploader.py [neocities username]")
|
|
return
|
|
try:
|
|
pw = getpass.getpass(prompt="Password: ")
|
|
except KeyboardInterrupt:
|
|
print("Aborted.")
|
|
return
|
|
if len(pw) == 0:
|
|
print("Empty input. Exiting.")
|
|
return
|
|
p = urllib.parse.quote(pw, safe='')
|
|
target = "https://%s:%s@neocities.org/api/upload" % (sys.argv[1], p)
|
|
del pw
|
|
del p
|
|
api_upload(target)
|
|
del target
|
|
main()
|