Eri's Favorites > Thoughts > 2007.8
8/21
,2007

リンクチェッカープログラム(Ruby)が完成

[ Ruby | ブログ&HP ]
Eri's Favorites の外部サイトへのリンク切れを調べるプログラムが完成しました。Rubyistの第一歩です。

あらすじ~サイトマップとおもうことのトップページをあわせると、Eri's Favorites の全ページのリストができます(A)。その全ページにある外部サイトへのリンクを自動で確認して、リンクが切れてるののリストを作ります(B)。

6/11に(A)を作ってしばらくほっていました。土曜日に再開して(B)を作ってるうちに、(A)で作ったリストに不備があるのがわかって、(A)を手直ししつつ、(B)が完成。1人じゃエラーの返し方が分からないのでそこは丸投げだけど。

そして、(A)はサイトマップとおもうことのトップページとでページ構成が違うからそのままじゃ使えないんだけど、今日はけんが早々に寝てしまったので、自力でおもうことのトップ用に作り直しました。私すごい♪

やり方は、(A1)で a.txt、(A2)で a2.txt(2つでサイト内の全ページのURL一覧)を作り、それぞれを(B)にかけて b1.txt、b2.txt(リンク切れ一覧)を作る。

(A1)サイトマップから内部リンクのリストを作る

# ライブラリ"hpricot"を使う。HTMLのタグごとにエレメンツに分ける。
require "hpricot"

# ライブラリ"open-uri"を使う。開いてHTMLを取る。
require "open-uri"

# "http://eri.cheap.jp/site_map/index.htm"を「sitemapurl」という名前にする。
sitemapurl = "http://eri.cheap.jp/site_map/index.htm"

# 「sitemapurl」をHTMLのタグごとのエレメンツに分けたもの全体を「doc」という名前にする。
doc = Hpricot(open(sitemapurl))

# 各エレメンツの中で、<a>タグで「href^=http://」のないものの全体を「list」という名前にする。
list = doc.search('a:not([@href^=http://])')

# 「list」の1つずつを「link」と呼んで、
# 「link」の中の"href"属性を抜き出したものを「href」と呼んで、
# 「sitemapurl」から見た「href」をあわせて、絶対パスのURLにしたものを出力。
list.each{|link|
href = link.get_attribute("href")
puts URI.join(sitemapurl , href)
}
(A2)おもうことのトップページから内部リンクのリストを作る

# ライブラリ"hpricot"を使う。HTMLのタグごとにエレメンツに分ける。
require "hpricot"

# ライブラリ"open-uri"を使う。開いてHTMLを取る。
require "open-uri"

# "http://eri.cheap.jp/thoughts/index.html"を「sitemapurl」という名前にする。
sitemapurl = "http://eri.cheap.jp/thoughts/index.html"

# 「sitemapurl」をHTMLのタグごとのエレメンツに分けたもの全体を「doc」という名前にする。
doc = Hpricot(open(sitemapurl))

# 各エレメンツの中で、<a>タグだけ抜き出したのの全体を「list」という名前にする。
list = doc.search('a')

# 「list」の1つずつを「link」と呼ぶ。
# 「link」の中の"href"属性を抜き出したものを「href」と呼ぶ。
list.each{|link|
href = link.get_attribute("href")

# 全てのエントリは「過去のおもうこと」で網羅できるので、「http://eri.cheap.jp/thoughts/archives.........htm」が入っている行だけ残す。
next unless /^http:\/\/eri\.cheap\.jp\/thoughts\/archives.........htm$/ =~ href

puts (href)
}
(B)リストにある全てのページにある外部サイトへのリンクを確認して、リンク切れのリストを作る

# ライブラリ"hpricot"を使う。HTMLのタグごとにエレメンツに分ける。
require "hpricot"
# ライブラリ"open-uri"を使う。開いてHTMLを取る。
require "open-uri"

# ↓「linkcheck」メソッドを定義。「linkcheck」は入力したURLが200か調べる。
def linkcheck(url)
# puts url

# ライブラリ"URI"を使う。URLをホストとパス(前後)に分ける。
uri = URI.parse(url)

# ライブラリ"Net::HTTP"を使う。ステータス(200とか404とか)を調べる。
Net::HTTP.version_1_2
begin
Net::HTTP.start(uri.host, 80) {|http|
response = http.head(uri.request_uri)

# ステータスが"HTTPOK"(200)だったら"true"、それ以外は"false"を返す。
case response
when Net::HTTPOK
return true
else
return false
end
}

# ↓エラー処理
rescue SocketError
return false
end
# ↑エラー処理
end
# ↑「linkcheck」メソッド

# ↓「href_linkcheck」メソッドを定義。
# 渡された「line」はこのメソッド内では「page」(引数)として扱う。
def href_linkcheck(page)
# URLを「page」という名前にする。
# 「page」を開いて、HTMLのタグごとのエレメンツに分けたもの全体を「doc」という名前にして、
begin
doc = Hpricot(open(page))

# ↓エラー処理
rescue OpenURI::HTTPError
puts "404 not found " + page
return
end
# ↑エラー処理

# 各エレメンツの中で、<a>タグを探して「list」という名前にする。
list = doc.search('a')

# 「list」の1つずつを「link」と呼んで、
# 「link」の中の"href"属性を抜き出したものを「href」と呼ぶ。
list.each{|link|
href = link.get_attribute("href")

# <a>の中に"href"がなかったら次の<a>に行く(繰り返しの次へ)。
next unless href
# URLに「http://」が含まれているか(/ /で囲むと正規表現)
next unless /^http:\/\// =~ href
# URLに「http://eri.cheap.jp」が含まれているか(/ /で囲むと正規表現)
next if /^http:\/\/eri\.cheap\.jp/ =~ href

# 「href」に「linkcheck」する。結果が"true"の場合は次へ。
result = linkcheck(href)
next if result

# 「link」の中に文言か画像(子children)があるので取る。
# とりあえず子の一つ目だけ取って、文字列にする(.to_sで文字列に変換)
puts " " + link.children.first.to_s
puts " " + href
}

end
# ↑「href_linkcheck」メソッドここまで

# このプログラムに対する入力(ARGF)の各行を「line」という名前にして
ARGF.each do |line|

# その「line」を表示
puts "-----------------------------------"
puts line

# 「line」の最後の「\n」を削除し、「href_linkcheck」する
href_linkcheck(line.chomp)
end
8/19
,2007

森乃園茶房とデイリーポータルZまつり

[ おいしいもの | 写真 ]
森乃園茶房のパフェ人形町の森乃園茶房でパフェです。帝国ホテルとかに卸してるお茶屋さんだから、抹茶とほうじ茶が目当て。まず出された熱いほうじ茶がおいしい。私は麦茶とか香ばしいお茶は好きなので違いがよく分からないんだけど、けんはほうじ茶は飲んだ後のどに残る感じが好きじゃないのに、ここのは残らないんだって。「ほうじ茶は森乃園のものしか飲めませんの」

パフェは上に最中のってて、ほうじ茶アイス、抹茶アイス、白玉、ほうじ茶寒天、抹茶寒天、黒蜜といった感じ。ここのほうじ茶アイスはちゃんと甘くておいしい(都路里のほうじ茶アイスは甘くない)。けんは抹茶あんみつ。黒蜜じゃなくて濃い抹茶みつをかけます。豆は多くなくて、お茶を楽しむものらしい。余は満足じゃ。

そのあと、デイリーポータルZの@niftyが「東京カルチャーカルチャー」というライブハウスを始めて、そこで初めてのデイリーポータルZまつり。 

過去3年やってたBBフェスタのステージに飲食がついた感じのもの。ディナーショーっぽい。サイトは毎日見ててどのネタも分かるのですごいたのしい。深海鮫うずらの卵おでんがおいしかった。

いつも見てるライターさんがたくさんいて、お話ししてもらって、超うれしかった! しかも「かっこいいわにTシャツ」を着てべつやくさんとツーショット。わーい♪
8/14
,2007

よつばとスイカペンギンの消しゴムはんこ作った

[ 会社2002-2011 | かわいいもの | 消しゴムはんこ | | 写真 ]
よつば
スイカペンギン
あずまきよひこのサインのよつばを小さいのとスイカペンギンの顔を作ってみた。どっちも横幅1cm。よつばは手帳の「食事」のところに捺すんだ。前に2cmのよつばを作った時は、ずいぶん細かいの作れたと思ったけど、並べると大きいので成長を感じます。スイカペンギンはイマイチ。単純な線は少しでもずれるとちがう顔になるなあ。左上が欠けたし。

会社で虫さされが16ヶ所も!!! きたないので写真は自粛。きのうの朝に山道を散歩したせいかと思ったけど、きのう会社に来てからかゆくなったのできっとダニ。またダニアース借りました。前回すぐ効果あったので。
8/11
,2007

カメの消しゴムはんこ作った

[ かわいいもの | 消しゴムはんこ | 写真 ]
カメうちの会社は夏休みを一斉に取らないんだけど、かんちがいしたけん母から「お盆だけど、いつ来るの?」と言われて、じゃあ今日行こうかということになりました。ほんとは東向島のTOMTOMにピザを食べに行くところだったので、夕飯にピザをリクエスト。

最近の消しゴムはんこ作品を見せびらかしたので、カメを作って置いてきました。けん実家でカメをかってるの。 体長2.8cm。あとからよく見ると線がガタガタだ。
8/8
,2007

夜会巻き成功&みねとねこの消しゴムはんこ作った

[ かわいいもの | ファッション | 消しゴムはんこ | 写真 ]
夜会巻き後ろから 夜会巻き右から
めいすいくん 夜会巻きが最初何度かやってみてできなくて、しばらく放置して、今日やってみたらできた!買ったのは2月

前に作ったあずまきよひこのねこの大きいの(3.5cm)を作りました。初めて「はんけしくん」というナンシー関監修の消しゴムはんこ専用消しゴムを使ってみたの。さすが専用だけあって快い彫り心地。本物はおなかの札に「せんきょ」って書いてあるんだけど、あずまきよひこのオリジナルかと思ってたら実は元ネタがあった。

明るい選挙推進協会のイメージキャラクター「選挙のめいすいくん」でした。めいすいってなにさ、と思ったら、「『明』るい選挙『推』進協会」だって。投票箱がモチーフで、頭の2本線は投票用紙の挿入口だって。へえ。

みねゆち(妹)最愛のくじらのぬいぐるみのみねです。横からと前から。1.5cm。原画はゆち。
8/4
,2007

すごいかき氷と中華料理

[ おいしいもの | 写真 ]
氷生いちご 毛血旺
かき氷は目白の志むらにて。果肉入りのいちごシロップがいっぱいかかった「氷生いちご」。高さは25cmくらい。おいしかったものの、舌が肥えてきたのか、パラダイムの転換が起きたみつばちの氷あんずの方がいいなあなどと思う。

一駅移動して、池袋の知音(ちいん)食堂で「毛血旺」を食べました。血の固めたゼリー、もやし、モツっぽいものが入ったからい食べ物です。ちょーーからいんだけどおいしかった♪ 読み方がわからないのできのう聞いてくればよかった。シカゴの中華街でおいしかった「五更腸旺(ウーコンサンワン)」という、豚の腸、血の固めたゼリーみたいなのが入ったお鍋を食べたかったんだけど、日本の中華街では見つからなくて、四川料理コミュできいたら知音食堂の「毛血旺」が似てると教えてもらったの。私は大満足だったんだけど、けんは四川料理はお好みでない様子。次回一緒に行く人募集!