Dan Knight
- 2002.07.16
We'll start by noting a programming error in the previous column.
Here's the code we first came up with to see if a record
existed:
- if ($get_links == "") {die ("no record");}
- echo "<li> <a
href=\"/arc/$thisdate.html\">$today in LEM history:</a>
$get_links[stories]</li>";
It seemed to work just fine, until the day we didn't have a
record. Then it did what the die command is supposed to do -
stopped execution. Oops.
Thinking things through, I revised the code. Instead of testing
if there was no data, I tested if there was data as
follows:
- if ($get_links <> "")
- {echo "<li> <a
href=\"/arc/$thisdate.html\">$today in LEM history:</a>
$get_links[stories]</li>";}
Voilà, problem solved. And we've had the previous column
fixed for some time to reflect the change.
We discovered one more problem: The 80 character field for URLs
just wasn't long enough for some of the sites we've linked to. We
ended up boosting that field length to 128 characters to play it
safe.
Automating the Date Stamp
This week we've made to more automation changes to the site. The
first was automating the time stamp that appears on the home page
and in a few other spots. I've been manually updating it for years
- and sometimes making mistakes.
Also, since we're adding links throughout the day, the manual
timestamp was incorrect in no time at all. Time to figure out how
to display the time of the most recent link addition.
On our Apple
Quicklinks headline news site, this was easy. We have one
database of links, so we simply check for the most recently added
one, like this:
- $last_added = mysql_fetch_array(mysql_query("SELECT * FROM
xlinks ORDER BY timestamp DESC LIMIT 1"));
-
- $timestamp = $last_added[timestamp];
-
- echo "<h5>Most recent link added ";
- echo date("h:i a T l, F j, Y", $timestamp);
- echo "</h5>";
The first line selects the most recently added record, and the
next line reads the timestamp. Then we display it with the format
hour, minute, am/pm, time zone, weekday, month, date, and year.
But on Low End Mac, we have two kinds of links - those on our
site and those on other sites. Each is kept in a separate database,
so we couldn't do things quite as simply as on the Quicklinks
site.
Here's what we came up with for LEM:
- $latestlem = mysql_fetch_array(mysql_query("SELECT * FROM
links ORDER BY timestamp DESC LIMIT 1"));
-
- $latest = mysql_fetch_array(mysql_query("SELECT * FROM
xlinks ORDER BY timestamp DESC LIMIT 1"));
-
- if ($latestlem > $latest)
- {$latest = $latestlem;}
-
- $latest = $latest[timestamp];
-
- echo "<h4>Most recent link added ";
- echo date("l, F j", $latest);
- echo " at ";
- echo date("h:i a T", $latest);
- echo "</h4>";
The first line reads the timestamp from the latest local
article, and the next line reads the timestamp from the most
recently added external link. We compare them to decide which is
more recent, then display them as a header 4 like this:
Most recent link added Monday, July 15 at 04:43 pm EDT
And now I don't have to manually post timestamps when I'm adding
new content or worry about a manually entered timestamp not
reflecting that fact that we may have added content since then.
Apple Stock Tracker
I've been looking for an automated stock tracker for years. Long
before I even thought about updating links automatically, I wanted
a real time (well, the usual 20 minute delay) stock tracker. I
never did find a simple one I could add to the site.
So Monday I spent some time searching the Web, fiddling with
some PHP samples, referencing php.net, testing and debugging,
tweaking, and finally came up with a nice simple stock tracker that
does just one thing: Report the latest trade in AAPL stock.
I found far more than I was looking for on the EvilWalrus Group
website - a
script by Mukul Sabharwal that does far more than I wanted,
right down to displaying graphs.
All I wanted was the current price and how much it had changed
during the day, so I had a lot of code stripping to do. Here's what
I ended up with:
- $fd = fopen
("http://quote.yahoo.com/d/quotes.csv?s=AAPL&f=sl1d1t1c1ohgv&e=.csv",
"r");
- $contents = fread ($fd, 200);
- fclose ($fd);
-
- $contents = str_replace ("\"", "", $contents);
- $contents = explode (",", $contents);
-
- echo "<ul><li>Apple stock tracker. Most recent
trade: <b>\$$contents[1]</b>. Change: $contents[4].
(Prices delayed up to 20 minutes.)</li>";
The first line opens the AAPL record on the quotes.yahoo.com
website and reads it. $contents = str_replace ("\"", "",
$contents); goes through the data and strips out quote marks.
The next line "explodes" commas, which means it turns every comma
into a field delimiter.
The only fields I'm interested in are 1 (the last traded price)
and 4 (how much Apple stock has moved up or down today). And the
LEM home page now displays that information - generated each time
someone visits the home page.
One less thing to update manually, and one more thing to put on
the Apple Quicklinks site when I have a chance.