The script below requires a SQL database called customURL.sqlite
placed in the same directory as registerURL.php
which has the following structure:
BEGIN TRANSACTION; CREATE TABLE "urls" ( "URL" text NOT NULL, PRIMARY KEY("URL") ); COMMIT;
<?php ////////////////////////////////////////////////////////// // WaS (c) grimore.org - 2012, License: GPLv3 // // Please see: http://www.gnu.org/licenses/gpl.html // // for legal details, rights of fair usage and // // the disclaimer and warranty conditions. // ////////////////////////////////////////////////////////// // For privacy, you need to generate a password. You can do that // by issuing the following command on an *nix-like system and // replace "super-duper secret password" with a secret shared between // this PHP script and the LSL counterpart: // sh$ echo "super-duper secret password" | sha1sum | awk '{ print $1 }' $apiKey = 'A1364788-B702-4413-B937-7A57E32B43CE'; if(!isset($_GET['apiKey']) || $_GET['apiKey'] != $apiKey) { throw new Exception('Invalid API key.'); return; } if(!isset($_GET['action'])) { throw new Exception('No action specified.'); return; } switch($_GET['action']) { case "register": if(!isset($_GET['llURL']) && !isset($_GET['shortURL'])) return; $llURL = $_GET['llURL']; $shortURL = $_GET['shortURL']; $db = new PDO('sqlite:customURL.sqlite'); $db->setAttribute(PDO::ATTR_ERRMODE, PDO::ERRMODE_EXCEPTION); $q = $db->prepare("REPLACE INTO url_table(llURL, shortURL) VALUES(:llURL, :shortURL)"); try { $q->execute(array(':llURL' => $llURL, ':shortURL' => $shortURL)); } catch(PDOException $e) { die($e->getMessage()); } print $shortURL; break; case "retrieve": if(!isset($_GET['shortURL'])) return; $shortURL = $_GET['shortURL']; $db = new PDO('sqlite:customURL.sqlite'); $db->setAttribute(PDO::ATTR_ERRMODE, PDO::ERRMODE_EXCEPTION); $q = $db->prepare("SELECT llURL FROM url_table WHERE shortURL=:shortURL LIMIT 1"); try { $q->execute(array(':shortURL' => $shortURL)); $res = $q->fetch(PDO::FETCH_OBJ); } catch(PDOException $e) { die($e->getMessage()); } print $res->llURL; break; default: break; } ?>