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

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

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

Ping-o-matic! 使用的腳本

1
2
3
4
5
6
7
8
9
10
11
# 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 通知腳本

1
2
3
4
5
6
7
8
9
10
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 的通知腳本

1
2
3
4
5
6
7
8
9
10
11
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 的通知腳本

1
2
3
4
5
6
7
8
9
10
11
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,只需要在命令列執行:

1
$ rake sitemapgoogle

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

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

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

1
$ rake notify

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

參考來源