/travianmap

Primary LanguageErlangApache License 2.0Apache-2.0

TravianMap

A simple library to deal with the bad Travian "API". It is a best effort tool so when it faces against an inconsistency of the Travian API, TravianMap discards it and continue. TranvianMap get the urls from the Travian GameWorld Schedule blog page and get the map information appending /map.sql to the server urls.

It uses inets for fetching the data and thoas to handle the json format.

You can find the info of the snapshot here.

At TheRedNatar we develop TravianMap for fetching and parsing the map.sql that Travian offers.

Installation

Erlang

% rebar.config
{deps, [travianmap]}

Elixir

# mix.exs
def deps do
  [{:travianmap, "~> 0.6.0"}]
end

Basic Usage

1> travianmap:get_urls().
{ok,[<<"https://ts5.x1.america.travian.com">>,
     <<"https://ts4.x1.america.travian.com">>,
     <<"https://ts15.x1.america.travian.com">>,
     <<"https://ts8.x1.america.travian.com">>,
     <<"https://ts25.x2.america.travian.com">>,
     <<"https://ts7.x1.america.travian.com">>,
     <<"https://ts2.x1.america.travian.com">>,
     <<"https://ts50.x5.america.travian.com">>,
     <<"https://ts6.x1.america.travian.com">>,
     <<"https://ts15.x1.arabics.travian.com">>]}

2> Url = <<"https://ts50.x5.america.travian.com">>.

3> travianmap:get_info(Url).
{ok,#{<<"18c">> => false,<<"adventuresDecay">> => false,
      <<"allianceBanner">> => true,<<"allianceBonus">> => true,
      <<"allianceShowIncomingAttacks">> => false,
      <<"boostedStart">> => false,<<"bottom">> => -200,
      <<"cities">> => false,<<"contextHelp">> => true,
      <<"country">> => <<"com">>,<<"factions">> => false,
      <<"height">> => 401,<<"hideFoolsArtifacts">> => false,
      <<"left">> => -200,<<"lockingRegionsAgain">> => true,
      <<"multi_language">> => true,<<"progressiveTasks">> => true,
      <<"rearrangeBuildings">> => true,
      <<"resourcesInHeroBag">> => true,<<"right">> => 200,
      <<"sittingOnlyFriends">> => true,<<"speed">> => 5,
      <<"territory">> => false,<<"title">> => <<"America 50">>,
      <<"top">> => 200,<<"travelOverTheWorldEdge">> => true,
      <<"tribesEgyptiansAndHuns">> => false,...}}

4> {ok, ServerMap} = travianmap:get_map(Url)
5> {ok, Villages} = travianmap:parse_map(ServerMap, no_filter).
[{ok,{318,117,200,1,24785,<<"Tánatos"/utf8>>,2916, <<"Gluk">>,0,<<>>,580}},
 {ok,{388,187,200,1,24830,<<"Fornost">>,328,<<"Boromir">>,34, <<"L1389">>,542}},
 {ok,{389,188,200,1,24416,<<"Eldalondë"/utf8>>,328, <<"Boromir">>,34,<<"L1389">>,711}},
 {ok,{390,189,200,1,26671,<<"Aldea nueva">>,328, <<"Boromir">>,34,<<"L1389">>,98}},
 {error, unable_to_parse},
 {ok,{391,190,200,1,21867,<<"Edhellond">>,328,<<"Boromir">>, 34,<<"L1389">>,844}},
 {ok,{392,191,200,1,19940,<<"Abismo de Helm">>,328, <<"Boromir">>,34,<<"L1389">>,1009}},
 {ok,{717,115,199,1,25112,<<"Hipnos">>,2916,<<"Gluk">>,0, <<>>,472}}| ...]

6> {ok, Villages} = travianmap:parse_map(ServerMap, filter).
[{318,117,200,1,24785,<<"Tánatos"/utf8>>,2916, <<"Gluk">>,0,<<>>,580},
 {388,187,200,1,24830,<<"Fornost">>,328,<<"Boromir">>,34, <<"L1389">>,542},
 {389,188,200,1,24416,<<"Eldalondë"/utf8>>,328, <<"Boromir">>,34,<<"L1389">>,711},
 {390,189,200,1,26671,<<"Aldea nueva">>,328, <<"Boromir">>,34,<<"L1389">>,98},
 {391,190,200,1,21867,<<"Edhellond">>,328,<<"Boromir">>, 34,<<"L1389">>,844},
 {392,191,200,1,19940,<<"Abismo de Helm">>,328, <<"Boromir">>,34,<<"L1389">>,1009},
 {717,115,199,1,25112,<<"Hipnos">>,2916,<<"Gluk">>,0, <<>>,472}| ...]