Google Analytics to Twitter bot

The last week, I've been tinkering with Google's Analytics API. What I wanted to do was have daily reports on my website which then  tweets the difference from yesterday to today. The ideal situation was I would have it SMS me the results. The problem is that my phone carrier (Rogers) complicates things. For most carriers, you can email a carrier-supplied address ( for example) which in turn would send an SMS to that address. But, what Rogers does is once you receive a text, you have to respond back with REPLY to view it. Stupid huh.

To get around this, I subscribe to my bots account via text message and for every new tweet, I get a text message.

What you need: Google Analyrtics API class [download] and twitteroauth [download]

For this to work, you need to create an app on Twitter Developers which creates your consumer key, consumer secret, OAuth secret and token. You also need to create gabot.txt for the bot to cache to.

See the code below for the bot or download at the bottom.



    $website_info = $ga->getWebsiteProfiles();
    // set the date range we want for the report - format is YYYY-MM-DD

    $to = date("Y-m-d", strtotime("now"));
    $from = date("Y-m-d", strtotime('Yesterday'));
    $ga->setDateRange($from, $to);

    // get the report for date, showing pageviews and visits
    $report = $ga->getReport(
            array('dimensions' => urlencode('ga:date'),
                'metrics' => urlencode('ga:pageviews,ga:visits'),
                'sort' => '-ga:pageviews'

    //convert the associative array to a numeric array so we dont have to use the $from date as a key
    $report_n = array_values($report);
    //what we're going to tweet
    //0 = today 1 = yesterday
    $stats = $website_info[0]['title'] . " today: pageviews: " . $report_n[0]['ga:pageviews'] . " - visits: " . $report_n[0]['ga:visits'];

    //string to write in file
    $string = $report_n[0]['ga:pageviews'] . '#' . $report_n[0]['ga:visits'];

    //difference from yesterday to today
    $visits_difference = $report_n[1]['ga:visits'] - $report_n[0]['ga:visits'];
    $pageviews_difference = $report_n[1]['ga:pageviews'] - $report_n[0]['ga:pageviews'];

    //open the file for the old saved data
    $fh = fopen($file, 'r');
    $data_read = fgets($fh);

    //compare read data to latest data
    if ($data_read != $string) {

        $fh = fopen($file, 'w') or die("can't open file");
        fwrite($fh, $string);

        $connection = new TwitterOAuth($consumerKey, $consumerSecret, $oAuthToken, $oAuthSecret);
        $connection->post('statuses/update', array('status' => $website_info[0]['title'] . " difference: visits: $visits_difference pageviews: $pageviews_difference"));

        echo $stats;
} catch (Exception $e) {
    print 'Error: ' . $e->getMessage();




Been bored lately, so I'd thought I'd make an IRC bot in PHP. I wasn't sure how they worked, so I found this to be great:

I added a little more to it, using switch() instead of an if statement. So, instead of:

if ($rawcmd[1] == "!sayit") {

I changed it to


 switch(rtrim($rawcmd[1])) {


and of course everything else in between. 
See the full code here: or here
Not much has changed, but with switch() I found it easier to add more commands. Again, I didn't write most of it. Feel free to test it out though.

I'm for sale.

 I'm starting to freelance now, so I'm up for any work and make an attempt to build my portfolio. I'm available to do any work, small to medium sized projects. Stuff I can do:

  • Code PHP
  • Remote adminstration of Linux boxen
  • Some MySQL stuff (though I hate it)
  • Installl scripts (Wordpress, Drupal, WHMCS, etc..)
  • Help with hosters (I know my way around WHM, cPanel, WHM and so forth)
  • And probably a lot more useless stuff.


Portfolio here. My prices are cheap (say, min $3 CAD) so I'm available to hire. If you have any offers, deals etc, post a comment or use the contact page.


I'm not into social networking or that kind of stuff, but I decided to join Twitter instead. I installed two apps for my iPod for Twitter and I guess I exceed 100 requests an hour.
...So I decided to make my own microblogging site. Sounds like another useless script....but oh well, something to pass the time. Sounds like a good idea? Leave a comment and let me know.


It seems I get quite a number of hits from this blog entry. Below, I've included the microblogging script I made. 

Download here:

To install/use this script, create a directory called 'db' in your doc root and move 'team.csv' in there, also put 'ptb_ini.php' and 'pjjtextbase.php' in your doc root. And that's it. The script is quite infinished and exhibits horrible coding. Use at your own risk ;)


I just added a bunch of modules to 2500mhz, so I should be getting some more traffic (and perhaps money).
I turned 'Developer mode' on in Mobile Safari on my iPod touch, I don't know why I didn't turn it on sooner. I found out what was going on in my HTML pages and CSS's. Maybe this weekend, I'll fix up MailX Mobile, Server Stat and a mobile Wiki.
 Now that basketball is over, I'll be sure to get into my 'productivity mood' now. The top thing on my list is to work on WorkSimple (which needsafixin').

Server Stat

There's an app in the AppStore called Server Database. A pretty simple app, made to manager servers and such. Enter the name, address, function for the server and you're good to go. Well, I decided to make my own version of it using iWebKit. You can check it out here. Its pretty simple, it's read only for now. I'll wrap it up in a tarball and put it on the 'Free PHP Scripts' page.  Anyway, just though I'd share that.

I haven't been up to much, other than creating useless PHP scripts. Just been browsing the LovingTech forums.... Well, I'll get to coding and such....

Refernece Wiki

I modified one of my own wiki scripts to conform with iWebKit to make a reference wiki. I was inspired by a PHP reference app in the AppStore so I decided to make my own (sorta). In short, you search for a function and view the correct syntax, etc... Sorta pointless but time consuming Our team might go to the Provincials which is in March sometime Anyway, Friday tomorrow w00t! And the plot thickens....