Pumba helps you
- To fetch user agent strings for different browsers,
- Keep in-memory state,
- Randomly fetch any user agent,
- Profit - Hakuna Matata 🦄
You might want to use Pumba
- To simulate real user agent when requesting website or resource,
- To use in tandem with crawlers to randomly swap user agent strings,
- Build REST API or any API on top of it or expose as a service,
- Many other use cases I'm not aware (open issue to share one).
If available in Hex, the package can be installed
by adding pumba
to your list of dependencies in mix.exs
and if needed please add to
application list to start:
def deps do
[
{:pumba, "~> 0.0.2"}
]
end
To load user agent strings for a given browser you need to call
iex> Pumba.load("Firefox")
:ok
To load user agent strings for a given browser you need to call
iex> Pumba.random()
Mozilla/5.0 (X11; Linux ppc64le; rv:75.0) Gecko/20100101 Firefox/75.0
iex> Pumba.ready?("Firefox")
true
iex> Pumba.get("Firefox")
[
"Mozilla/5.0 (X11; Linux ppc64le; rv:75.0) Gecko/20100101 Firefox/75.0",
...
]
Default client fetches user agents from http://www.useragentstring.com.
There are two ways to set custom client first is via config second is overriding manually
Configuration
config :pumba,
client: MyAwesomeClient
Runtime
iex> Pumba.set_client(MyAwesomeClient)
If you want to have your own client then it should implement Pumba.Client
behaviour.
Storage is a GenServer which has the following state and lives at Pumba.UserAgents
%{
client: Pumba.Client.DefaultClient,
browsers: %{},
names: []
}
Where browsers
is a map with key as browser name and the list user agents
as it's value, names
is a list of loaded browsers using which we later can
randomly pick browser and return a random user agent.
browsers
contains %Pumba.Result{}
record which keeps total count of user
agents and indexed map with user agent strings for fast lookups.
To get the latest state you can use Pumba.all/0
function.
Documentation can be generated with ExDoc and published on HexDocs. Once published, the docs can be found at https://hexdocs.pm/pumba.