new post: pubsubhubbub with octopress

This commit is contained in:
Jörg Thalheim 2013-01-02 22:20:36 +01:00
parent 4b760a66ce
commit edfe101fca
5 changed files with 122 additions and 0 deletions

View File

@ -7,6 +7,7 @@ layout: null
<title><![CDATA[{{ site.title | cdata_escape }}]]></title>
<link href="{{ site.url }}/atom.xml" rel="self"/>
<link href="{{ site.url }}/"/>
{% if site.hub_url %}<link href="{{ site.hub_url }}" rel="hub"/>{% endif %}
<updated>{{ site.time | date_to_xmlschema }}</updated>
<id>{{ site.url }}/</id>
<author>

View File

@ -225,6 +225,16 @@ task :deploy do
Rake::Task[:copydot].invoke(source_dir, public_dir)
Rake::Task["#{deploy_default}"].execute
require 'net/http'
require 'uri'
hub_url = "higgsboson.superfeedr.com"
atom_url = "blog.higgsboson/atom.xml"
resp, data = Net::HTTP.post_form(URI.parse(hub_url),
{'hub.mode' => 'publish',
'hub.url' => atom_url})
raise "!! Hub notification error: #{resp.code} #{resp.msg}, #{data}" unless resp.code == "204"
puts "## Notified hub (" + hub_url + ") that feed #{atom_url} has been updated"
end
desc "Generate website and deploy"

View File

@ -103,3 +103,6 @@ google_analytics_tracking_id:
# Facebook Like
facebook_like: false
# pubsubhubbub
hub_url: http://higgsboson.superfeedr.com/

View File

@ -0,0 +1,107 @@
---
layout: post
title: "Pubsubhubbub with Octopress"
date: 2013-01-02 21:44
comments: true
categories: superfeedr octopress pubsubhubbub real-time
---
In this article I explain how to set up octopress with
[pubsubhubbub](https://en.wikipedia.org/wiki/PubSubHubbub), to get
push-enabled feeds. In my example I use [superfeedr](http://superfeedr.com/), which is free to use.
After you signup up a hub, in my case [higgsboson.superfeedr.com](http://higgsboson.superfeedr.com),
you have to add a hub reference to your atom feed.
```yaml _config.yml
# ....
# pubsubhubbub
hub_url: http://higgsboson.superfeedr.com/ # <--- replace this with your hub
```
Insert this line:
{% raw %}
``` xml
{% if site.hub_url %}<link href="{{ site.hub_url }}" rel="hub"/>{% endif %}
```
{% endraw %}
into `source/atom.xml`. So it looks like this:
{% raw %}
```xml source/atom.xml
<?xml version="1.0" encoding="utf-8"?>
<feed xmlns="http://www.w3.org/2005/Atom">
<title><![CDATA[{{ site.title }}]]></title>
<link href="{{ site.url }}/atom.xml" rel="self"/>
<link href="{{ site.url }}/"/>
{% if site.hub_url %}<link href="{{ site.hub_url }}" rel="hub"/>{% endif %}
<updated>{{ site.time | date_to_xmlschema }}</updated>
<id>{{ site.url }}/</id>
<author>
<name><![CDATA[{{ site.author | strip_html }}]]></name>
{% if site.email %}<email><![CDATA[{{ site.email }}]]></email>{% endif %}
</author>
<generator uri="http://octopress.org/">Octopress</generator>
{% for post in site.posts limit: 20 %}
<entry>
<title type="html"><![CDATA[{{ post.title | cdata_escape }}]]></title>
<link href="{{ site.url }}{{ post.url }}"/>
<updated>{{ post.date | date_to_xmlschema }}</updated>
<id>{{ site.url }}{{ post.id }}</id>
<content type="html"><![CDATA[{{ post.content | expand_urls: site.url | cdata_escape }}]]></content>
</entry>
{% endfor %}
</feed>
```
{% endraw %}
To push out updates, you have to ping your hub, this is easily done in your
deploy rake task.
Add these lines to the end of your deploy task in your Rakefile:
```ruby
require 'net/http'
require 'uri'
hub_url = "higgsboson.superfeedr.com" # replace this with your hub
atom_url = "blog.higgsboson/atom.xml"
resp, data = Net::HTTP.post_form(URI.parse(hub_url),
{'hub.mode' => 'publish',
'hub.url' => atom_url})
raise "!! Hub notification error: #{resp.code} #{resp.msg}, #{data}" unless resp.code == "204"
puts "## Notified hub (" + hub_url + ") that feed #{atom_url} has been updated"
```
So you end up with something like this:
``` ruby Rakefile
desc "Default deploy task"
task :deploy do
# Check if preview posts exist, which should not be published
if File.exists?(".preview-mode")
puts "## Found posts in preview mode, regenerating files ..."
File.delete(".preview-mode")
Rake::Task[:generate].execute
end
Rake::Task[:copydot].invoke(source_dir, public_dir)
Rake::Task["#{deploy_default}"].execute
require 'net/http'
require 'uri'
hub_url = "higgsboson.superfeedr.com"
atom_url = "blog.higgsboson/atom.xml"
resp, data = Net::HTTP.post_form(URI.parse(hub_url),
{'hub.mode' => 'publish',
'hub.url' => atom_url})
raise "!! Hub notification error: #{resp.code} #{resp.msg}, #{data}" unless resp.code == "204"
puts "## Notified hub (" + hub_url + ") that feed #{atom_url} has been updated"
end
```
Now whenever you run `rake deploy`, it will automaticly update your hub.

View File

@ -7,6 +7,7 @@ layout: nil
<title><![CDATA[{{ site.title }}]]></title>
<link href="{{ site.url }}/atom.xml" rel="self"/>
<link href="{{ site.url }}/"/>
{% if site.hub_url %}<link href="{{ site.hub_url }}" rel="hub"/>{% endif %}
<updated>{{ site.time | date_to_xmlschema }}</updated>
<id>{{ site.url }}/</id>
<author>