/* * The options that are listed below may be specified in the url if the allowParameters option is * true. To do so first append a question mark ? to the end of the url. Next, specify the option * name followed by an equal sign = and then the value; for example, option=value. Multiple options * are specified by separating them with an ampersand &; for example, option1=value1&option2=value2. * Enter %26 to specify an ampersand & character in the url, %3D for an equal = sign. * * The username option is an exception and is always allowed to be specified in the url, but whether * or not it is actually used depends on other options. * * All parameters may be specified by their regular name or by a short form; the short form that can * be used is specified in parenthesis at the beginning of the parameter's description. The general * naming convention for the short name is to use the first letter of each word comprising the name. * Be aware of conflicts though, such as backgroundColor (bc) and borderColor (bdc). Whether the * full or short name is used specify the parameter name in lowercase. * * Examples * * scrobblersig.php * scrobblersig.php?fontsize=24 * scrobblersig.php?labelcolor=aa0000&trackcolor=a9b200 * scrobblersig.php?fs=24 * scrobblersig.php?lc=aa0000&tc=a9b200 */ //(u) Audioscrobbler username, see the allowAnyUser and allowWhitelistedUser options for info about //using this option in the url. $username = "Stealth2006";
/* * All of the "-label" options below can display the time the track is played by specifying time * variables: *- <date> Outputs the date according to the dateFormat option *- <time> Outputs the time according to the timeFormat option *- <zone> Outputs the timezone according to the timeZoneOffset and timeZoneLabel options. The * timeZoneLabel is output instead of the timeZoneOffset if it is present. * * Example * * "This song was played at <time> <zone> on <date>" */ //(cpl) Text to display if track is currently playing $currentlyPlayingLabel = "Currently playing:";
//(lpl) Text to display if track isn't currently playing $lastPlayedLabel = "Last song played @ <time> <zone> on <date>:";
//(el1 and el2) Text to display if the song parse failed $errorLabel1 = "Error:"; $errorLabel2 = "Unable to parse song title from audioscrobbler.com";
/* * Time formats, see http://www.php.net/date for details about the dateFormat and timeFormat */ //(df) Format used to replace the <date> pattern $dateFormat = "D, M j, Y";
//(tf) Format used to replace the <time> pattern $timeFormat = "g:i A";
//(tzo) Time between your time zone and GMT in [-]hour[:minute] format; that is the beginning minus //sign is optional and so are the minutes, if minutes are included separate from hours with a colon. //This is also used to replace the <zone> pattern if the timeZoneLabel option isn't specified. $timeZoneOffset = "-5";
//(tzl) Replaces the <zone> pattern $timeZoneLabel = "EST";
/* * Formatting options. The various "-color" options specify colors using the RRGGBB format, where * RR represents the hexadecimal numerical amount of red, GG the amount of green, and BB the amount * of blue; for example FF0000 is red, A9B200 is a dull golden color. */ //(f) The filename of the truetype font to use. Native PHP font searching rules are used: // - If the .ttf extension is not specified it is appended. // - Most systems will search in the same directory as the script for the font and if it can't be // found search system font directories, this allows you to use any font on the system as well as // custom fonts. $font = "Vera.ttf";
//(fs) The size of the font in points $fontSize = 10;
//(fc) The foreground color; the labelColor and trackColor parameters override this if set. $foregroundColor = "000000";
//(lc) The color of the track label, the first line of text $labelColor = null;
//(tc) The color of the track text, the second line of text $trackColor = null;
//(a) Whether antialiasing should be applied to the text; specify 1 for true and 0 for false in the //url. If set to true you should set the backgroundColor to match the background of the page the //image will appear on for best results. $antialias = false;
//(ha) Horizontal alignment of the text, can be "left" or "right" $horizontalAlign = "left";
//(b) Whether or not a border is drawn around the image; specify 1 for true and 0 for false in the //url. $border = false;
//(bdc) The color of the image border, see the border option $borderColor = "000000";
//(p) The padding to appear on the sides of the image; the horizontalPadding and verticalPadding //parameters override this if set. $padding = 0;
//(hp) The padding to appear on the left and right side of the image $horizontalPadding = null;
//(vp) The padding to appear on the top and bottom of the image $verticalPadding = null;
//(bc) The background color $backgroundColor = "000000";
//(bi) Background image to use; may be GIF, PNG, or JPEG format $backgroundImage = "stealth.png";
//(bt) Whether the backgroundColor appears; specify 1 for true and 0 for false in the url. $backgroundTransparent = true;
//(it) The image format, may be "png" or "jpg" $imageType = "png";
//(mw) The maximum width of the image, 0 means unrestricted; ignored if a backgroundImage is used. $maxWidth = 0;
//(mh) The maximum height of the image, 0 means unrestricted; ignored if a backgroundImage is used. $maxHeight = 0;
/* * The following options may NOT be specified in the url */ //Whether or not parameters specified in the url are used; setting this to false will result in //fewer variations of images being cached on the server. $allowParameters = true;
//Whether or not any username can be specified for the username option in the url; this takes //precedence over the allowWhitelistedUser option. $allowAnyUser = false;
//Whether or not whitelisted users can be specified for the username option in the url, see the //whitelistedUserFilename option. $allowWhitelistedUser = true;
//The filename of a list of usernames, one on each line, that are allowed to be specified for the //username option; also see the allowWhitelistedUser option. $whitelistedUserFilename = "scrobblersig-whitelist.txt";
//Whether or not the browser's cache should be used to help minimize bandwidth usage $useBrowserCache = true;
//Number of seconds information is cached from Audioscrobbler $cacheDuration = 160;
//Number of seconds to wait for a response from the Audioscrobbler server $timeout = 10;
/* ---------- Main code, do not edit past this point ---------- */
/* Check to see if the song info needs updating */ $safeUsername = escapeshellcmd($username); $dataFilename = "./sig-$safeUsername.txt"; if(!file_exists($dataFilename) || (filemtime($dataFilename) + $cacheDuration < time())) { //Delete cached images $tempFiles = array_merge(glob("./sig-$safeUsername*.png"), glob("./sig-$safeUsername*.jpg")); if($tempFiles != null) { foreach($tempFiles as $filename) @unlink($filename); }
//Get user track data from Audioscrobbler $data = ""; $fp = @fopen("http://ws.audioscrobbler.com/txt/recent/$username", "r"); if($fp != null) { stream_set_timeout($fp, $timeout); $data = fread($fp, 100000); fclose($fp); }
if(trim($data) != "") { $dataFile = @fopen($dataFilename, "wt"); if($dataFile != null) { @fwrite($dataFile, $data); @fclose($dataFile); } } elseif(file_exists($dataFilename)) { //Remove currently playing track info and preserve cached Audioscrobbler data if($data = @file($dataFilename)) { $data[0] = "\n"; if($dataFile = @fopen($dataFilename, "wt")) { @fwrite($dataFile, implode("", $data)); @fclose($dataFile); } } } }
/* Determine if client cache should be used */ if($useBrowserCache && isset($_SERVER["HTTP_IF_MODIFIED_SINCE"]) && file_exists($dataFilename) && strtotime($_SERVER["HTTP_IF_MODIFIED_SINCE"]) == filemtime($dataFilename) ) { header("Status: 304 Not Modified", true, 304); //HTTP status set this way to work on IIS exit; }
/* Create image if no cached version of it exists */ $imageFilename = "./sig-$safeUsername" . ($allowParameters && $_SERVER["QUERY_STRING"] ? "-" . md5($_SERVER["QUERY_STRING"]) : "") . ".$imageType"; $image = null; if(!file_exists($imageFilename)) { $trackData = @file($dataFilename); if($trackData != null) { $trackData[0] = trim($trackData[0]);
//Check if a track is currently playing if($trackData[0] != "") { $track = $trackData[0]; $label = $currentlyPlayingLabel; $date = time(); } else { $track = $trackData[1]; $label = $lastPlayedLabel; $date = strtotime($trackData[2]); }
if(file_exists($dataFilename)) { header("Last-Modified: " . gmdate("D, d M Y H:i:s", filemtime($dataFilename)) . " GMT"); header("Expires: " . gmdate("D, d M Y H:i:s", filemtime($dataFilename) + $cacheDuration) . " GMT"); }
Help me!?!?!