在部落格發佈新文章自然會希望讓別人能更快發現或搜尋到 。 之前使用的 WordPress 有相關的插件可以簡單做到這件事 。 幸好 ,Octopress 上面的方案也並不難 , 本文山姆鍋就來分享我是如何讓 「 影化身部落格 」 在發佈新文章時可以通知搜尋引擎 。

讓 Octopress 俱備通知搜尋引擎的能力

為了讓 Octopress 可以通知搜尋引擎 , 需要在 Rakefile 中加入相關的程式腳本 , 這些腳本自然跟要通知的搜尋引擎種類相關 。 底下是分別針對 Ping-o-matic!、 百度 、Goole 以及 Bing 的腳本 。

Ping-o-matic! 使用的腳本

# Ping search engines
desc 'Ping pingomatic'
task :pingomatic do
  begin
    require 'xmlrpc/client'
    puts '* Pinging ping-o-matic'
    XMLRPC::Client.new('rpc.pingomatic.com', '/').call('weblogUpdates.extendedPing', 'Eavatar.com' , 'http://blog.eavatar.com', 'http://blog.eavatar.com/atom.xml')
  rescue LoadError
    puts '! Could not ping ping-o-matic, because XMLRPC::Client could not be found.'
  end
end

Baidu 通知腳本

desc 'Ping Baidu'
task :pingbaidu do
  begin
    require 'xmlrpc/client'
    puts '* Pinging Baidu search engine'
    XMLRPC::Client.new('ping.baidu.com', '/ping/RPC2').call('weblogUpdates.extendedPing', 'Eavatar.com' , 'http://eavatar.com', 'http://blog.eavatar.com', 'http://blog.eavatar.com/rss.xml')
  rescue LoadError
    puts '! Could not ping Baidu, because XMLRPC::Client could not be found.'
  end
end

Google 的通知腳本

desc 'Notify Google of the new sitemap'
task :sitemapgoogle do
  begin
    require 'net/http'
    require 'uri'
    puts '* Pinging Google about our sitemap'
    Net::HTTP.get('www.google.com', '/webmasters/tools/ping?sitemap=' + URI.escape('http://blog.eavatar.com/sitemap.xml'))
  rescue LoadError
    puts '! Could not ping Google about our sitemap, because Net::HTTP or URI could not be found.'
  end
end

Bing 的通知腳本

desc 'Notify Bing of the new sitemap'
task :sitemapbing do
  begin
    require 'net/http'
    require 'uri'
    puts '* Pinging Bing about our sitemap'
    Net::HTTP.get('www.bing.com', '/webmaster/ping.aspx?siteMap=' + URI.escape('http://blog.eavatar.com/sitemap.xml'))
  rescue LoadError
    puts '! Could not ping Bing about our sitemap, because Net::HTTP or URI could not be found.'
  end
end

上述的這些腳本 , 記得要將 'blog.eavatar.com' 或者 'eavatar.com' 換成您的部落格域名 。 透過這些腳本 , 您便可以透過執行指令來通知搜尋引擎 , 例如要通知 Google, 只需要在命令列執行 :

$ rake sitemapgoogle

當然 , 山姆鍋是不會想要一個一個去通知 , 因此 , 需要再增加一個腳本來同時通知上述的搜尋引擎或者通知服務 。

desc "Notify various services about new content"
task :notify => [:pingomatic, :sitemapgoogle, :sitemapbing, :pingbaidu] do
end

這樣一來就可以執行下列指令一次通知所有搜尋引擎 :

$ rake notify

您可以在 ':deploy' 這個任務腳本中 , 自動執行通知的動作 。 但是山姆鍋習慣自行決定何時要進行通知 , 所以 , 就把這個當作是您的作業吧 !

參考來源