Although it is useless as an authorization scheme, msg.sender does work in a view function. Hence, the lookup tool you use should have a mechanism to set the sender configuration.
Setting the Sender
It depends on what tool you are using to invoke. That tool might be any from the following: web3.js, web3.py, Mist, MyEtherWallet, MyCrypto, etc. They may or may not have a mechanism to set the sender in a call.
Contract Workarounds
It is not possible to help a user to set the sender from inside the contract. What you can do is supply a different method that takes an address as an argument. Then tools like MyEtherWallet will allow you to set the address of interest. For instance,
function getLink(address account) public view returns(string){
if(tokenBalances[account] > 0){
return link;
}else{
return "You need to purchase a token at first...";
}
}