Floorplan

Hex.pm Version

Floorplan is a library for generating sitemaps. It takes a index name and a stream of URLs to produce your site's sitemap.

It currently has built-in adapters for ecto or elasticsearch data sources. See Examples for usage.

Installation

If available in Hex, the package can be installed as:

  1. Add floorplan to your list of dependencies in mix.exs:

    def deps do [{:floorplan, "~> 0.1.1"}] end

  2. Ensure floorplan is started before your application:

    def application do [applications: [:floorplan]] end

  3. Define base_url within your applications config:

    within config.ex

    config :floorplan, base_url: "https://www.househappy.org"

3b. Additional optional configuration:

## within config.ex
config :floorplan, queue_size: 25_000
config :floorplan, :elasticsearch, host: "http://localhost:9200"

Usage

Example 1: From iex

iex(1)> urls = [%Floorplan.Url{location: "/foo.html", change_freq: "weekly", priority: "0.9"}] [%Floorplan.Url{change_freq: "weekly", last_mod: "2016-02-08T21:21:01.609Z", location: "/foo.html", priority: "0.9"}] iex(2)> context = %Floorplan.Context{urls: urls, base_url: "http://example.com", target_directory: "tmp/sitemaps"} %Floorplan.Context{base_url: "http://example.com", sitemap_files: [], target_directory: "tmp/sitemaps", urls: [%Floorplan.Url{change_freq: "weekly", last_mod: "2016-02-08T21:21:01.609Z", location: "/foo.html", priority: "0.9"}], urls_per_file: 50000} iex(3)> Floorplan.generate(context)

13:30:50.117 [info] Generating sitemap in destination: 'tmp/sitemaps'

13:30:50.118 [info] Reading from datasources...

13:30:50.118 [info] Writing file tmp/sitemaps/sitemap1.xml.gz

13:30:50.119 [info] ✓ sitemap1.xml.gz -- 1 urls

13:30:50.119 [info] Generating sitemap index file

13:30:50.120 [info] ✓ sitemap.xml.gz -- 1 sitemap files {:ok, %Floorplan.Context{base_url: "http://example.com", sitemap_files: [%Floorplan.SitemapFilesBuilder.SitemapFile{index: 0, path: "tmp/sitemaps/sitemap1.xml.gz", url_count: 1}], target_directory: "tmp/sitemaps", urls: [%Floorplan.Url{change_freq: "weekly", last_mod: "2016-02-08T21:21:01.609Z", location: "/foo.html", priority: "0.9"}], urls_per_file: 50000}}

Example 2: Integrated with application

defmodule MySitemapGenerator do
def generate do
context = %Floorplan.Context{
urls: urls,
base_url: "http://example.com",
target_directory: "tmp/sitemaps"
}
Floorplan.generate(context)
end
def urls do
[
CoreLinks.all,
ContentLinks.all
] |> Stream.concat
end
end
iex> MySitemapGenerator.generate

See Examples for more usage.

Contributions

Code is licensed under BSD License.

PRs/Issues welcome!