File: atom.sh

package info (click to toggle)
nanoblogger 3.1-3
  • links: PTS
  • area: main
  • in suites: sarge
  • size: 480 kB
  • ctags: 96
  • sloc: sh: 1,585; xml: 104; makefile: 44
file content (106 lines) | stat: -rw-r--r-- 3,195 bytes parent folder | download
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
# NanoBlogger Atom Feed Plugin

# limit number of items to include in feed
: ${LIMIT_ITEMS:=10}
# filename of atom feed
NB_AtomFile="atom.$NB_SYND_FILETYPE"
# atom feed version
NB_AtomVer="0.3"
# atom feed's alternate link
NB_AtomAltLink='<link rel="alternate" type="application/atom+xml" title="Atom $NB_AtomVer" href="${BASE_URL}$NB_AtomFile" />'

NB_AtomModDate=`date "+%Y-%m-%dT%H:%M:%S$BLOG_TZD"`
# make links temporarily absolute
ARCHIVES_URL="$BLOG_URL/$ARCHIVES_DIR/"
[ "$ABSOLUTE_LINKS" = "1" ] && ARCHIVES_URL=""
OLD_BASE_URL="$BASE_URL"
BASE_URL="$BLOG_URL/"

# escape special characters to help create valid xml feeds
esc_chars(){
	sed -e '/[\&][ ]/ s//\&amp; /g; /[\"]/ s//\&quot;/g'
	}

# make atom feed
make_atomfeed(){
MKPAGE_OUTFILE="$BLOG_DIR/$NB_AtomFile"

cat > "$MKPAGE_OUTFILE" <<-EOF
	<?xml version="1.0" encoding="$BLOG_CHARSET"?>
	<feed version="$NB_AtomVer"
		xmlns="http://purl.org/atom/ns#"
		xmlns:dc="http://purl.org/dc/elements/1.1/"
	>
	<title mode="escaped">$BLOG_TITLE</title>
	<link rel="alternate" type="text/html" href="$BLOG_URL"/>
	<modified>$NB_AtomModDate</modified>
	<author>
		<name>$NB_EntryAuthor</name>
		<url>$BLOG_URL</url>
	</author>

	$NB_AtomEntries

	</feed>
EOF
nb_msg "$MKPAGE_OUTFILE"
}

# generate feed entries
build_atomfeed(){
	db_catquery="$1"
	query_db max "$db_catquery" "$LIMIT_ITEMS"
	ARCHIVE_LIST="$DB_RESULTS"
	> "$SCRATCH_FILE"
	for entry in $ARCHIVE_LIST; do
	        read_entry "$NB_DATA_DIR/$entry"
		Atom_EntryTime=`echo "$entry" |sed -e '/\_/ s//\:/g; s/[\.]'$NB_DATATYPE'//g'`
		Atom_EntryDate=`echo "$Atom_EntryTime$BLOG_TZD"`
		# non-portable find command!
		#Atom_EntryModDate=`find "$NB_DATA_DIR/$entry" -printf "%TY-%Tm-%TdT%TH:%TM:%TS$BLOG_TZD"`
		Atom_EntryModDate="$Atom_EntryDate"
		Atom_EntryTitle=`echo "$NB_EntryTitle" |esc_chars`
		Atom_EntrySubject=; cat_title=; oldcat_title=
		for cat_db in $db_categories; do
			cat_var=`grep "$entry" "$NB_DATA_DIR/$cat_db"`
			if [ ! -z "$cat_var" ]; then
				cat_title=`sed 1q "$NB_DATA_DIR/$cat_db"`
				[ "$cat_title" != "$oldcat_title" ] && cat_title="$oldcat_title $cat_title"
				oldcat_title="$cat_title,"
			fi
		done
		if [ ! -z "$cat_title" ]; then
			cat_title=`echo $cat_title |sed -e '{$ s/\,[ ]$//g; }' |esc_chars`
			Atom_EntrySubject=`echo '<dc:subject>'$cat_title'</dc:subject>'`
		fi
		#Atom_EntryExcerpt=`echo "$NB_EntryBody" |sed -n '1,/^$/p' |esc_chars`
		Atom_EntryExcerpt="$NB_EntryBody"
		cat >> "$SCRATCH_FILE" <<-EOF
			<entry>
				<title mode="escaped">$Atom_EntryTitle</title>
				<author>
					<name>$NB_EntryAuthor</name>
				</author>
				<link rel="alternate" type="text/html" href="${ARCHIVES_URL}$NB_EntryPermalink"/>
				<id>${ARCHIVES_URL}$NB_EntryPermalink</id>
				<issued>$Atom_EntryDate</issued>
				<modified>$Atom_EntryModDate</modified>
				<created>$Atom_EntryDate</created>
				$Atom_EntrySubject
				<content type="application/xhtml+xml" xml:lang="en" xml:space="preserve" mode="escaped">
					<![CDATA[
					$Atom_EntryExcerpt
					]]>
				</content>

			</entry>
		EOF
	done
	NB_AtomEntries=$(< "$SCRATCH_FILE")
	}


nb_msg "generating atom $NB_AtomVer feed ..."
build_atomfeed nocat
make_atomfeed
BASE_URL="$OLD_BASE_URL"