#!/usr/bin/env python
# -*-*- encoding:iso-8859-15 filetype:python expandtab:yes tabstop:4 shiftwidth:4 softtabstop:4
# autoindent:yes -*-*-
#
# havard@dahle.no GPL (C) 2005

__doc__ = "Usage: pipe email message to this script for automatic post on your blog"

BLURL = "http://www.orakel.ntnu.no/~havardda/blogg/xmlrpc.php"
BLOGG = "kibbitz"
USRNM = ""
PSWRD = "" 
CTGRY = "" #default category id


import sys

try:
    import xmlrpclib
    import email
    from email.Header import decode_header
    from string import join
except ImportError:
    sys.exit(100)


def post(msg, categories = None):
    t = decode_header(msg.get("Subject"))
    topic =  join([str(i[0]) for i in t])
    contents = msg.get_payload(decode=1)

    rpc = xmlrpclib.ServerProxy(BLURL)

    publish = xmlrpclib.Boolean(1)

    if not categories:
        cats = [{'categoryId': CTGRY},]
    else: 
        cats = []
        for c in rpc.metaWeblog.getCategories(BLOGG, USRNM, PSWRD):
            if categories.count(c["categoryName"]): 
                cats.append({'categoryId':c['categoryId']})
    try:
        id = rpc.blogger.newPost("",            # appkey
                    BLOGG,     # blogid
                    USRNM,   # username
                    PSWRD,   # password
                    "<title>%s</title>\n%s" % (topic, contents),    # content?
                    publish     # publish?
                   )
        rpc.mt.setPostCategories(id, #postID
                                 USRNM, #username
                                 PSWRD, #password
                                 cats
                                )
    except xmlrpclib.Fault, (msg):
        print msg
        return 100
    except:
        return 100

    return 0

if __name__ == "__main__":
    if sys.stdin.isatty():
        print __doc__
        sys.exit(100)

    try:
        msg = email.message_from_file(sys.stdin)
        cats = sys.argv[1:]
        sys.exit(post(msg, cats))
    except:
        print "ouch could not post email on blog"
        sys.exit(100)
    

