My TweetSpeak Update

For those of you who are on Twitter, you might appreciate TweetSpeak. It makes Twitter a bit more like office banter by speaking it in the background. Here are some updates I made to it — basically, I added some error handling to deal with having too many client requests, put a few more substitutions in so that Alex figured out how to translate Twitterese like “kthxbye” and “crrrrrraaaaaaaaaaaaaaaxzy”, and generally cleaned up Twitterisms in the feed.


This code is released under the GPL 2, and is based on the original by Ward Cunningham.

#!/usr/bin/perl
# Copyright (c) 2008, Cunningham & Cunningham, Inc
# Enhanced by Smokejumper Consulting
# Released under GPL v2.

my $user = 'YourUser:urp@ssw0rd';
my $db = $ENV{'HOME'} . '/.tweet-db';
my $current;
$current = `cat $db` if -e $db;

print "Using database at $db\n";
while (1) {
  twitt();
  `echo $current > $db`;
  sleep(180) if $user;
}

sub twitt() {

  #`say -v Victoria tweet tweet?`;

  my $xml = $user
    ? `curl -s -u $user http://twitter.com/statuses/friends_timeline.xml`
    : `curl -s http://twitter.com/statuses/public_timeline.xml`;

  if($xml =~ m|(.+)<\/error>|) {
    print "ERROR: $1\n";
    my $msg = "Error reading from Twitter.";
    $msg = $1 if $1 =~ m|^(.*?\.)|;
    `say -v Victoria $msg`;
    sleep(120) if $user;
    return;
  }

  for (reverse(split(//, $xml))) {

    my $id = $1 if /(.*?)<\/id>/;
    next if $current and $id <= $current;
    $current = $id;
    next if /&#\d{3,6};/;

    my $name = $1 if /(.*?)<\/name>/;
    $name =~ s/Ross/Ross Mayfield/;
    $name =~ s/RobertFischer/Robert Fischer/;
    $name =~ s/danah/Danah Boyd/;
    $name =~ s/marshallk/Marshall Kirkpatrick/;
    $name =~ s/(Jeff Atwood)/$1 of CodingHorror/;
    $name =~ s/Chr15 P1r1LL0/Chris Pirillo/;

    my $text = $1 if /(.*?)<\/text>/;
    $text =~ s|\s*&\s*| and |g;
    $text =~ s|\s*<\s*| less than |g;
    $text =~ s|\s*>\s*| greater than |g;
    $text =~ s|"|"|g;
    print "$id $name -- $text\n";
    next if $text =~ /\b(el|que|muy)\b/;

    $text =~ s/'/'"'"'/g;
    $text =~ s/\bw\// with /g;
    $text =~ s/&#\d+;/ blah /g;
    $text =~ s/:?\s*http:\/\/\S+/ at this url /g;
    $text =~ s/\b@(\w+)/$1.  /;
    $text =~ s/\b:D\b//g;
    $text =~ s/\b:P\b//g;
    $text =~ s/\b:-p\b//g;
    $text =~ s/\b:P\b//g;
    $text =~ s/\bLOL\b/ ha ha. /g;
    $text =~ s/\bFTW/for the win/ig;
    $text =~ s/smokejumperit/Smokejumper I T /ig;
    $text =~ s/\.?\s*kthn?xbye?\.?/.  K Thanks Bye./ig;
    $text =~ s/hpricot/hayprihcott/ig;
    $text =~ s/\bmins\b/minutes/ig;
    $text =~ s/\bttyl\b/talk to you later/ig;
    $text =~ s/\b<3\b/heart/ig;
    $text =~ s/\bcr+A+x?z+y\b/CRAZY/ig;
    $text =~ s/\.[\.\s]?\./.../ig;
    $text =~ s/(\d+)-+(\d+)/$1 to $2/ig;
    $text =~ s/\bgoto\b/go to/ig;
    $text =~ s/\b\+\b/plus/ig;
    $text =~ s/\b=\b/equals/ig;
    $text =~ s/\bocaml\b/O camel/ig;
    $text =~ s/\bjocaml\b/joe camel/ig;

    `say -v Victoria '$name.'; say -v Alex '$text.'`;
  }
}

This entry was posted in To Be Categorized and tagged . Bookmark the permalink. Post a comment or leave a trackback: Trackback URL.

3 Comments

  1. Posted April 3, 2008 at 6:57 PM | Permalink

    darn you kids and your fancy lingo. in my day, FTW most certainly did not mean “for the win”. no wonder no one thinks my “punks not dead. FTW” tattoo is cool anymore.

  2. Posted April 4, 2008 at 11:23 AM | Permalink

    Hamlet – I always thought it meant F*** the world! What does it mean in relation to your tatoo?

  3. Posted April 7, 2008 at 11:41 AM | Permalink

    Okay, I may need to start a Google Code repository for this. It’s changing pretty regularly as I bump into new stuff to add.

2 Trackbacks

  1. By Enfranchised Mind » Updated TweetSpeak Again on April 3, 2008 at 4:21 PM

    [...] the previous post. I updated the source code to handle “ocaml”, “jocaml”, “+”, [...]

  2. [...] had a bunch of people join Twitter, and that was kind of neat, particularly when hooked up to TweetSpeak — it was like the last Monday of the month all the time. I got lots of good tips about [...]

Post a Comment

Your email is never published nor shared. Required fields are marked *

*
*

You may use these HTML tags and attributes: <a href="" title=""> <abbr title=""> <acronym title=""> <b> <blockquote cite=""> <cite> <code> <del datetime=""> <em> <i> <q cite=""> <strike> <strong> <pre lang="" line="" escaped="">