File: rss.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 (135 lines) | stat: -rw-r--r-- 4,471 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
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
# NanoBlogger RSS 1.0 Feed Plugin

# Limit number of items to include in feed
: ${LIMIT_ITEMS:=10}

# output filename of rss feed
NB_RSSFile="index.$NB_SYND_FILETYPE"
# rss feed version
NB_RSSVer="1.0"
# rss feed's alternate link
NB_RSSAltLink='<link rel="alternate" type="application/rss+xml" title="RSS $NB_RSSVer" href="${BASE_URL}$NB_RSSFile" />'
# category rss feed's alternate link
NB_RSSCatAltLink='<link rel="alternate" type="application/rss+xml" title="RSS $NB_RSSVer: $NB_ArchiveTitle" href="$NB_ArchivePrefix.$NB_SYND_FILETYPE" />'

NB_RSSModDate=`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 rss feed
make_rssfeed(){
	feed_outfile="$1"
	MKPAGE_OUTFILE="$feed_outfile"
	RSS_FEED_URL="$BLOG_URL/$NB_RSSFile"
	[ ! -z "$NB_RSSCatFile" ] && RSS_FEED_URL="$BLOG_URL/$ARCHIVES_DIR/$NB_RSSCatFile"

	cat > "$MKPAGE_OUTFILE" <<-EOF
		<?xml version="1.0" encoding="$BLOG_CHARSET"?>
		<!DOCTYPE rdf:RDF [
		<!ENTITY % HTMLlat1 PUBLIC
		 "-//W3C//ENTITIES Latin 1 for XHTML//EN"
		 "http://www.w3.org/TR/xhtml1/DTD/xhtml-lat1.ent">
		]>
		<rdf:RDF
		 xmlns="http://purl.org/rss/1.0/"
		 xmlns:rdf="http://www.w3.org/1999/02/22-rdf-syntax-ns#"
		 xmlns:dc="http://purl.org/dc/elements/1.1/"
		 xmlns:content="http://purl.org/rss/1.0/modules/content/"
		 xmlns:admin="http://webns.net/mvcb/"
		>
		<channel rdf:about="$RSS_FEED_URL">
			<title>$BLOG_TITLE</title>
			<link>$BLOG_URL</link>
			<description>$BLOG_DESCRIPTION</description>
			<dc:language>$BLOG_LANG</dc:language>
			<dc:creator>$NB_EntryAuthor</dc:creator>
			<dc:date>$NB_RSSModDate</dc:date>
			<admin:generatorAgent rdf:resource="http://nanoblogger.sourceforge.net" />
			<items>
				<rdf:Seq>
					$NB_RSSItems
				</rdf:Seq>
			</items>
		</channel>
		$NB_RSSEntries
		</rdf:RDF>
	EOF
	nb_msg "$MKPAGE_OUTFILE"
	}

# generate feed entries
build_rssfeed(){
	db_catquery="$1"
	query_db max "$db_catquery" "$LIMIT_ITEMS"
	ARCHIVE_LIST="$DB_RESULTS"
	RSS_SEQFILE="$SCRATCH_FILE.rss_seq"
	> "$SCRATCH_FILE"
	> "$RSS_SEQFILE"
	for entry in $ARCHIVE_LIST; do
		NB_RSSEntryTime=`echo "$entry" |sed -e '/\_/ s//\:/g; s/[\.]'$NB_DATATYPE'//g'`
	        read_entry "$NB_DATA_DIR/$entry"
		echo '<rdf:li rdf:resource="'${ARCHIVES_URL}$NB_EntryPermalink'" />' >> "$RSS_SEQFILE"
		# non-portable find command!
		#NB_RSSEntryModDate=`find "$NB_DATA_DIR/$entry" -printf "%TY-%Tm-%TdT%TH:%TM:%TS$BLOG_TZD"`
		NB_RSSEntryTitle=`echo "$NB_EntryTitle" |esc_chars`
		NB_RSSEntrySubject=; 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`
			NB_RSSEntrySubject=`echo '<dc:subject>'$cat_title'</dc:subject>'`
		fi
		#NB_RSSEntryExcerpt=`echo "$NB_EntryBody" |sed -n '1,/^$/p' |esc_chars`
		NB_RSSEntryExcerpt="$NB_EntryBody"
		cat >> "$SCRATCH_FILE" <<-EOF
			<item rdf:about="${ARCHIVES_URL}$NB_EntryPermalink">
				<link>${ARCHIVES_URL}$NB_EntryPermalink</link>
				<title>$NB_RSSEntryTitle</title>
				<dc:date>$NB_RSSEntryTime$BLOG_TZD</dc:date>
				<dc:creator>$NB_EntryAuthor</dc:creator>
				$NB_RSSEntrySubject
				<description><![CDATA[$NB_RSSEntryExcerpt]]></description>
			</item>
		EOF
	done
	NB_RSSItems=$(< "$RSS_SEQFILE")
	NB_RSSEntries=$(< "$SCRATCH_FILE")
	}

# generate category feed entries
build_rss_catfeeds(){
	if [ "$CATEGORY_FEEDS" = 1 ]; then
		db_categories="$CAT_LIST"
		if [ ! -z "$db_categories" ]; then
			for cat_db in $db_categories; do
				if [ -f "$NB_DATA_DIR/$cat_db" ]; then
					NB_RSSCatFile=`chg_suffix "$cat_db" "$NB_SYND_FILETYPE"`
					NB_ArchiveTitle=`sed 1q "$NB_DATA_DIR/$cat_db" |esc_chars`
					nb_msg "generating rss $NB_RSSVer feed for category ..."
					build_rssfeed "$cat_db"
					make_rssfeed "$BLOG_DIR/$ARCHIVES_DIR/$NB_RSSCatFile"
				fi
			done
		fi
	fi
	}

nb_msg "generating rss $NB_RSSVer feed ..."
build_rssfeed nocat
make_rssfeed "$BLOG_DIR/$NB_RSSFile"
build_rss_catfeeds
BASE_URL="$OLD_BASE_URL"