Skip to content

househappy/floorplan

Folders and files

NameName
Last commit message
Last commit date

Latest commit

 

History

31 Commits
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 

Repository files navigation

Floorplan

Hex.pm Version Build Status

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!

About

Sitemap generator that supports Ecto and Elasticsearch data sources

Resources

License

Stars

Watchers

Forks

Packages

No packages published

Languages