Flickrの短縮URLを生成する方法(Base 58によるエンコード)
Flickr上の画像の短縮URLは、以下の形式となっており、{base58-photo-id}の部分には画像のphoto_idをBase 58でエンコードした値を設定します。
http://flic.kr/p/{base58-photo-id}
このFlickrのphoto_idをBase 58でエンコードする処理をObjective-Cとjavascriptで実装してみました。
以下がそれぞれの言語での実装です。
Objective-C
- (NSString *)base58EncodedStringFrom:(long long)photoId { NSMutableString *encodedStr = [NSMutableString string]; long long number; if(photoId) { number = photoId; } else { return nil; } // Base62の[0-9a-zA-Z]から" 0, O, I, l"を除いた58文字にphoto_idを変換する NSString *base58Characters = @"123456789abcdefghijkmnopqrstuvwxyzABCDEFGHJKLMNPQRSTUVWXYZ"; NSUInteger baseCount = [base58Characters length]; while(number > 0) { long long mod = number % baseCount; unichar ch = [base58Characters characterAtIndex:mod]; NSString *str = [NSString stringWithCharacters:&ch length:1]; [encodedStr insertString:str atIndex:0]; number = number / baseCount; } return encodedStr; }
javascript
function base58EncodedStringFromPhotoId(photo_id) { var num = photo_id; var base58Characters = '123456789abcdefghijkmnopqrstuvwxyzABCDEFGHJKLMNPQRSTUVWXYZ'; var baseCount = base58Characters.length; var encodedStr = ""; while(num>0) { var mod = num % baseCount; encodedStr = base58Characters.charAt(mod) + encodedStr; var div = num / baseCount; num = Math.floor(div); } return encodedStr; }