Skip to content

Instantly share code, notes, and snippets.

@rsdy
Created June 25, 2012 22:36
Show Gist options
  • Save rsdy/2991889 to your computer and use it in GitHub Desktop.
Save rsdy/2991889 to your computer and use it in GitHub Desktop.
dump android contacts to remote host using ssh
command="gpg --yes --encrypt --recipient [email protected] --output=contacts-$(date +%Y%m%d%H%M).json.gpg",no-pty,no-port-forwarding ssh-rsa etc....
import android
import json
import re
from collections import defaultdict
def format(cur):
new = defaultdict(list)
handlers = [(r'^.+@.+\..+$', 'email'),
(r'^\+?[0-9- ]{9,}$', 'phone')]
for row in cur:
for field, data in ((k, v) for k,v in row.iteritems() if k.startswith('data')):
for regex, new_field in handlers:
if re.match(regex, data):
new[new_field].append(data)
break
return dict(((k, list(set(v))) for k, v in new.iteritems()),
name=cur[0]['display_name'])
def rearrange(acc, cur):
acc[cur['raw_contact_id']].append(cur)
return acc
def dump_contacts():
droid = android.Android()
contacts = droid.queryContent('content://com.android.contacts/data',
["data%d" % i for i in range(1,15)] + ['display_name','raw_contact_id'],
None, None, None)[1]
return map(format, reduce(rearrange, contacts, defaultdict(list)).itervalues())
if __name__ == '__main__':
from subprocess import Popen, PIPE
Popen('ssh -i /sdcard/sl4a/scripts/id_rsa phone@host -T'.split(),
stdin=PIPE).communicate(input=json.dumps(dump_contacts()))
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment