Microsoft Small Basic

Program Listing: NLM548
' Flickr Photo ID Sample
' Copyright © 2017 Nonki Takahashi. The MIT License.
'
' Reference:
' [1] https://www.flickr.com/services/api/misc.urls.html
' [2] https://www.bram.us/2008/01/12/my-priceless-flickr-tip-how-to-find-the-original-flickr-photo-url-and-user-from-a-static-flickr-image-url/

url = Flickr.GetPictureOfMoment()
TextWindow.WriteLine(url)
Url2Id()
Base58Encode()
url = "http://flic.kr/p/" + encoded
TextWindow.WriteLine(url)
Base58Decode()
url = "http://flickr.com/photo.gne?id=" + id
TextWindow.WriteLine(url)

Sub Url2Id
' param url
' return id - photo id
p = Text.GetIndexOf(url, "_") - 1
id = ""
c = Text.GetSubText(url, p, 1)
While c <> "/"
id = Text.Append(c, id)
p = p - 1
c = Text.GetSubText(url, p, 1)
EndWhile
EndSub

Sub Base58Encode
' param id - photo id
' return encoded - base58 photo id
alphabet = "123456789abcdefghijkmnopqrstuvwxyzABCDEFGHJKLMNPQRSTUVWXYZ"
base = Text.GetLength(alphabet)
encoded = ""
While 0 < id
mod = Math.Remainder(id, base)
encoded = Text.Append(Text.GetSubText(alphabet, mod + 1, 1), encoded)
id = Math.Floor(id / base)
EndWhile
EndSub

Sub Base58Decode
' param encoded - base58 photo id
' return id - photo id
alphabet = "123456789abcdefghijkmnopqrstuvwxyzABCDEFGHJKLMNPQRSTUVWXYZ"
base = Text.GetLength(alphabet)
len = Text.GetLength(encoded)
id = 0
place = 1
For p = len To 1 Step -1
id = id + place * (Text.GetIndexOf(alphabet,Text.GetSubText(encoded, p, 1)) - 1)
place = place * base
EndFor
EndSub