自分が管理しているサイトではDescriptionやKeywordの大文字小文字が混在していたためエラーが出ました。rescueを初めて使ってみたところなんとか動きました。これが正しい使い方であればいいのですが。というかもっと簡潔にやる方法があれば教えてください。
以下の方法で使っています。
1.Sitesucker(OSX用)でサイトをローカルに保存。(オプションで画像やサウンドファイルなどの重いファイルを除外しておかないとサイト規模によってはすごく時間がかかります。)
2.ダウンロードしたフォルダにスクリプトを持っていってそこで実行。
require 'rubygems' require 'hpricot' require 'open-uri' #改行削除メソッド def erasebr (str) str.gsub!(/\n/, "") end #書き出しファイル名はドメイン名+csvtype+今日の日付 puts "ファイル名の先頭に入れる文字を入力してください!例)ドメイン名など半角英数" name = gets.chomp #書き出しメソッド def makecsv (domain_name, csvtype) #ファイル名は:ドメイン名+csvtype+タイムスタンプ timestamp = Time.now.strftime("-%Y%m%d-%H%M%S") csv_name = domain_name + "-" + csvtype.to_s + timestamp + ".csv" puts "書き出しファイル名: " + csv_name #ファイルタイプ(通常はhtml) ext = "html" text_array = Dir.glob("**/*.#{ext}") open(csv_name, "w") do |f| # 全ファイル内のtitle、description、keywords、見出し要素を取得 text_array.each do |file| doc = Hpricot( open(file).read ) title = doc.at('title').inner_html # casesensitiveエラーを入れ子でrescue begin description = doc.at('meta[@name="Description"]')['content'] rescue begin description = doc.at('meta[@name="description"]')['content'] rescue description = "NO" end end begin keywords = doc.at('meta[@name="Keywords"]')['content'] rescue begin keywords = doc.at('meta[@name="keywords"]')['content'] rescue keywords = "NO" end end hone = doc.at('h1').inner_html htwo = [] (doc/"h2").each do |d| htwo << d.inner_html end #改行を削除 erasebr(title) erasebr(hone) erasebr(description) htwo.each { |c| c.gsub!(/\n/, "")} #要素ならべて書き込み if csvtype == "nokwd" s = file, ",title,#{title}", " ,description,#{description}", ",h1,#{hone}", ",h2,", htwo.join(","), "\n" else s = file, ",title,#{title}\n", " ,description,#{description}\n", " ,keywords,#{keywords}\n", ",h1,#{hone}\n", ",h2,", htwo.join("\n,,"), "\n\n" end f.write s end end end #keywordあり: kwd #keywordなし : nokwd makecsv(name, "kwd") makecsv(name, "nokwd")
初さらしです。
動いた時は感動しました。
No comments:
Post a Comment