FTP Upload with Editorial
Here’s a workflow that uploads the currently open document in Editorial as a markdown file to an FTP host. I use a variation of this workflow to post here on Macdrifter. In fact, this post was written and uploaded from Editorial.
Here’s the detail of the Python script:
:::python
import workflow
import editor
import ftplib
import console
import StringIO
import keychain
import pickle
import cgi
# Uncomment this line to reset stored password
#keychain.delete_password('macdrifter', 'editorial')
login = keychain.get_password('macdrifter', 'editorial')
if login is not None:
user, pw = pickle.loads(login)
else:
user, pw = console.login_alert('FTPS Login Needed', 'No login credentials found.')
pickle_token = pickle.dumps((user, pw))
keychain.set_password('macdrifter', 'editorial', pickle_token)
#
remotePath = "/home/my/full/path/"
host = "hostname.com"
port = 22
docTitle = workflow.get_variable('postTitleVar')
fileName = docTitle+'.md'
confirmation = console.alert('Confirm', 'Go ahead and post?','Yes','No')
postContent = editor.get_text()
# Text encoidng sucks!
encode_string = cgi.escape(postContent).encode('ascii', 'xmlcharrefreplace')
#postContent.encode('ascii', 'replace')
buffer = StringIO.StringIO(encode_string)
#buffer.write(postContent)
buffer.seek(0)
try:
ftp = ftplib.FTP(host, user, pw)
ftp.cwd(remotePath)
ftp.storbinary('STOR '+ fileName, buffer)
ftp.quit()
except Exception, e:
print e
console.alert('Error', e)
action_in = workflow.get_input()
console.hud_alert('Posted '+fileName, 'success')
# Extension point to do something after the file is uploaded
action_out = action_in
workflow.set_output(action_out)