From: Tomas Sedovic <[email protected]>
The news for the website are generated from the news.json file. When webby
runs, it fetches the newest tweets from the Deltacloud stream on Identi.ca,
updates the news.json file and then regenerates the site.
The benefits of this approach are:
* mix multiple news sources (the original entries, identi.ca, whatever else)
* ability to generate different views (e.g. "recent news" / "news archive")
* keep/backup local copy of the news
---
deltacloud.org/content/index.haml | 6 ++-
deltacloud.org/lib/news.rb | 57 ++++++++++++++++++++++++++++++++----
deltacloud.org/news.json | 18 +++++++++++
3 files changed, 72 insertions(+), 9 deletions(-)
create mode 100644 deltacloud.org/news.json
diff --git a/deltacloud.org/content/index.haml
b/deltacloud.org/content/index.haml
index 066110b..d179dfc 100644
--- a/deltacloud.org/content/index.haml
+++ b/deltacloud.org/content/index.haml
@@ -49,9 +49,11 @@ filter: haml
%h2
News
%ul
- - all_news.each do |item|
+ - all_news.first(7).each do |item|
%li
- = item
+ = item[:text]
+ %p
+ Follow @deltacloud on <a
href="http://identi.ca/deltacloud">Identi.ca</a> or <a
href="http://twitter.com/deltacloud">Twitter</a>.
%br
%br
.section.video{ :style => "margin-top:16px;" }
diff --git a/deltacloud.org/lib/news.rb b/deltacloud.org/lib/news.rb
index 98e149b..244a7cc 100644
--- a/deltacloud.org/lib/news.rb
+++ b/deltacloud.org/lib/news.rb
@@ -1,13 +1,56 @@
+require 'json'
+require 'net/http'
module NewsHelper
def all_news
- [
- %Q(Deltacloud Core <a
href="http://watzmann.net/blog/2010/07/deltacloud-apache-incubator.html">moved
to Apache Incubator</a>.),
- %Q(Deltacloud now <a href="./drivers.html#providers">supports
GoGrid</a>!),
- %Q(We've introduced <a href="./api.html#h4_1">Hardware Profiles</a> to
the API.),
- %Q(Deltacloud <a
href="http://press.redhat.com/2009/09/03/introducing-deltacloud/">announced</a>
at 2009 Red Hat Summit!),
- ]
+ refresh_news
+ return stored_news
end
-end
+ StoredNewsPath = 'news.json'
+
+ def stored_news
+ return JSON.parse(File.open(StoredNewsPath).read, {:symbolize_names =>
true})
+ end
+
+ def recent_tweets
+ user = 'deltacloud'
+ return
JSON.parse(Net::HTTP.get(URI.parse("http://identi.ca/api/statuses/user_timeline/#{user}.json?count=20")),
{:symbolize_names => true})
+ end
+
+ def clickable_at_replies(text)
+ # convert @somebody in tweets to clickable http://identi.ca/somebody link
+ return text.gsub(/@(\w+)/, '<a href="http://identi.ca/\1">\0</a>')
+ end
+ def clickable_urls(text)
+ # convert plaintext URLs to HTML links
+ return
text.gsub(/\b(([\w-]+:\/\/?|www[.])[^\s()<>]+(?:\([\w\d]+\)|([^[:punct:]\s]|\/)))/,
'<a href="\0">\0</a>')
+ end
+
+ def tweeted_news
+ news = recent_tweets.collect do |t|
+ if not t[:in_reply_to_user_id] then # ignore tweet replies
+ news_item = {
+ :text => clickable_at_replies(clickable_urls(t[:text])),
+ :id => t[:id],
+ :date => Time.parse(t[:created_at]).xmlschema
+ }
+ end
+ end
+ return news.compact
+ end
+
+ def refresh_news
+ news = stored_news
+ tweeted_news.each do |t|
+ if news.select{|n| n[:id] == t[:id]}.length == 0 then
+ news.push(t)
+ end
+ end
+ File::open(StoredNewsPath, 'w') do |f|
+ f.write(JSON.pretty_generate(news.sort {|x,y| y[:date] <=> x[:date] }))
+ end
+ end
+
+end
Webby::Helpers.register(NewsHelper)
diff --git a/deltacloud.org/news.json b/deltacloud.org/news.json
new file mode 100644
index 0000000..a9ac6c8
--- /dev/null
+++ b/deltacloud.org/news.json
@@ -0,0 +1,18 @@
+[
+ {
+ "date": "2010-07-12T11:00:47+02:00",
+ "text": "Deltacloud Core <a
href=\"http://watzmann.net/blog/2010/07/deltacloud-apache-incubator.html\">moved
to Apache Incubator</a>."
+ },
+ {
+ "date": "2010-05-06T14:22:22+02:00",
+ "text": "Deltacloud now <a href=\"./drivers.html#providers\">supports
GoGrid</a>!"
+ },
+ {
+ "date": "2010-05-06T14:21:22+02:00",
+ "text": "We've introduced <a href=\"./api.html#h4_1\">Hardware
Profiles</a> to the API."
+ },
+ {
+ "date": "2009-09-03T00:00:00+02:00",
+ "text": "Deltacloud <a
href=\"http://press.redhat.com/2009/09/03/introducing-deltacloud/\">announced</a>
at 2009 Red Hat Summit!"
+ }
+]
\ No newline at end of file
--
1.7.1.1
_______________________________________________
deltacloud-devel mailing list
[email protected]
https://fedorahosted.org/mailman/listinfo/deltacloud-devel