In GetTopNRankings method, results are returned in descending order and it means the first score in the list will consider as the first rank. So basically the index of the array list is equal to the rank of a user. For your second concern, yes you are right only, GetUserRanking API will give you rank value in response.
Let me know if above information helps in your concern or you need any other help from our side.
P.S: The issue which mentioned and solved by changing the source code on this (http://forum.shephertz.com/?qa=3000/ranking-is-missing) thread was different. If you can go through Rajeev comment then you can see only GetUserRabking method returns the rank of the users.
Note: GetTopNRanking returns the response based on score saved inside App42 database in descending order. It will not provide unique users list in the array. For example: If A scored 500,400 and B scored 450 in the game, then above function will return three entries in descending order like 500,450 & 400. If you want only one entry(top score) of a user in leaderboard then please use GetTopNRankers method from leaderboard service.