はてなのテーマ

体調は下降ぎみだったが、持ち直してきたのもあり、テーマを変更してみるかと思い立つ。
テーマの変更をしようと思っても、文字列が並んでばっかりでイメージが無い(調べ方が悪いのかな?)。なので、どんなのがあるのかの概観が解からない。一つ一つ試すのも大変なのでどうしたものかと考えていた。

結論としてはこんな風に表示して、それぞれのサムネイルを表示させて選ぶことができた。特に凝ったことはしていないので、テーマ名などが解かりやすいわけではないが、どんな風なのがあるのか確認できた。


ということで、簡単にやったこと。

テーマのサンプル画面は認証が必要ないみたいなので、あとはキャプチャができればいい。色々Webを探して、CrenaHtml2jpg というアプリが良さそうだったのでこれを利用することにした。このアプリは、コマンドラインも対応しているあたりが使いやすそう。また、以前に Ruby を入れたのでそれを利用して、テーマの一覧から、サンプルページのURLを作成することにした。

付属の perl を元に Ruby でのスクリプトを書いてみる。

#
#
# Create theme thumbnails
#
#
require 'net/http'


STORE_DIR='D:\\tmp\\theme\\'
img_file = "hatena.jpg"
url = "http://www.hatena.ne.jp"
format = "jpeg"
window_size = "800x600"
save_width = "200"
save_height = "150"
save_size = "#{save_width}x#{save_height}"
quality = "92"
timeout = "25"

proc_timeout = "30"

HATENA_DIARY_DOMAIN = 'd.hatena.ne.jp'
HATENA_THEMESAMPLE_PATH = '/themesample'
HATENA_GET_THEMES_PATH = "#{HATENA_THEMESAMPLE_PATH}?hatena"
HATENA_THEME_URL = "http://#{HATENA_DIARY_DOMAIN}#{HATENA_THEMESAMPLE_PATH}?"


File.open("#{STORE_DIR}index.html", "w") do |file|
  file.print("<html><head><title>Theme thumbnails for Hatena diary</title></head><body>\n")

  Net::HTTP.start(HATENA_DIARY_DOMAIN, 80) do |http|
    response = http.get(HATENA_GET_THEMES_PATH)
    response.body.scan(/<option\s+value=\"([^\"]+)\"\s*>([^<]+)<\/\s*option\s*>/) do |s|

      img_file = "#{s[0]}.#{format}"
      url = "#{HATENA_THEME_URL}#{s[0]}"
      title = "#{s[1]}"

      cmd_line="CrenaHtml2jpg.exe -o#{STORE_DIR}#{img_file} -f#{format} -w#{window_size}" \
        " -s#{save_size} -q#{quality} -t#{timeout} -h0 -f -u#{url}"

      if !FileTest.exist?("#{STORE_DIR}#{img_file}")
        puts "Processing #{url} ..."
        `proccmd -w #{proc_timeout} -c "#{cmd_line}"`
      else
        puts "#{img_file} exists. Skip #{url} ..."
      end

      file.print("<a href=\"#{url}\" target=\"hatena-theme\"><img border=\"0\" src=\"#{img_file}\"")
      file.print(" width=\"#{save_width}\" height=\"#{save_height}\" alt=\"#{title}\">")
      file.print("</img></a>\n")
    end
  end

  file.print("</body></html>\n")
end

STORE_DIRに適当なディレクトリを入れてやれば、そこに保存される。時々、エラー(Proxyなんとかだったと思う)になることがあるので、その場合は、その画像だけ削除して実行すれば、その画像だけ作ってくれると思う。

(作成するHTMLは、いい加減だけど)サムネイルが表示できたら、あとはその名前を調べて(リンクを辿ればサンプルページに行く)、自分のテーマに利用すればいいかなと。


参考: