Skip to content
GitLab
Explore
Sign in
Primary navigation
Search or go to…
Project
W
webtools
Manage
Activity
Members
Labels
Plan
Issues
Issue boards
Milestones
Code
Merge requests
Repository
Branches
Commits
Tags
Repository graph
Compare revisions
Deploy
Releases
Model registry
Monitor
Incidents
Service Desk
Analyze
Value stream analytics
Contributor analytics
Repository analytics
Model experiments
Help
Help
Support
GitLab documentation
Compare GitLab plans
GitLab community forum
Contribute to GitLab
Provide feedback
Keyboard shortcuts
?
Snippets
Groups
Projects
Show more breadcrumbs
ai
webtools
Commits
f74df9f4
Commit
f74df9f4
authored
8 years ago
by
ale
Browse files
Options
Downloads
Patches
Plain Diff
add command to create sitemap.xml file
parent
cb8a01e4
No related branches found
No related tags found
No related merge requests found
Changes
2
Show whitespace changes
Inline
Side-by-side
Showing
2 changed files
cmd/mksitemap/mksitemap.go
+134
-0
134 additions, 0 deletions
cmd/mksitemap/mksitemap.go
debian/rules
+1
-0
1 addition, 0 deletions
debian/rules
with
135 additions
and
0 deletions
cmd/mksitemap/mksitemap.go
0 → 100644
+
134
−
0
View file @
f74df9f4
// Create a sitemap.xml from the all_pages.json file.
//
package
main
import
(
"encoding/json"
"encoding/xml"
"flag"
"fmt"
"io"
"log"
"os"
"regexp"
"sort"
"strings"
)
var
baseURL
=
flag
.
String
(
"base-url"
,
"https://www.autistici.org"
,
"base for output URLs"
)
type
page
struct
{
URL
string
`json:"url"`
Lang
string
`json:"lang"`
Title
string
`json:"title"`
}
type
sitemapLink
struct
{
XMLName
xml
.
Name
`xml:"xhtml:link"`
Rel
string
`xml:"rel,attr"`
Lang
string
`xml:"hreflang,attr"`
URL
string
`xml:"href,attr"`
}
type
sitemapPage
struct
{
XMLName
xml
.
Name
`xml:"url"`
Loc
string
`xml:"loc"`
Links
[]
*
sitemapLink
}
type
sitemapTop
struct
{
XMLName
xml
.
Name
`xml:"urlset"`
NS
string
`xml:"xmlns,attr"`
NSxhtml
string
`xml:"xmlns:xhtml,attr"`
Pages
[]
*
sitemapPage
}
type
sitemapPageList
[]
*
sitemapPage
func
(
l
sitemapPageList
)
Len
()
int
{
return
len
(
l
)
}
func
(
l
sitemapPageList
)
Swap
(
i
,
j
int
)
{
l
[
i
],
l
[
j
]
=
l
[
j
],
l
[
i
]
}
func
(
l
sitemapPageList
)
Less
(
i
,
j
int
)
bool
{
return
strings
.
Compare
(
l
[
i
]
.
Loc
,
l
[
j
]
.
Loc
)
<
0
}
func
readAllPages
(
r
io
.
Reader
)
([]
*
page
,
error
)
{
var
m
map
[
string
]
*
page
if
err
:=
json
.
NewDecoder
(
r
)
.
Decode
(
&
m
);
err
!=
nil
{
return
nil
,
err
}
var
out
[]
*
page
for
_
,
p
:=
range
m
{
out
=
append
(
out
,
p
)
}
return
out
,
nil
}
var
extRx
=
regexp
.
MustCompile
(
`(index)?\.[a-z]{2}\.html$`
)
func
fullURL
(
u
string
)
string
{
if
strings
.
HasSuffix
(
*
baseURL
,
"/"
)
{
u
=
u
[
1
:
]
}
return
*
baseURL
+
u
}
func
makeSitemap
(
pages
[]
*
page
)
{
byURL
:=
make
(
map
[
string
][]
*
page
)
for
_
,
p
:=
range
pages
{
realURL
:=
extRx
.
ReplaceAllLiteralString
(
p
.
URL
,
""
)
byURL
[
realURL
]
=
append
(
byURL
[
realURL
],
p
)
}
sitemap
:=
&
sitemapTop
{
NS
:
"http://www.sitemaps.org/schemas/sitemap/0.9"
,
NSxhtml
:
"http://www.w3.org/1999/xhtml"
,
}
for
realURL
,
pp
:=
range
byURL
{
sp
:=
&
sitemapPage
{
Loc
:
fullURL
(
realURL
),
}
for
_
,
p
:=
range
pp
{
// Make a public URL using query-string-based language fixation.
langURL
:=
fmt
.
Sprintf
(
"%s?hl=%s"
,
sp
.
Loc
,
p
.
Lang
)
sp
.
Links
=
append
(
sp
.
Links
,
&
sitemapLink
{
Rel
:
"alternate"
,
Lang
:
p
.
Lang
,
URL
:
langURL
,
})
}
sitemap
.
Pages
=
append
(
sitemap
.
Pages
,
sp
)
}
sort
.
Sort
(
sitemapPageList
(
sitemap
.
Pages
))
out
,
err
:=
xml
.
MarshalIndent
(
sitemap
,
""
,
" "
)
if
err
!=
nil
{
log
.
Fatal
(
err
)
}
io
.
WriteString
(
os
.
Stdout
,
xml
.
Header
)
os
.
Stdout
.
Write
(
out
)
io
.
WriteString
(
os
.
Stdout
,
"
\n
"
)
}
func
main
()
{
flag
.
Parse
()
if
flag
.
NArg
()
>
1
{
log
.
Fatal
(
"too many arguments"
)
}
var
input
io
.
Reader
=
os
.
Stdin
if
flag
.
NArg
()
>
0
{
f
,
err
:=
os
.
Open
(
flag
.
Arg
(
0
))
if
err
!=
nil
{
log
.
Fatal
(
err
)
}
defer
f
.
Close
()
input
=
f
}
pages
,
err
:=
readAllPages
(
input
)
if
err
!=
nil
{
log
.
Fatal
(
err
)
}
makeSitemap
(
pages
)
}
This diff is collapsed.
Click to expand it.
debian/rules
+
1
−
0
View file @
f74df9f4
...
@@ -26,6 +26,7 @@ override_dh_install:
...
@@ -26,6 +26,7 @@ override_dh_install:
install
-m
755
-o
root
-g
root build/bin/jsonsubst
$(
CURDIR
)
/debian/ai-webtools/usr/bin/jsonsubst
install
-m
755
-o
root
-g
root build/bin/jsonsubst
$(
CURDIR
)
/debian/ai-webtools/usr/bin/jsonsubst
install
-m
755
-o
root
-g
root build/bin/faq2md
$(
CURDIR
)
/debian/ai-webtools/usr/bin/faq2md
install
-m
755
-o
root
-g
root build/bin/faq2md
$(
CURDIR
)
/debian/ai-webtools/usr/bin/faq2md
install
-m
755
-o
root
-g
root build/bin/sitesearch
$(
CURDIR
)
/debian/ai-webtools/usr/sbin/sitesearch
install
-m
755
-o
root
-g
root build/bin/sitesearch
$(
CURDIR
)
/debian/ai-webtools/usr/sbin/sitesearch
install
-m
755
-o
root
-g
root build/bin/mksitemap
$(
CURDIR
)
/debian/ai-webtools/usr/bin/mksitemap
override_dh_installinit
:
override_dh_installinit
:
dh_installinit
--name
=
sitesearch
dh_installinit
--name
=
sitesearch
...
...
This diff is collapsed.
Click to expand it.
Preview
0%
Loading
Try again
or
attach a new file
.
Cancel
You are about to add
0
people
to the discussion. Proceed with caution.
Finish editing this message first!
Save comment
Cancel
Please
register
or
sign in
to comment