Articles tagged in jaiku

  1. Need to Tweet Less, Blog More

    It has been more than 3 weeks since my last blog post, and I blame it sorely on Twitter and I am sure it has nothing to do with my laziness. Hmm. It wasn't the first that my blog was threatened by Twitter, and you would think that I have migrated to Jaiku already?!

    Okay. I did give Jaiku a try because of their seemingly working IM interface. The working bit was emphasised because it worked, but not very well. Stuff I posted sometimes take up to 12 hours for it to appear on Jaiku, and then IM had outage after outage. At the end I figured out that it would have been easier for me to write my own XMPP bot for Twitter -- and that's exactly what I did. A 500 line XMPP bot using pyxmpp + python-twitter wrapper and it does everything the old bot did plus more. Maybe I'll share the code sometime when I clean it up... But I am back to Twitter for now (although thinking about running my own Laconi.ca server).

    So I guess it would be a good idea to revise what I have tweet today.

    Enough for tonight. Yes -- need to resist the urge to tweet, but blog more. Let me tweet about it :)

  2. Moved from Twitter to Jaiku

    I have not been twittering much recently because of one and only one reason.

    IM is still not working at Twitter

    That has been on my status page for a few weeks now and I have only been twittering via IM (routing it through my own Jabber server). That sucks. While they have been triumphing the fact they have made it through WWDC, can someone please fix that IM thing?!

    Or maybe it is not necessary. As of yesterday I am now updating my status on Jaiku (thanks to Glenn for giving me the invite). Currently you can't sign up new account there but hopefully soon after they have moved to Google AppEngine. At least their IM bot works...

    The next task is to automatically post my Jaiku status to Twitter. Most cross-posting tools are online based, and you can only instruct Jaiku to sync with Twitter but not the other way around. Well I didn't really look long enough because "reinventing the wheel" here is actually relatively cheap, as both Jaiku and Twitter has well published RESTful API. I quickly do up a Python script that takes new entries from my Jaiku feed and publish them onto Twitter.

    Here's the code:

     1
     2
     3
     4
     5
     6
     7
     8
     9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
    29
    30
    31
    32
    33
    34
    35
    36
    37
    38
    39
    40
    41
    42
    43
    44
    45
    46
    47
    48
    49
    50
    51
    52
    53
    54
    55
    56
    57
    #!/usr/bin/python
    
    import anydbm
    import feedparser
    import os
    import re
    import sys
    import urllib
    import urllib2
    
    # Configurable variables
    JAIKU_USERNAME = 'scottyang'
    TWITTER_USERNAME = 'scottyang'
    TWITTER_PASSWORD = 'mypassword'
    
    # Other constant
    TWITTER_ENDPOINT = 'http://twitter.com/statuses/update.json'
    
    def main():
        db = anydbm.open(os.path.join(os.environ.get('HOME', '/tmp'),
            '.jaiku2twitter.db'), 'c')
        feed = feedparser.parse('http://%s.jaiku.com/feed/rss' % JAIKU_USERNAME,
            etag=(db.get('etag') or None))
        if feed.get('status') == 304:
            pass
        elif feed.bozo:
            print 'Error: %s' % feed.bozo_exception
        else:
            auth = urllib2.HTTPBasicAuthHandler()
            auth.add_password('Twitter API',
                'twitter.com',
                TWITTER_USERNAME,
                TWITTER_PASSWORD)
            opener = urllib2.build_opener(auth)
    
            for entry in reversed(feed.entries):
                link = str(entry.link)
                if link.startswith('http://%s.jaiku.com/presence' % JAIKU_USERNAME):
                    if link not in db:
                        value = entry.summary
                        value = re.search(r'^<p>(.*?)</p>', value, re.M | re.S)
                        if value:
                            value = value.group(1).strip()
                            print 'Jaiku->Twitter: %s' % value
                            response = opener.open(TWITTER_ENDPOINT,
                                'status=%s' % urllib.quote(value))
                            response.read()
                            db[link] = '1'
    
            if feed.etag:
                db['etag'] = feed.etag
    
            db.sync()
            db.close()
    
    if __name__ == '__main__':
        main()
    

    Or you can download it here. It requires the Universal Feed Parser, and it creates a BSDdb file in your home directory to track what entries have it posted. It supports etag to hopefully reduce load on Jaiku. Tested under Python 2.4 and 2.5. You just need to fill in your Jaiku username, Twitter username/password, and then instruct cron to run it every now and then. I run every 10 minutes to publish my presence/status on Jaiku to Twitter.