I really enjoy using Mephisto but it is missing some of the features that other blogging applications have. One is the ability to send a trackback ping to another blog post. So I built my own library to handle it.
Download trackback.rb
require 'net/http' require 'uri' # Simple trackback class to send a trackback to another weblog # This is used via the console # # Example: # >> t = Trackback.new("theadmin.org", 227) # >> t.send('http://trackback.example/url.php?1234') # class Trackback @data = { } def initialize(host, article_id) site = Site.find_by_host(host) article = site.articles.find(article_id) if article.nil? raise "Could not find article" end if article.published_at.nil? raise "Article not published" end @data = { :title => article.title, :excerpt => article.body_html, :url => "http://" + get_full_url(site, article), :blog_name => site.title } end def send(trackback_url) u = URI.parse trackback_url res = Net::HTTP.start(u.host, u.port) do |http| http.post(u.request_uri, url_encode(@data), { 'Content-Type' => 'application/x-www-form-urlencoded; charset=utf-8' }) end RAILS_DEFAULT_LOGGER.info "TRACKBACK: #{trackback_url} returned a response of #{res.code} (#{res.body})" return res end private def url_encode(data) return data.map {|k,v| "#{k}=#{v}"}.join('&') end def get_full_url(site, article) article_peramlink = article.hash_for_permalink url = site.host + '/' + site.permalink_style ['permalink', 'year', 'month', 'day'].each do |value| url.gsub!(/:#{value}/,article_peramlink[value.to_sym].to_s) end return url end end
To install this just save the above code to a file in your Mephisto’s lib/
directory. Now you can send a trackback to a website using the Rails console:
$ script/console production >> t = Trackback.new("theadmin.org", 227) >> t.send("http://acheron/blog1/wp-trackback.php?p=1") => #<Net::HTTPOK 200 OK readbody=true>
I haven’t had a lot of time to work on it, so I hope I can get some help improving it. Some ideas I have to improve it:
- Turn into a Mephisto plugin
- Unit tests
- Scan all urls in the Article, looking for trackback urls.
- Support other types of trackbacks
Download trackback.rb
Eric
Hi Eric,
thanks for sharing, I was looking for that! Please share the Mephisto plugin if you happen to write it.
Hello,
From what I’ve understood here you send the trackback via console right?
Panagiotis Atmatzidis: Yes, you would send the trackback using the console. I’d like to have it send a trackback whenever an article is posted but haven’t had time to implement that yet.
Okay! I wish I was a ruby guru, because it’s a feature that already missed twice. If you do implementation sometime in the future, plz drop a mail.
Regards,
and thank you in advance.
Hi Eric, thanks for the lib. Your library is good for mephisto.
Greetings & thx from .de
Do you have commit to svn?
telefonmann: No I don’t but since it’s on git now, I can add this in a branch. Still need to upgrade to 0.8 though.
Any updates for this?
No. I stopped using Mephisto several months ago so this library isn’t maintained any more.