shigemk2/hate-da-deploy · GitHub
「管理ページ→デザイン→詳細」でCSSやヘッダー、フッターを直接弄ることがあるのだけれど、 毎回ブラウザで操作するのが面倒なんすよ。
CSSとかがバージョン管理できないから「あれ、前に編集したCSSってどんなだったっけ?」ってなるし、かといってローカルでバージョン管理するならコマンド1つでCSSとか反映できるように自動化したいっていうのが人情ですよ。
しかし、はてなダイアリーのCSSやヘッダーを直接弄るAPIは用意されていないので、 ローカルでファイルを弄って、コマンド1つでCSSやヘッダーを反映させるようにしました。
そのためのツールとしてwatirを使いました。
Rubyでブラウザを操作できるGem watir - 酒と泪とRubyとRailsと
watirでブラウザを操作してログインしたり、フォームに投稿したりできるわけですね。
本来はテスト用のツールのはずですが、
実際にブログの投稿もwatirで出来たりするので、
CSSやヘッダーの修正をwatirでやることにしました。
Watir.com | Web Application Testing in Ruby
# coding: utf-8 require 'bundler' Bundler.require require 'yaml' # yamlファイル読み込み yaml = YAML.load_file "hatena.yaml" # ログイン browser = Watir::Browser.new :ff browser.goto(yaml["login_url"]) element = browser.text_field(:id, "login-name") element.flash element.value = yaml["user_id"] element = browser.text_field(:class, "password") element.flash element.value = yaml["password"] element = browser.button(:class, "custom-button") element.flash element.click browser.wait # デザインページへアクセス browser.goto(yaml["detail_url"]) # ヘッダーを編集 header = File.open("hatena-header.html", "r") element = browser.text_field(:id, "textarea1") element.flash element.value = header.read.encode("utf-8") header.close # フッターを編集 footer = File.open("hatena-footer.html", "r") element = browser.text_field(:id, "textarea2") element.flash element.value = footer.read.encode("utf-8") footer.close # CSSを編集 css = File.open("hatena.css", "r") element = browser.text_field(:id, "textarea3") element.flash element.value = css.read.encode("utf-8") css.close element = browser.button(:name, "save") element.flash element.click browser.goto(yaml["top_url"]) puts browser.url
id名とかclass名とかはデベロッパーツールでサーチします。
開発にあたってのハマりどころはココ。
というか、フォームに投稿する部分。
へたれたプログラマの憂鬱 watirその2
ruby 1.8 watir 文字化け - 電波素子は電気執事の夢を見るか?
header = File.open("hatena-header.html", "r") element = browser.text_field(:id, "textarea1") element.flash element.value = header.read.encode("utf-8") header.close
フォームに日本語を投稿すると文字化けするんすよね。
シバンにutf-8って書くとか、
フォームに投稿する前に読み込んだ文字列をutf-8に変換するとかいろいろやったんだけど、
utf-8に変換したうえで、実行するブラウザをChromeからFirefoxに変えると文字化けせずに
ちゃんと投稿できました。なんでだろう。