はてなブログでping送信する
移転しました。
約5秒後に自動的にリダイレクトします。
ブログの集客用にランキングサイトとか登録してますか?
このブログもとりあえず「にほんブログ村」に登録をしてたりします。
集客といってもブログ村からのお客さんは1日あたり2、3人ぐらいですけどね。
なにもしないよりはマシでしょう。
今日のネタはそういう集客手段の話ではなくて。。。
ブログ村で最新記事を紹介してもらうには、
pingを送信するということが必要なのです。
ブログ更新しましたよーっていう連絡ですね。
なかにはブログを更新したら自動でping送信をしてくれるブログサービスもあるらしいのですが、はてなブログは自動で送信してくれないので自分でブログ村のサイトに行って送信ボタンをポチッとやる必要があるのです。
まあ、大した手間というわけでもないのだけど、、、
やっぱり毎回となると面倒ですよね。
プログラマってやつは面倒くさがりな人種なのです!
そして、面倒なことは自動化してしまおうとするものなのです!!
ということで、前置きが長くなりましたが、、、
はてなブログの更新をping送信するプログラムを書いたので載せときます。
きっと既に誰かが作ってるだろうから何番煎じか分かりませんがw
www.mk-mode.com
ベースはこちらのサイトに載ってるソースをいただきました。
で、出来上がったプログラムはこちら。
# -*- coding: utf-8 -*- require 'open-uri' require 'rexml/document' require 'xmlrpc/client' # 更新間隔(分) UPDATE_INTERVAL = 30 # ---【1】 #-------------------- # サイト情報 #-------------------- class SiteInfo def initialize(name, url) @name = name # サイト名 @url = url # サイトURL @pingServers = [] # PING送信先URL end def addPingServers(url) @pingServers.push(url) end attr_accessor :name, :url, :pingServers end #-------------------- # サイト登録 #-------------------- siteInfos = [] # ---【2】 # 備忘録のような何か siteInfo = SiteInfo.new("備忘録のような何か", "http://m-uta.hatenablog.com/feed") siteInfo.addPingServers(<ブログ村の専用Ping送信先URL>) siteInfos.push(siteInfo) #-------------------- # 開始メッセージ出力 #-------------------- puts "### Send Update Ping [ START ] --#{Time.now}--" #-------------------- # Ping送信処理 #-------------------- begin siteInfos.each do |info| puts "- #{info.name}" doc = REXML::Document.new(open(info.url)) updateTime = Time.strptime(doc.elements["feed/updated"].text, "%Y-%m-%dT%H:%M:%S") # 前回の送信処理実行後に更新があった場合のみPing送信 if updateTime >= Time.now - UPDATE_INTERVAL*60 info.pingServers.each do |svr| puts "-- #{svr}" client = XMLRPC::Client.new2(svr) begin res = client.call("weblogUpdates.ping", info.name, info.url) puts " [SUCCESS]" rescue XMLRPC::FaultException => e puts " [ERROR] #{e.faultCode} - #{e.faultString}" rescue Exception => e # ---【3】 if e.message.start_with?("Wrong content-type (received 'text/html' but expected 'text/xml')") puts " [SUCCESS(text/html)]" else puts " [ERROR] #{e.class} - #{e.message}" end end end else puts " [SKIP]Don't updated from #{updateTime}" end end rescue => e STDERR.puts "[ERROR]" + e.to_s exit 1 end #-------------------- # 終了メッセージ出力 #-------------------- puts "### Send Update Ping [ E N D ]"
【1】
これをサーバーに置いて30分ごとに動くようにする予定。
直近の30分でブログに更新があればping送信される。
【2】
ブログを複数登録できるようにしてみた。
さらに1つのブログに対して複数のping送信先を設定できるようにした。
【3】
ブログ村にping送信したらcontent-typeが"text/html"ですよっていうエラーが出るんだけど、ちゃんと送信は出来ているみたいなのでエラーにしないことにした。
けど、このハンドリングはイケてないよなぁ。。。
(。・ω・)ノシ