Automated Way to Find Google Pagerank

I was looking for an automated way to get Google Pagerank for a few hours and came up with quite a few things, but not many of them were very elegant.  Essentially, Google doesn’t provide an API and it’s against their terms of service to hit them up in an automated way.  I found quite a few places that have come up with close algorithms and calculate PR for sites, but that’s just not accurate enough for me.  The other option is to hit their PR URL that the toolbar uses.  For example:

http://toolbarqueries.google.com/search?client=navclient-auto&hl=en&ch=61470319184&ie=UTF-8&oe=UTF-8&features=Rank&q=info:http%3A%2F%2Fforums.digitalpoint.com%2Fshowthread.php%3Ft%3D164713

That returns the PR of Digital Point Forums, where I found that information, but you can’t change the reference URL, because of a checksum.  That’s the &ch= variable in the URL.  I’m working on a project that needs to look up PR on the fly though, so that just won’t work.  I ended up finding a script that I could use, but the guy didn’t put his URL in the comments, and I since can’t find it – oops.  I think he deserves a pat on the back though.  If this belongs to you, or you know who’s it is, let me know.

I tweaked the script and installed it on my Toolerific.com website.  Now you can go there and check the PR of any site without a captcha, which is nice.  The tool is here.

Now, the best automated way to check pagerank is to hit that site with cURL and take out the value of the HTML tag with the id “value”.  The reason that is the best automated way to do it is because Google may change their checksum rules and that will break the source code that I used to generate it, but that site will always be laid out like that, so you don’t have to worry about changing anything.  If you want the code I used, you can view it here.

Update: This doesn’t seem to work ALL of the time.  I suspect it has something to do with the checksum, but can’t figure it out.  Seems to be about 27% of the time, which isn’t great odds, but it works MOST of the time.  I’ll keep you posted if I find out more.

Paginating in MSSQL

I don’t really work with MSSQL very much and was wondering how to do pagination similar to doing it in MySQL with the LIMIT command.  It’s MUCH harder in MSSQL, but here is how you do it:

SELECT * FROM
 (SELECT TOP [size_of_record_set] * FROM
 (SELECT TOP [end_record] * FROM [table] ORDER BY [field] ASC) AS tbl1 ORDER BY [field] DESC
 ) AS tbl2

The Twitter API

I’ve been messing with the Twitter API for the first time in the last few hours, and I’ve learned a TON.  I know – I’m jumping on the bandwagon late, but oh well.  I managed to create a script to retweet “stuff” based on the search functionality and I made a script to automatically follow people that post specific things.  I also managed to get my account suspended in like 2 hours due to suspicious activity – whoops.  I guess you live, you learn.  Basically everything for status updates and following uses CURL, which looks a little something like this:

<?php
 $username = "<username>";
 $password = "<password>"; t t
 $message = "<message content>";
 $url = '<API URL>';
 $curl_handle = curl_init();
 curl_setopt($curl_handle, CURLOPT_URL, "$url");
 curl_setopt($curl_handle, CURLOPT_CONNECTTIMEOUT, 2);
 curl_setopt($curl_handle, CURLOPT_RETURNTRANSFER, 1);
 curl_setopt($curl_handle, CURLOPT_POST, 1);
 curl_setopt($curl_handle, CURLOPT_POSTFIELDS, "status=$message");
 curl_setopt($curl_handle, CURLOPT_USERPWD, "$username:$password");
 $buffer = curl_exec($curl_handle);
 curl_close($curl_handle);
?>

If you’re looking for more info on how to use twitter, check out this eSeries.  It’s a good resource.

So, have questions?  Let me know.  I’m hoping to do a twitter series soon!

Tidbit Tuesday on PHP: Simple MySQL Database Insert Function

This builds on a function I did last week: db_query(). You can send any array straight to a MySQL database and it’ll even check to make sure the column actually exists.  Oh, and it returns the id of the record you just added in case you needed it.

<?php
   function db_array_insert($cfg_array, $table, $array) {
      require_once("dbQuery.function");

      $sql = "show columns from ".$table
      $tableArray = db_query($cfg_array, $sql);
      $inputString = "";

      foreach($tableArray as $key => $value) {
         if (array_key_exists($value[0], $array) && $value[0])
            $inputString .= "'".addslashes($array[$value[0]])."', ";
         else
            $inputString .= "'', ";
      }

      $inputString = substr($inputString, 0, -2);
      $sql = "insert into $table values(".$inputString.")"
      db_query($cfg_array, $sql);

      return mysql_insert_id();
   }

   $insert_array = array(
      "column_1" => "something_1",
      "column_2" => "something_2"
   );

   $cfg_array = array(
      "db_loc" => 'www.databaselocation.com',
      "db_user" => 'some user'
      "db_pass" => 'some password'
      "db_name" => 'database_name_here'
   );

   db_array_insert($cfg_array, "some_table", $insert_array); //and use it.
?>

So what do you think?  Having a problem?  Just let me know in the comments.

Tidbit Tuesday on PHP: Simple MySQL Database Query Function

It’s always great to create functions for those things you do a lot.  Probably the single most common function I execute is database calls.

Here is a simple script for hitting up your MySQL database with a query:

<?php
   if(!function_exists(dbQuery)) {
      function db_query($cfg_array, $query) {
         $connection =
            mysql_connect(
               $cfg_array['db_loc'],$cfg_array['db_user'],$cfg_array['db_pass']
            ) or die(mysql_error());

         mysql_select_db($cfg_array['db_name'],$connection)
            or die(mysql_error()." >> ".$query);
         $result = mysql_query($query,$connection)
            or die (mysql_error()." >> ".$query);
         $i = 0;

         if($result != 1) {
            while ($data_array = mysql_fetch_array($result)) {
               foreach($data_array as $key => $value) {
                  $tableArray[$i][$key] = stripslashes($data_array[$key]);
               }

               $i++;
            }

            return $tableArray;
         }
      }
   }
?>

You should be able to just copy and paste this as a function and call it in one of two ways:

$cfg_array = array(
   "db_loc" => 'www.databaselocation.com',
   "db_user" => 'some user'
   "db_pass" => 'some password'
   "db_name" => 'database_name_here'
);

$query = "SELECT * FROM 'table' WHERE some_column = 'something'";

db_query($cfg_array, $query); // This will return an array with the table in it.

$query = "UPDATE/DELETE/ETC * FROM 'table' WHERE some_column = 'something'";

db_query($cfg_array, $query); // This will return return an empty array, but still works.

I use this function in EVERYTHING.  I also have some other functions that use this as its base.  Someday I’ll turn it into a class.

So, what do you think?

Tidbit Tuesday on PHP: Holiday Notices for Business Sites

This is a handy script for managing an out of office message on your website.  I find this very useful on business websites when you’re tired of making that one little change to let people know when the office will be shut down.  With about 15 minutes of extra work, you only need to do it once a year.

Let’s say for instance we’re doing all of the major U.S. Holidays in 2010, observing weekend Holidays with a day off on either side of the weekend.  This means first we need to determine what those dates are.  I just happen to have looked up the six most common, listed below:

  • New Year’s Eve – January 1st
  • Memorial Day – May 31st
  • Independence Day – July 5th (July 4th is Sunday)
  • Labor Day – September 6th
  • Thanksgiving – November 25th and 26th
  • Christmas – December 24th (December 25th is a Saturday)

Now that we know our dates, we can build them into an array:

$date_array = array(
   "New Yearís Eve" =>
      array("leaving" => "2010-12-31", "returning" => "2011-01-03"),
   "Memorial Day" =>
      array("leaving" => "2010-05-31", "returning" => "2010-06-01"),
   "Independence Day" => // July 4th is a Sunday
      array("leaving" => "2010-07-05", "returning" => "2010-07-06"),
   "Labor Day" =>
      array("leaving" => "2010-09-06", "returning" => "2010-09-07"),
   "Thanksgiving" =>
      array("leaving" => "2010-11-025", "returning" => "2010-11-029"),
   "Christmas" => // December 25th is a Saturday
      array("leaving" => "2010-12-24", "returning" => "2010-12-27"),
 );

The date array can easily be stored in a database or be made up of more complicated functions that would calculate the holidays across multiple years with some basic logic.  Maybe we’ll cover the latter part in another post some day.

Now we need to build the function itself.  This function will be run every time the page loads.  You can even include the function in a separate file to be included on multiple pages:

function holiday_message($date, $date_array) {
   $date = strtotime($date); // Reformat the date so we can do math on it.
   foreach($date_array as $key => $value) {
      $leaving = strtotime($value['leaving']);
      $returning = strtotime($value['returning']);
      $early_warning = $leaving - 86400 * 7;
      // If the date is between (7 days before) leaving and returning
         if($date > $early_warning && $date < $returning) {
            echo
               "We will be observing ".$key." from ".date("Y-m-d", $leaving).
               " until ". date("Y-m-d", $returning).".
               When we return we will be more than happy to assist you.";
         }
   }
}

Now we just need to execute this function anywhere on the page:

holiday_message(date("Y-m-d H:i:s"),$date_array);

This code can be customized in numerous different ways, so the the message is more formal, or works for your specific situation.  You can also change the way days are stored or calculated, like the example above.  This is a core to get you started.  Where can you go from here?