tools/export_readinglog_wp.py (2270B) - raw
1 import os, time, re, urllib, uuid, sys 2 import MySQLdb 3 import yaml 4 5 def export(options): 6 log_entries = [] 7 8 cn = MySQLdb.connect(host=options.host, user=options.username, 9 passwd=options.password, db=options.db, use_unicode=True) 10 11 cur = cn.cursor() 12 cur.execute('SELECT id, post_title, post_date, guid FROM wp_posts ' 13 'INNER JOIN wp_term_relationships ON ' 14 'wp_term_relationships.object_id = wp_posts.id ' 15 'WHERE post_status = %s AND term_taxonomy_id = %s ' 16 'ORDER BY post_date ASC', ('publish', 14)) 17 for row in cur.fetchall(): 18 id, title, date, guid = row 19 entry = {'Title': title, 'Date': date, 'GUID': guid} 20 subcur = cn.cursor() 21 subcur.execute('SELECT meta_key, meta_value FROM wp_postmeta ' 22 'WHERE post_id = %s', (id,)) 23 for key, value in subcur.fetchall(): 24 if key == '_readinglog_url': entry['URL'] = value 25 elif key == '_readinglog_author': entry['Author'] = value 26 elif key == '_readinglog_rating': entry['Rating'] = float(value) 27 log_entries.append(entry) 28 29 if options.output is not None: 30 f = open(options.output, 'w') 31 else: 32 f = sys.stdout 33 34 yaml.add_representer(unicode, lambda dumper, value: 35 dumper.represent_scalar(u'tag:yaml.org,2002:str', value)) 36 yaml.dump_all(log_entries, f, default_flow_style=False, allow_unicode=True) 37 38 if __name__ == '__main__': 39 from optparse import OptionParser 40 parser = OptionParser() 41 parser.add_option('-H', '--host', 42 help='connect to MySQL server HOST [default: %default]') 43 parser.add_option('-u', '--username', 44 help='use USERNAME when connecting [default: %default]') 45 parser.add_option('-p', '--password', 46 help='use PASSWORD when connecting [default: no password]') 47 parser.add_option('-d', '--db', 48 help='name of the Wordpress database [default: %default]') 49 parser.set_defaults(host='localhost', username='root', 50 password=None, db='wordpress') 51 parser.add_option('-o', '--output', metavar='FILE', 52 help='write output to FILE instead of stdout') 53 options, args = parser.parse_args() 54 export(options)