When A Service Can't Commit To What It Is Selling

I’ve stumbled upon a service which promises your Twitter account to automatically grow enormously in terms of followers and make money on the way. It’s called TwitterTrafficMachine, and I am absolutely not going to link to them.

They might be nice people, good at what they’re doing, and this might be even legit according to all the involved Terms Of Service agreements of any of the services they’re using, but something about it doesn’t feel right. First of all, it looks cheap and sleazy. Second, and what I find most bothering, is that they try to sell you their service as something excellent, and then in the disclaimer page they say:

And you should also know that the testimonials here illustrate extraordinary results and unique experiences which do not apply to most customers who use our products and which you should not expect to achieve.

If I should not expect to achieve what you’re selling, then why should I buy it? If you have a service, don’t offer it if your client can’t expect to achieve what you’re offering.

If Twitter Go The Advertising Model Way, They Might Hit The Jackpot

There are wild guesses all over the blogosphere as to where Twitter is headed when it comes to its business model. It has certainly become an obsession to talk about it in some circles, and the air is filled with speculations — from Calacanis’s advertising/subscription model, through TechCrunch’s pro/business or sponsored suggested accounts model, to the hilarious downtime advertising model.

Wherever it may eventually go — and my bet is it will be a mixture of pro accounts and advertising — the advertising model in Twitter might be something very innovative, both in targeting and delivery.

Targeting – Easy Semantics and The Realtime Factor

Targeting a Twitter user is very convenient. They don’t have to assume or speculate anything about a user, they don’t have to track cookies and collect Behavioral Targeting data and try to determine if a user is action prone or not, or try all the other good old targeting tricks, such as geo-targeting and figuring household income. The simple nature of Twitter messages, which is very short and informative, makes them very easy to process semantically — aside from lolspeak and l33t, sentences are simple, usually noun/pronoun-verb-adverb-adjective. And the best part is, the user gives information about himself voluntarily — location, likes and dislikes, actions performed, etc.

Take me for example, in this imaginary (but could-be-true) scenario:

  • In SFO, waiting to board flight for JFK. Coffee anybody?
  • Just saw the new Pearl Jam album, love them!
  • @johndoe Let’s meet later this evening for dinner

Do you realize how much Twitter knows about me in the 5 minutes I tweeted these three? They can advertise to me flight tickets, coffee in SFO, Pearl Jam and similar music, and places to eat dinner in New York.

Now, you might say that Facebook or other social networks can provide similar targeting, but the realtime nature of Twitter makes it even more powerful. I might ditch Pearl Jam in a month in favor of Soundgarden, and Twitter will know that immediately. I might be in a conference and suddenly crave a steak. The relevance of the advertising is much better when my realtime wish or craving is in the equation.

Delivery – Unobtrusiveness and Flow

The way Twitter will deliver the ads will have a very high impact on the user responsiveness to the advertising. And the fact that Twitter has an open API and a lot of users using 3rd party clients to access it, will force them to embed the ads in the Twitter stream. They could be “full tweet ads” or they could be “tweet-appended ads”.

For example:

  • In SFO, waiting to board flight for JFK. Coffee anybody?
    • From twitter: Drink Coffee at Starbucks@SFO!
    • From twitter: Next time, save on airfare with MyImaginaryTravelAgent!
  • Just saw the new Pearl Jam album, love them!
  • @johndoe Let’s meet later this evening for dinner

Or:

  • In SFO, waiting to board flight for JFK. Coffee anybody?
  • Just saw the new Pearl Jam album, love them!
  • @johndoe Let’s meet later this evening for dinner
    • From johndoe: sure let’s eat a steak! (From twitter: check out the SteakHouse on 5th and 34)

I’m For It, The World Is Ready

I would not care receiving both these forms of advertising, if they are well integrated in the flow of my Twitter stream, and especially if they are so well targeted. I believe the semantics tools today are good enough to process meaning from a user’s short and simple under-140-characters sentences, since there is no hard contextual analysis to perform. And the realtime factor makes the targeting temporal-aware — they know what I need when I need it. Regardless of what payment model they choose (CPC, CPA, CPM), the targeting and delivery methods are the winners here.

There, I’ve contributed my part to the Twitter business model obsession.

PEAR’s Services_Twitter and the Source Option

I recently started using PEAR’s Services_Twitter package (still in beta) written by Joe Stump (from Digg) and David Jean Louis. My natural choice would have been Zend Framework’s Zend_Service_Twitter, but I wasn’t aware that it was out of the incubator by the time I started.

Using and integrating the Services_Twitter package was very easy, and didn’t require much more than copying and pasting the code from the class documentation:

require_once 'Services/Twitter.php';
$username = 'You_Username';
$password = 'Your_Password';

try {
    $twitter = new Services_Twitter($username, $password);
    $msg = $twitter->statuses->update("I'm coding with PEAR right now!");
    print_r($msg); // Should be a SimpleXMLElement structure
} catch (Services_Twitter_Exception $e) {
    echo $e->getMessage();
}

However, once I requested the “source” option from twitter (that nifty thing that says where the tweet was sent via), things got complicated. Apparently, when the Twitter.php factory builds an instance of an API driver, it instantiates a new object, and doesn’t pass it the current factory options, so this didn’t work:

    $twitter = new Services_Twitter($username, $password);
    $twitter->setOptions('source','myapp');
    $msg = $twitter->statuses->update("I'm coding with PEAR right now!");
    print_r($msg); // Should be a SimpleXMLElement structure

The status was updated, but with no source. A short debug and look through the source revealed that factory behavior (not passing the current options to the newly instantiated statuses object). I don’t really see the rationale behind this, so I filed a bug report.

What did work, was instantiating a Twitter_Statuses object, and working with it directly, like this:

    include_once "Services/Twitter/Statuses.php";

    $twitter = new Services_Twitter_Statuses($username, $password);
    $twitter->setOptions('source','myapp');
    $msg = $twitter->update("I'm coding with PEAR right now!");

Now you can Tweet away with source!

PEAR's Services_Twitter and the Source Option

I recently started using PEAR’s Services_Twitter package (still in beta) written by Joe Stump (from Digg) and David Jean Louis. My natural choice would have been Zend Framework’s Zend_Service_Twitter, but I wasn’t aware that it was out of the incubator by the time I started.

Using and integrating the Services_Twitter package was very easy, and didn’t require much more than copying and pasting the code from the class documentation:

require_once 'Services/Twitter.php';
$username = 'You_Username';
$password = 'Your_Password';

try {
    $twitter = new Services_Twitter($username, $password);
    $msg = $twitter->statuses->update("I'm coding with PEAR right now!");
    print_r($msg); // Should be a SimpleXMLElement structure
} catch (Services_Twitter_Exception $e) {
    echo $e->getMessage();
}

However, once I requested the “source” option from twitter (that nifty thing that says where the tweet was sent via), things got complicated. Apparently, when the Twitter.php factory builds an instance of an API driver, it instantiates a new object, and doesn’t pass it the current factory options, so this didn’t work:

    $twitter = new Services_Twitter($username, $password);
    $twitter->setOptions('source','myapp');
    $msg = $twitter->statuses->update("I'm coding with PEAR right now!");
    print_r($msg); // Should be a SimpleXMLElement structure

The status was updated, but with no source. A short debug and look through the source revealed that factory behavior (not passing the current options to the newly instantiated statuses object). I don’t really see the rationale behind this, so I filed a bug report.

What did work, was instantiating a Twitter_Statuses object, and working with it directly, like this:

    include_once "Services/Twitter/Statuses.php";

    $twitter = new Services_Twitter_Statuses($username, $password);
    $twitter->setOptions('source','myapp');
    $msg = $twitter->update("I'm coding with PEAR right now!");

Now you can Tweet away with source!