Rubyによるアメブロのペタ貼り自動化スクリプト(6) ログファイルの作成
昨日は、ペタを貼るリンクの検出の正規表現を変更し、最新の記事IDが入ったリンクだけを検出する様になった。
で、次は更新されていないブログにペタ貼りをしない様にスクリプトを変更する。
そのために、まず、ペタを貼った後にそのブログのIDと、ペタ貼りのリンクを、ログに保存する。
最新記事のIDの入ったリンクだけを検出する事が可能になったので、それをログに残しておいて、次にペタ貼りをする時に、ペタ貼りのリンクが同じかどうかを確認すれば、記事が更新されたかどうか判断できる。
ログファイルの形式にはcsvを、スクリプト内でのデータ形式は配列の配列を使う。
ログの配列の1番目には、ブログのIDを入れて、配列の2番目にはペタ貼りへのリンクを入れる。
Rubyのcsvライブラリでは、配列の配列をcsvファイルに簡単に書き込んだり、読み出したりできるので、その機能を以下の様にそのまま使わせて貰う。
#ログデータのlogへの読み込み log = Array.new log = CSV.readlines('logdata.csv') #ログデータの書き込み CSV.open("logdata.csv", 'w') do |writer| log.each do |line| writer << line end end
ログの配列をlogとして、ブログのIDを基にログを検索し、その配列の二番目のデータを、ネットから読み込んだペタ貼りのページへのリンクと比較して、動作を場合分けしてる。
#各ペタページにアクセスしてペタ貼りをする http = Net::HTTP.new('peta.ameba.jp',80) http.start header = Hash::new header['Connection'] = 'Keep-Alive' header['Cookie'] = cookie_str(cookie) File.open("peta_target.txt").each do |file| file.each_line do |line| p line.chomp! #Get peta_entry url response = Net::HTTP.get('ameblo.jp','/'+line+'/') if peta_blog_e_get = peta_entry.match(response) peta_e_path = peta_blog_e_get.to_s # p peta_e_path if (log.assoc(line) == nil) or (log.assoc(line)[1] != peta_e_path) then #ログの配列の中に該当するブログIDがない場合、またはペタへのリンクが異なっている場合だけ次の処理へ response = http.get(peta_e_path,header) # p response if petaIDget =peta_url.match(response.body) peta_path = petaIDget.to_s p peta_path response = http.get(peta_path,header) p response #ペタを貼る事に成功した場合のみ、ログの配列を更新する。 if log.assoc(line) == nil then #ログの中に該当するブログIDがない場合 log << [line, peta_e_path]#ログにブログIDとペタへのリンクの配列を追加する。 else #ペタへのリンクがログと異なっていた場合 log.assoc(line)[1] = peta_e_path #ログの配列のペタへのリンクを新しい物に書き替える end end end end end end http.finish