You aren't signed in     Sign In    Help

Flickr API / Discuss

Current Discussion

OpenStreetMap
Latest: 21 hours ago
Getting started with Flickr API
Latest: 35 hours ago
Upload a picture from my computer to my account of flickr.com in Java Codes
Latest: 2 days ago
frob is both valid and invalid
Latest: 3 days ago
Is Flickr API the best way to spider over the site?
Latest: 3 days ago
Can't get photo description - using phpflickr
Latest: 3 days ago
How to generate a string to sign a method
Latest: 3 days ago
Help to identify artist
Latest: 4 days ago
How to get the width of Flickr image?
Latest: 5 days ago
Deep Dive
Latest: 5 days ago
Keeping my APIKEY private
Latest: 6 days ago
JSON output is invalid.
Latest: 6 days ago
More...

manufacturing flic.kr style photo URLs

view profile

kellan is a group administrator kellan  Pro User  says:

Super quick note, hopefully sufficient info.

The format for the short photo URLs is

flic.kr/p/{short-photo-id}

A short photo id is a base58 conversion of the photo id. Base58 is like base62 [0-9a-zA-Z] with some characters removed to make it less confusing when printed. (namely 0, O, I, and l).

So that leaves an alphabet of: 123456789abcdefghijkmnopqrstuvwxyzABCDEFGHJKLMNPQRSTUVWXYZ

I'm including below a variation of the code we use to do base conversion. Note it doesn't use modulus because PHP's modulus operator overflows for large numbers (like photo ids)


function base_encode($num, $alphabet) {
$base_count = strlen($alphabet);
$encoded = '';
while ($num >= $base_count) {
$div = $num/$base_count;
$mod = ($num-($base_count*intval($div)));
$encoded = $alphabet[$mod] . $encoded;
$num = intval($div);
}

if ($num) $encoded = $alphabet[$num] . $encoded;

return $encoded;
}

function base_decode($num, $alphabet) {
$decoded = 0;
$multi = 1;
while (strlen($num) > 0) {
$digit = $num[strlen($num)-1];
$decoded += $multi * strpos($alphabet, $digit);
$multi = $multi * strlen($alphabet);
$num = substr($num, 0, -1);
}

return $decoded;
}

Originally posted at 9:42AM, 13 April 2009 PST ( permalink )
kellan edited this topic 9 months ago.

view photostream

blech​  Pro User  says:

Thank you. I was trying to reverse engineer the base58 string, and getting close, but no cigar. (If the photo ID space wasn't quite so sparsely populated where I was sampling it, I might have managed, too.)
Posted 9 months ago. ( permalink )

view photostream

alto maltés says:

Cool.
Posted 9 months ago. ( permalink )

view photostream

matt  Pro User  says:

Someone jam this in a twitter client, pronto!
Posted 9 months ago. ( permalink )

view photostream

Eli the Bearded  Pro User  says:

BC math is available in PHP.

bcmod -- Get modulus of an arbitrary precision number
Posted 9 months ago. ( permalink )

view photostream

Richard Cunningham  Pro User  says:

It would be good if this was translatable to a photo url with out any requests (in the way twitpic, twitgoo, yfrog etc. do).

Just knowing the photo id doesn't get you to photo url since you need the secret, farm and server (http://www.flickr.com/services/api/misc.urls.html). We would have to do a flickr.photos.getInfo for each photo.

unless I'm missing something?
Posted 9 months ago. ( permalink )

view photostream

fraserspeirs  Pro User  says:

Here's an implementation of the encoding part in Objective-C: gist.github.com/101674
Posted 8 months ago. ( permalink )

view photostream

Jiayong Ou  Pro User  says:

And here's an implementation in Ruby:

gist.github.com/101753
Posted 8 months ago. ( permalink )

view photostream

faygate  Pro User  says:

C# example:

http://www.faygate.net/post/133462295/tinyurlcode
Posted 6 months ago. ( permalink )

view photostream

Xenocryst @ Antares Scorpii says:

An example for a bookmarklet:

javascript:void(prompt('Flic.kr short ID (base58)',(function(num){if(typeof num!=='number')num=parseInt(num);var enc='',alpha='123456789abcdefghijkmnopqrstuvwxyzABCDEFGHJKLMNPQRSTUVWXYZ';var div=num,mod;while(num>=58){div=num/58;mod=num-(58*Math.floor(div));enc=''+alpha.substr(mod,1)+enc;num=Math.floor(div);}return(div)?''+alpha.substr(div,1)+enc:enc;})(prompt('Flickr picture ID'))))


ETA: A more useful variant, giving you the respective Flic.kr-URL, if activated on a photo display page, might be:

javascript:void((function(){var m=window.location.href.match(/^https?:\/\/[^/]*\bflickr\.com\/(photos\/[^/]+\/(\d+))/i);if(m.length&&m[2])prompt('Short Flic.kr-URL for\n"'+m[1]+'":','http://flic.kr/p/'+(function(num)
{if(typeof num!=='number')num=parseInt(num);var enc='';var alpha='123456789abcdefghijkmnopqrstuvwxyzABCDEFGHJKLMNPQRSTUVWXYZ';var div=num;while(num>=58){div=num/58;var mod=(num-(58*Math.floor(div)));enc=''+alpha.substr(mod,1)+enc;num=Math.floor(div);}
return(div)?''+alpha.substr(div,1)+enc:enc;})(m[2]));})())

Originally posted 6 months ago. ( permalink )
Xenocryst @ Antares Scorpii edited this topic 6 months ago.

view photostream

stevefaeembra  Pro User  says:

quick python snippet for encoding...

num=12345678
a='123456789abcdefghijkmnopqrstuvwxyzABCDEFGHJKLMNPQRSTUVWXYZ'
bc=len(a)
enc=''
while num>=bc:
    div,mod=divmod(num,bc)
    enc = a[mod]+enc
    num = int(div)
enc = a[num]+enc
print "flic.kr/p/%s" % (enc,)
Originally posted 6 months ago. ( permalink )
stevefaeembra edited this topic 6 months ago.

view photostream

taiyofj  Pro User  says:

javascript decoder.

function base58_decode( snipcode )
{
    var alphabet = '123456789abcdefghijkmnopqrstuvwxyzABCDEFGHJKLMNPQRSTUVWXYZ' ;
    var num = snipcode.length ;
    var decoded = 0 ;
    var multi = 1 ;
    for ( var i = (num-1) ; i >= 0 ; i-- )
    {
        decoded = decoded + multi * alphabet.indexOf( snipcode[i] ) ;
        multi = multi * alphabet.length ;
    }
    return decoded;
}

I'm using above base 58 decode function on pbtweet
Originally posted 6 months ago. ( permalink )
taiyofj edited this topic 6 months ago.

view photostream

Wonderm00n  Pro User  says:

Great topic kellan!

I've just used your base_encode function on flicktotwitt.com

THANKS!
Posted 6 months ago. ( permalink )

view photostream

Tim Parenti  Pro User  says:

Thanks for the information. I've created a simple, web-based implementation at http://www.timparenti.com/dev/flickr/shortlink/

It's meant for the people who don't necessarily want or need Twitter integration, but just want to convert URLs (although I might add Twitter integration later).

It can handle conversions from a short URL to a photo ID and vice-versa. I'm planning to add full URL support so you can just paste a long URL from your browser bar and it will extract the relevant bit (the photo ID).

If anyone has any ideas to improve it, please let me know. Here's hoping someone at least finds it useful.
Originally posted 6 months ago. ( permalink )
Tim Parenti edited this topic 6 months ago.

view photostream

burntoutcar  Pro User  says:

Any reason why this can't be incorporated into the "Share This" widget at the top right of each photo page?
Posted 6 months ago. ( permalink )

view photostream

kellan is a group administrator kellan  Pro User  says:

Btw valid paths after the photo id will be passed along now.

So flic.kr/p/$photoid/sizes/l works as do flic.kr/p/$photoid/nearby and flic.kr/p/$photoid/favorites
Posted 6 months ago. ( permalink )

view photostream

Kohichi  Pro User  says:

python decoder snippet
This code based on taiyofj's javascript one,


def b58decode(s):
    alphabet = '123456789abcdefghijkmnopqrstuvwxyzABCDEFGHJKLMNPQRSTUVWXYZ'
    num = len(s)
    decoded = 0 ;
    multi = 1;
    for i in reversed(range(0, num)):
        decoded = decoded + multi * ( alphabet.index( s[i] ) )
        multi = multi * len(alphabet)
    return decoded;

Posted 5 months ago. ( permalink )

view photostream

Rex Roof  Pro User  says:

If these are really Base58, why doesn't the Math:Int2Base perl module work?
Posted 5 months ago. ( permalink )

view photostream

Rex Roof  Pro User  says:

Oooh, because you aren't using regular Base58. you're using Base62 with your own characters removed. Sorry, answered my own question.
Posted 5 months ago. ( permalink )

view photostream

robceemoz  Pro User  says:

my colleague Johnath converted this to a shorter Firefox bookmarklet using the page's contained <link rev="canonical"> tag:

javascript:var%20l=document.querySelectorAll("link");for(i=l.length-1;i>=0;--i){if(/flic\.kr/.test(l.item(i).href))prompt("Have%20a%20url!",l.item(i).href);}
Originally posted 5 months ago. ( permalink )
robceemoz edited this topic 5 months ago.

view photostream

cmort  Pro User  says:

and a simple variation of @robceemoz's post to send it straight to twitter

javascript:var%20l=document.querySelectorAll("link");for(i=l.length-1;i>=0;--i){if(/flic\.kr/.test(l.item(i).href))document.location='http://twitter.com/?status=Just%20posted:%20'+l.item(i).href;}
Posted 5 months ago. ( permalink )

view photostream

bitrot  Pro User  says:

I've just posted up a Greasemonkey script based on Xenocryst @ Antares Scorpii's bookmarklet (above):

flic.kr Short URL Link
at userscripts.org

It looks like this:

flic.kr short URL screenshot

Hope you find it useful!
Originally posted 4 months ago. ( permalink )
bitrot edited this topic 4 months ago.

view photostream

kellan is a group administrator kellan  Pro User  says:

Rex, don't know if you're still looking for a Perl module, but check out
search.cpan.org/~miyagawa/Encode-Base58-0.01/lib/Encode/B...
Posted 4 months ago. ( permalink )

view photostream

andrhamm  Pro User  says:

Will there ever be the ability to use this URL shortening for sets?
Originally posted 2 months ago. ( permalink )
andrhamm edited this topic 2 months ago.

view photostream

opello  Pro User  says:

:
I revised your initial check against m as such:


if(m&&m.length&&m[2])

So that it doesn't introduce a javascript error when used on non-flickr pages (accidental clicks). I didn't see adding further error checking as worthwhile, but someone else might.
Posted 2 months ago. ( permalink )

view photostream

Zoolcar9 says:

I wrote a Firefox extension to get flic.kr shortened URL from context menu if you right click on Flickr photo, link, or Flickr photo page. Please try it
zoolcar9.lhukie.net/extensions/flic.kr.xpi

Please report any issues or suggestions at
www.flickr.com/photos/zoolcar9/sets/72157622750210617/com...
or at Flickr Hacks group
www.flickr.com/groups/flickrhacks/discuss/72157622750913301/
 
Originally posted 5 weeks ago. ( permalink )
Zoolcar9 edited this topic 5 weeks ago.

view photostream

frog23-net says:

Here is the Java Version:
dl.dropbox.com/u/1844215/FlickrBaseEncoder.java
Posted 2 weeks ago. ( permalink )

view photostream

Richard Barnett  Pro User  says:

Any chance of m.flic.kr redirecting to an m.flickr.com page?
Posted 2 weeks ago. ( permalink )

Would you like to comment?

Sign up for a free account, or sign in (if you're already a member).

RSS 2.0 feedSubscribe to a feed of stuff on this page...</!!> Feed – Subscribe to Flickr API discussion threads
Add to My Yahoo!