diff --git a/nasg.py b/nasg.py index c8c1129..08e4e3e 100644 --- a/nasg.py +++ b/nasg.py @@ -326,6 +326,7 @@ class MarkdownDoc(object): @property def dt(self): + """ this returns a timestamp, not an arrow object """ maybe = self.mtime for key in ['published', 'date']: t = self.meta.get(key, None) @@ -500,7 +501,6 @@ class Singular(MarkdownDoc): maybe = self.dt if len(self.comments): for c in self.comments.values(): - if c.dt > maybe: maybe = c.dt return maybe @@ -1574,7 +1574,7 @@ class Search(PHPFile): return ret def append(self, post): - mtime = int(post.mtime) + mtime = int(post.published.timestamp) check = self.check(post.name) if (check and check < mtime): self.db.execute(''' @@ -1602,24 +1602,22 @@ class Search(PHPFile): self.is_changed = True @property - def renderfile(self): - return os.path.join( - settings.paths.get('build'), - 'search.php' - ) - - @property - def templatefile(self): - return 'Search.j2.php' + def templates(self): + return ['Search.j2.php', 'OpenSearch.j2.php', 'OpenSearch.j2.xml'] async def _render(self): - r = J2.get_template(self.templatefile).render({ - 'post': {}, - 'site': settings.site, - 'menu': settings.menu, - 'meta': settings.meta, - }) - writepath(self.renderfile, r) + for template in self.templates: + r = J2.get_template(template).render({ + 'post': {}, + 'site': settings.site, + 'menu': settings.menu, + 'meta': settings.meta, + }) + target = os.path.join( + settings.paths.get('build'), + template.replace('.j2', '').lower() + ) + writepath(target, r) class IndexPHP(PHPFile): diff --git a/templates/OpenSearch.j2.php b/templates/OpenSearch.j2.php new file mode 100644 index 0000000..09e2aae --- /dev/null +++ b/templates/OpenSearch.j2.php @@ -0,0 +1,66 @@ +prepare(" + SELECT + url, category, title, snippet(data, '', '', '[...]', 5, 24), mtime + FROM + data + WHERE + data MATCH :q + ORDER BY + category +"); +$sql->bindValue(':q', $q); +$query = $sql->execute(); +$results = array(); +if($query) { + while ($row = $query->fetchArray(SQLITE3_ASSOC)) { + array_push($results, $row); + } +} + +foreach ($results as $row) { + $item_node = $channel_node->appendChild($xml->createElement("item")); + $title_node = $item_node->appendChild($xml->createElement("title", $row['title'])); + $link_node = $item_node->appendChild($xml->createElement("link", $row['url'])); + $guid_link = $xml->createElement("guid", $row['url']); + $guid_link->setAttribute("isPermaLink","true"); + $guid_node = $item_node->appendChild($guid_link); + $description_node = $item_node->appendChild($xml->createElement("description")); + $description_contents = $xml->createCDATASection(htmlentities($row["snippet(data, '', '', '[...]', 5, 24)"])); + $description_node->appendChild($description_contents); + $date_rfc = gmdate(DATE_RFC2822, $row['mtime']); + $pub_date = $xml->createElement("pubDate", $date_rfc); + $pub_date_node = $item_node->appendChild($pub_date); +} + +header('Content-Type: text/xml; charset=utf-8', true); + +$xml = new DOMDocument("1.0", "UTF-8"); +$xml->preserveWhiteSpace = false; +$xml->formatOutput = true; + +$rss = $xml->createElement("rss"); +$rss_node = $xml->appendChild($rss); +$rss_node->setAttribute("version","2.0"); + + +$rss_node->setAttribute("xmlns:dc","http://a9.com/-/spec/opensearch/1.1/"); + +$channel = $xml->createElement("channel"); +$channel_node = $rss_node->appendChild($channel); + +$channel_node->appendChild($xml->createElement("title", "Search results for: {$_GET['q']}")); +$channel_node->appendChild($xml->createElement("link", "{{ site.url }}")); +$channel_node->appendChild($xml->createElement("description", "Search {{ site.name }} for {$_GET['q']}")); + +$channel_node->appendChild($xml->createElement("openSearch:totalResults", sizeof($results))); +$channel_node->appendChild($xml->createElement("openSearch:startIndex", 1)); +$channel_node->appendChild($xml->createElement("openSearch:itemsPerPage", sizeof($results))); + +$build_date = gmdate(DATE_RFC2822, time()); +$channel_node->appendChild($xml->createElement("lastBuildDate", $build_date)); + +echo $xml->saveXML(); diff --git a/templates/OpenSearch.j2.xml b/templates/OpenSearch.j2.xml new file mode 100644 index 0000000..bf9faf4 --- /dev/null +++ b/templates/OpenSearch.j2.xml @@ -0,0 +1,9 @@ + + + {{ site.name }} + Search {{ site.name }} + + + {{ site.image }} + UTF-8 + diff --git a/templates/base.j2.html b/templates/base.j2.html index f0fc7b3..3004150 100644 --- a/templates/base.j2.html +++ b/templates/base.j2.html @@ -23,6 +23,7 @@ +