Skip to content

Instantly share code, notes, and snippets.

@sporksmith
Last active August 29, 2015 13:57
Show Gist options
  • Star 0 You must be signed in to star a gist
  • Fork 0 You must be signed in to fork a gist
  • Save sporksmith/9875764 to your computer and use it in GitHub Desktop.
Save sporksmith/9875764 to your computer and use it in GitHub Desktop.
Clipperz json to keepassx xml
#!/usr/bin/env python
import xml.etree.ElementTree as ET
class KPEntry(object):
def __init__(self, title, username, password, url, comment):
self.title = title
self.username = username
self.password = password
self.url = url
self.comment = comment
def __unicode__(self):
ls = [
u'title: %s' % self.title,
u'username: %s' % self.username,
u'password: %s' % self.password,
u'url: %s' % self.url,
u'comment: %s' % self.comment
]
return u'\n'.join(ls)
def subelement(self, parent):
entry = ET.SubElement(parent, 'entry')
title = ET.SubElement(entry, 'title')
title.text = self.title
username = ET.SubElement(entry, 'username')
username.text = self.username
password = ET.SubElement(entry, 'password')
password.text = self.password
url = ET.SubElement(entry, 'url')
url.text = self.url
comment = ET.SubElement(entry, 'comment')
comment.text = self.comment
return entry
def fields_of_entry(entry):
f = []
rawfields = entry['currentVersion']['fields']
for k in rawfields:
f.append(rawfields[k])
return f
def popfield(fields, s):
for i, _ in enumerate(fields):
if fields[i]['label'].lower() == s.lower():
rv = fields[i]
del fields[i]
return rv['value']
return ''
if __name__ == '__main__':
import sys
infile_name = sys.argv[1]
import json
entries = json.load(open(infile_name))
kpentries = []
for entry in entries:
fields = fields_of_entry(entry)
title = entry['label']
username = popfield(fields, 'Username or email')
password = popfield(fields, 'Password')
url = popfield(fields, 'Web address')
comment = '\n'.join(['%s: %s' % (f['label'], f['value']) for f in fields])
kpentries.append(KPEntry(title, username, password, url, comment))
#print unicode(kpentry).encode('utf8')
#print
root = ET.Element('database')
group = ET.SubElement(root, 'group')
title = ET.SubElement(group, 'title')
title.text = 'Clipperz Import'
for kpentry in kpentries:
kpentry.subelement(group)
tree = ET.ElementTree(root)
tree.write(sys.stdout)
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment