Din egen lenkeforkorter

korturl

Det er fryktelig mange artikler å lese der ute, og noen vil man gjerne dele med andre. Vi har tjenester som Facebook og Twitter for akkurat det formålet. Men de har en svakhet. De tillater ikke ubegrenset lengde på tekst.

Ta følgende lenke:

http://www.amazon.com/gp/product/0672326957/qid=1141919181/sr=1-5/ref=sr_1_5/002-1167650-7759235?s=books&v=glance&n=283155

Den består av hele 123 tegn. Twitter tillater maksimalt 140. Vanskelig å skrive beskrivelse om lenken på resterende 17 tegn. Da forkorter man lenken. Hvordan?

Det fins mange tjenester der ute som gjør dette, http://tinyurl.com/ er bare én av dem.

Resultatet blir da http://tinyurl.com/dkt83o som bare er 26 tegn. Suksess!

tinyurl sin måte å gjøre det på
tinyurl sin måte å gjøre det på

Men jeg ville ha min egen! Så jeg bruker phpapache.

Rekkefølgen her spiller ikke så stor rolle, men la oss begynne med en tom mappe hvor man har tjenesten sin, eksempelvis /lnk/ som jeg bruker.

Steg #1

Opprett en .htaccess-fil i katalogen, og sett følgende i den:

RewriteEngine On
RewriteRule . index.php

Steg #2

Flott, nå blir alt som kommer etter /lnk/ sendt rett til index.php. Opprett index.php i /lnk/-mappa.

Vi trenger en funksjon som lager tilfeldige tegn. Det er fort gjort. Her er en super-enkel passordgenerator, og vi setter grense på 3 tegn.

  1. function Random_Password( $length ) {
  2. $possible_characters = «abcdefghijkmnopqrstuvwxyz234567890»;
  3. $string = «»;
  4. while( strlen( $string ) < $length ) {
  5. $string .= substr( $possible_characters, rand() % ( strlen( $possible_characters ) ), 1 );
  6. }
  7. return( $string );
  8. }

Steg #3

Nå trenger vi bare en funksjon for å lage lenken. Jeg har valgt min lille metode for dette, og legge til i database.

  1. $url = $_SERVER[‘REDIRECT_URL’];
  2. $uri = $_SERVER[‘REQUEST_URI’];
  3. # create.php finnes ikke fysisk, bare et pseudonavn
  4. if( $url == «/lnk/create.php» ) {
  5. $linkurl = $_GET[‘linkurl’];

  6. # Setter en grense på 3 tegn
  7. $shortcut = Random_Password( 3 );

  8. # Sjekker om snarveien er brukt, og lag ny kode dersom opptatt
  9. # Sjekk at katalogen «store» finnes, eller lag din egen
  10. while( file_exists( «store/$shortcut« ) ){
  11. $shortcut = Random_Password( 3 );
  12. }

  13. # Skriver adressen til fila
  14. file_put_contents( «store/$shortcut«,$linkurl );

  15. # Hasher url til bruk i database
  16. $hash = md5( $linkurl );

  17. # Koble til databasen
  18. $conn = mysql_connect( ‘localhost’, ‘brukernavn’, ‘passord’ );
  19. mysql_select_db( ‘databasenavn’, $conn );
  20. $url = mysql_real_escape_string( $linkurl );

  21. # Setter inn i database, denne må opprettes på forhånd
  22. mysql_query( «INSERT INTO forkortet( hash, address, added ) VALUES( ‘$hash‘, ‘$url‘, NOW() )» );
  23. mysql_close( $conn );

  24. # Vis den nye lenken
  25. print( «http://dittdomene.noe/lnk/$shortcut« );
  26. }

Sånn, da er funksjonaliteten i bunn. Men ikke veldig brukervennlig, akkurat.

Steg #4

Da legger vi til et forenklet grensesnitt som kommer dersom vi går direkte til /lnk/.

  1. # Legger til grafisk grensesnitt for å lage kort lenke
  2. } elseif( $uri == «/lnk/» ) {
  3. echo «<h1>Oh hai!</h1>
  4. <form method=get action=create.php>
  5. <label>URL: <input type=text name=linkurl size=50>
  6. <input type=submit value=Go!>
  7. </form><br/>&nbsp;</br>
  8. Legg til bookmarklet: <a href=javascript:\$base = ‘http://dittdomene.noe/lnk/create.php?linkurl=’;\$encoded = escape(location.href);location.href = \$base + \$encoded;>Forkort</a>
  9. <span style=color: grey;>(Dra opp til quickbar)
  10. «;
  11. }

Da kan vi lage og lagre lange lenker, til og med med en bookmarklet 🙂

Men dette er ikke så nyttig i seg selv. Vi vil jo faktisk bruke det!

Steg #5

  1. # Gjøre nytte av det hele
  2. } else {
  3. # Hent den korte adressen vi vil ha tak i
  4. $exploded = explode( «/»,$url );
  5. $key = $exploded[2];
  6. # Sjekke om denne korte adressen faktisk eksisterer
  7. if( file_exists( «store/$key« ) ) {
  8. # Hente adressen i fila
  9. $destination = trim( file_get_contents( «store/$key« ) );
  10. # Lage hash om man vil oppdatere databasen
  11. $thehash = md5( $destination );
  12. # Koble til databasen
  13. $conn = mysql_connect( ‘localhost’, ‘brukernavn’, ‘passord’ );
  14. mysql_select_db( ‘databasenavn’, $conn );
  15. # Oppdatere databasen med et klikk
  16. mysql_query( «UPDATE shortlinks SET clicks=clicks+1 WHERE hash=’$thehash‘» );
  17. mysql_close( $conn );
  18. # Og sende avgårde til korrekt url
  19. header( «Location: $destination« );
  20. # Hvis den korte adressen ikke finnes, si fra om det.
  21. } else {
  22. print( «<h1>Feil!</h1>Ingen treff, gitt!<br/><a href=’http://dittdomene.no’>Dittdomene.no</a>» );
  23. }
  24. }

That’s it! Bare erstatte dittdomene.no og login-detaljer med ditt eget, så har du en tjeneste som fungerer flott. Du trenger ikke database for noe av dette, men greit om du vil ha en oversikt over det i etterkant.

Jeg, meg selv, og jeg igjen

Me, myself and I
Litt fokus på meg selv

Med 300 poster gjennomført er det på tide med litt ekstra egosentrisk post. Bilde(ne) over tok jeg i dag for å eksperimentere litt, og det ble igrunnen helt greit. Burde kanskje ha ryddet noe først. Men; det hadde jo vært juks!

5 tilfeldige ting om meg selv:

  • Jeg har dykkerlappen og førerkort klasse C.
  • Jeg er naturlig flink til ting, men blir aldri ekspert i noe.
  • Jeg er et lett offer for rutiner.
  • Jeg dagdrømmer oftere enn J.D. i Scrubs.
  • Jeg er sikker på å at jeg blir evig singel.

Ikke akkurat banebrytende hemmeligheter. Dette var vanskeligere enn jeg hadde trodd.

Slik jeg ser det:

  • Jeg kunne aldri tenkt meg lastebiljobb som yrke, og ingen vil dykke med meg. Sløsing.
  • Jeg orker ikke invitere meg selv til noe, ergo møter jeg ikke nye mennesker.
  • Jeg tør ikke ta kontakt med jenter jeg finner tiltrekkende, ergo forblir jeg evig singel.
  • Jeg er dritlei av å ha kronisk hodepine, ergo har jeg ikke overskudd til å bryte grensene mine.
  • Jeg ser på alt som tiltak, ergo dagdrømmer jeg for å leve livet.

De jentene jeg har vært i kontakt med har jeg fått tid til å «myke opp» litt med ved å bli kjent, men det har tydeligvis ikke ordnet seg.

Jeg setter stor pris på vennskap, men har fryktelig vanskelig for å være åpen. Og igjen, å ta kontakt med mine venner ser jeg som tiltak.

…alt er tiltak.

Presenterer: 1951 in New Zealand

SerendipityCat hadde en litt vittig post hvor man blir oppfordret til å lage et nytt band basert på tilfeldige innlegg. Til slutt lager man et albumcover basert på dette.

Dette ble mitt band.

1951 In New Zealand - more than half the time
1951 In New Zealand - more than half the time

Nå forstår jeg hvordan mange ender opp med å lage cover til sine album. Det er nemlig ikke alltid lett å se sammenheng mellom band, sanger og bildet.

Men jeg syns dette albumnavnet passet ganske bra med bildet. Band-navnet kan vel diskuteres, men antar at det er litt old-school melodier.

Prøv selv:

  1. Tittelen på den første tilfeldige wikipedia-artikkelen du får, er navnet på bandet ditt. http://en.wikipedia.org/wiki/Special:Random
  2. De siste fire eller fem ordene i det aller siste sitatet på “Random quotations” er tittelen på bandets første album.
    http://www.quotationspage.com/random.php3
  3. Det tredje bildet på flickr’s “explore last seven days” er albumcoveret deres, uansett hva det forestiller.
    http://www.flickr.com/explore/interesting/7days
  4. Bruk Photoshop eller lignende for å sette det sammen.

* Bildet er copyright av Roland Perez og brukt uten tillatelse.