]> git.phdru.name Git - phdru.name/phdru.name.git/commitdiff
News feeds in Atom 1.0 and RSS 2.0 formats.
authorOleg Broytman <phd@phdru.name>
Thu, 16 Mar 2006 21:04:51 +0000 (21:04 +0000)
committerOleg Broytman <phd@phdru.name>
Thu, 16 Mar 2006 21:04:51 +0000 (21:04 +0000)
git-svn-id: file:///home/phd/archive/SVN/phdru.name/scripts@31 7bb0bf08-9e0d-0410-b083-99cee3bf18b8

Makefile
atom_10.tmpl [new file with mode: 0644]
make-news.py
news.py
rss_20.tmpl [new file with mode: 0644]

index 253ab74a5002528a00cdbc60bba8f33ddeb3395a..dfe6905d5611cf6ef5b30fd77d0db474ac45b01c 100644 (file)
--- a/Makefile
+++ b/Makefile
@@ -23,7 +23,7 @@ phd.pp.ru: phd_pp_ru.py news blog html
 
 
 .PHONY: news
-news: ../htdocs/phd.pp.ru/news.tmpl ../htdocs/phd.pp.ru/Russian/news.tmpl
+news: atom_10.py rss_20.py ../htdocs/phd.pp.ru/news.tmpl ../htdocs/phd.pp.ru/Russian/news.tmpl
 
 ../htdocs/phd.pp.ru/news.tmpl: news_en
        @(umask 022; PYTHONPATH=. ./make-news.py en ../htdocs/phd.pp.ru)
diff --git a/atom_10.tmpl b/atom_10.tmpl
new file mode 100644 (file)
index 0000000..eadc7ce
--- /dev/null
@@ -0,0 +1,38 @@
+<?xml version="1.0" encoding="koi8-r"?>
+<feed xmlns="http://www.w3.org/2005/Atom">
+  <title>$title</title>
+  <id>$baseURL</id>
+  <link rel="alternate" type="text/html" href="$baseURL" />
+  <updated>${posts[0].date}T00:00:00Z</updated>
+  <author>
+    <name>$author</name>
+    <email>$email</email>
+  </author>
+  <generator uri="http://phd.pp.ru/about/make/make-news.py.txt">http://phd.pp.ru/about/</generator>
+#for $post in $posts
+  <entry>
+    <title>$post.title</title>
+    <link rel="alternate" type="text/html" href="$post.URL" />
+    <id>$post.URL</id>
+    <updated>${post.date}T00:00:00Z</updated>
+#if $post.excerpt
+    <summary type="html" mode="escaped">
+#filter WebSafe
+$post.excerpt
+&lt;p&gt;&lt;a href="$post.URL"&gt;Read more&lt;/a&gt;&amp;hellip;&lt;/p&gt;
+#filter Filter
+    </summary>
+#end if
+#if $post.content
+    <content type="html" mode="escaped">
+#filter WebSafe
+$post.content
+#filter Filter
+    </content>
+#end if
+#for $c in $post.categoryList
+    <category term="$c" />
+#end for
+  </entry>
+#end for
+</feed>
index a1169edfbe537fe60dacfef92080c98fbc1904ff..14c3cf78b0ca294c1fd260c2e491f0a0c68498de 100755 (executable)
@@ -10,7 +10,10 @@ __copyright__ = "Copyright (C) 2006 PhiloSoft Design"
 import sys, os
 from news import get_news, write_if_changed
 
-header, news_items = get_news(sys.argv[1])
+lang = sys.argv[1]
+root = sys.argv[2]
+
+header, news_items = get_news(lang)
 
 new_text = [header]
 
@@ -29,4 +32,23 @@ new_text.append("""\
 $phd_pp_ru.respond(self)
 """)
 
-write_if_changed(os.path.join(sys.argv[2], "news.tmpl"), ''.join(new_text))
+write_if_changed(os.path.join(root, "news.tmpl"), ''.join(new_text))
+
+
+from atom_10 import atom_10
+from rss_20 import rss_20
+
+namespace = {
+   "title": "Oleg Broytmann's Personal Page - News",
+   "baseURL": "http://phd.pp.ru/news.html",
+   "description": "",
+   "lang": lang,
+   "author": "Oleg Broytmann",
+   "email": "phd@phd.pp.ru",
+   "posts": news_items,
+}
+
+atom_tmpl = str(atom_10(searchList=[namespace]))
+write_if_changed(os.path.join(root, "atom_10.xml"), atom_tmpl)
+rss_tmpl = str(rss_20(searchList=[namespace]))
+write_if_changed(os.path.join(root, "rss_20.xml"), rss_tmpl)
diff --git a/news.py b/news.py
index 9e47cb325c578f557e0b2f3e47c403d387544c6d..b091cbdda47242bc4077e18a14ea3182c35e6df7 100644 (file)
--- a/news.py
+++ b/news.py
@@ -10,12 +10,28 @@ __docformat__ = "epytext en"
 __all__ = ["get_news", "write_if_changed"]
 
 
+from datetime import date
+from urlparse import urljoin
+
 class NewsItem(object):
+   excerpt = None
+   content = None
+   categoryList = []
+
    def __init__(self, date, title, rel_link):
       self.date = date
       self.title = title
       self.rel_link = rel_link
 
+   def URL(self):
+      return urljoin("http://phd.pp.ru/", self.rel_link)
+
+   def rfc822_date(self):
+      y, m, d = self.date.split('-')
+      d = date(int(y), int(m), int(d))
+      return d.strftime("%a, %d %b %Y %H:%M:%S +0300")
+
+
 def get_news_header(lang):
    news_tmpl_file = open("news.tmpl-%s" % lang, 'r')
    header = news_tmpl_file.read()
@@ -44,7 +60,7 @@ def get_news(lang):
    @return: a tuple of (lnaguge-dependent header, a list of new items)
 
    """
-   return get_news_header(), get_news_items()
+   return get_news_header(lang), get_news_items(lang)
 
 
 def write_if_changed(filename, new_text):
diff --git a/rss_20.tmpl b/rss_20.tmpl
new file mode 100644 (file)
index 0000000..22692ea
--- /dev/null
@@ -0,0 +1,34 @@
+<?xml version="1.0" encoding="koi8-r"?>
+<rss version="2.0">
+  <channel>
+    <title>$title</title>
+    <link>$baseURL</link>
+    <description>$description</description>
+    <language>$lang</language>
+    <webMaster>$author &lt;$email&gt;</webMaster>
+    <lastBuildDate>${posts[0].rfc822_date}</lastBuildDate>
+    <generator>http://phd.pp.ru/about/make/make-news.py.txt</generator>
+#for $post in $posts
+    <item>
+      <title>$post.title</title>
+      <link>$post.URL</link>
+#if $post.excerpt or $post.content
+      <description>
+#filter WebSafe
+#if $post.excerpt
+$post.excerpt
+&lt;p&gt;&lt;a href="$post.URL"&gt;Read more&lt;/a&gt;&amp;hellip;&lt;/p&gt;
+#elif $post.content
+$post.content
+#end if
+#filter Filter
+      </description>
+#end if
+      <pubDate>${post.rfc822_date}</pubDate>
+  #for $c in $post.categoryList
+      <category>$c</category>
+  #end for
+    </item>
+#end for
+  </channel>
+</rss>