This file takes a set of tags and redirects to the newest del.icio.us entry with all of them. On error, it just redirects to http://del.icio.us/user-name. It needs the tags cache file written by backup-delicio.us.pl: gzipped raw source code is here.
Sun Aug 13 12:17:29 CEST 2006: updated to fix a bug where redirection didn’t happen if one of the tags didn’t exist.
<?php /* -*- mode: php; coding: utf-8 -*- */
/* Take a list of tags, redirect to the newest del.icio.us entry with all of
them, reading the tag details from a .dbm file that's written by a daily
backup script. If no entry is found, redirect to del.icio.us/user/query
for the error handling.
Aidan Kehoe, Thu Aug 10 12:35:15 CEST 2006. Public Domain. */
define('TAG_DB_FILE_NAME', 'YOU NEED TO SET THIS');
define('DELICIOUS_USER_NAME', 'YOU NEED TO SET THIS TOO');
function main()
{
$query = '';
if (isset($_GET['query'])) {
$query = $_GET['query'];
}
if ('' == $query) {
$query = $_SERVER['PATH_INFO'];
if (preg_match(',^/(.*)$,', $query, $matches)) {
$query = $matches[1];
}
}
if ('' == $query) {
/* Let del.icio.us handle the empty query. */
header('Location: http://del.icio.us/'.DELICIOUS_USER_NAME);
exit;
}
/* Only transform ASCII characters for case: */
$query = strtr($query,
ABCDEFGHIJKLMNOPQRSTUVWXYZ",
abcdefghijklmnopqrstuvwxyz");
$dbm_handle = dba_open(TAG_DB_FILE_NAME, 'r', 'db4');
assert($dbm_handle);
$tag_url_ordered_array = array();
$tag_list = preg_split('/[+ ]{1,1}/', $query, -1,
PREG_SPLIT_NO_EMPTY);
$tag_url_lookup_hash = array();
foreach ($tag_list as $tag) {
if ('' == $tag) {
continue;
}
$val = dba_fetch($tag, $dbm_handle);
$tag_url_ordered_array[$tag] = explode("\0", $val);
$tag_url_lookup_hash[$tag] = explode("\0", $val);
array_unshift($tag_url_lookup_hash[$tag], "");
unset($tag_url_lookup_hash[$tag][0]);
$tag_url_lookup_hash[$tag]
= array_flip($tag_url_lookup_hash[$tag]);
}
foreach ($tag_url_ordered_array[array_shift($tag_list)] as $url) {
$found = false;
foreach ($tag_list as $tag) {
$found = isset($tag_url_lookup_hash[$tag][$url]);
}
if ($found || (0 == count($tag_list) && '' != $url)) {
header('Location: ' . $url);
exit;
}
}
/* Let del.icio.us do the error handling. */
header('Location: http://del.icio.us/'.DELICIOUS_USER_NAME.
'/'.$query);
exit;
}
main();
?>