相対パスで記載されたURLから、絶対パスに変換する方法

  • どんなときに

open-uriなどで、HTMLページをクロールしたデータを、ローカルで開くと
デザインが崩れていたり、リンクをクリックしても思い通りのところへ飛べないことがあります。

これは、HTML内で相対パスで記載されているものを、そのまま取得しているからです。
そこで、相対パス絶対パスに変換したいのですが、
どのメソッドを使えばいいかわからなかったので、調べると、
標準添付ライブラリで可能だったので、メモしました。
(※URLではなく、ディレクトリの相対パス絶対パス変換は、File.expand_pathメソッドで実行可能です。)

  • 解法

標準添付のURIライブラリのmergeメソッドを使用する。

  • サンプル
#!/usr/local/bin/ruby
require 'uri'

uri = URI.parse('http://hoge.com/test/1234.html')

p uri.merge('/css/def.css').to_s
# => "http://hoge.com/css/def.css"

p uri.merge('../lib/script.js').to_s
# => "http://hoge.com/lib/script.js"

p uri.merge('./5678.html').to_s
# => "http://hoge.com/test/5678.html"

rexmlの使い方例メモ

rexmlは、rubyxml解析を行うためのライブラリで、
rubyに標準添付されています。

使い方の簡単なメモ(自己流なので、使い方が間違っているかもですが。。。)

  • こんなxml文書(tmp.xml)あったとする。
<?xml version="1.0" encoding="utf-8"?>
<rss version="2.0" xmlns:dc="http://purl.org/dc/elements/1.1/" xmlns:content="http://purl.org/rss/1.0/modules/content/" xmlns:opensearch="http://a9.com/-/spec/opensearch/1.1/" xml:lang="ja">
  <channel>
    <item>
      <title>ラッキー☆ちゃんねる </title>
      <link>http://www.lucky-ch.com/weekly/070827.html</link>
      <description>かがみんは俺の嫁</description>
      <pubDate>Sun, 17 Feb 2008 11:07:22 +0900</pubDate>
      <author>utadaq</author>
      <dc:subject>lucky-star</dc:subject>
      <dc:subject>kagamin</dc:subject>
      <dc:subject>京アニ</dc:subject>
      <dc:subject>next</dc:subject>
    </item>
    <item>
      <title>viプラグイン - EclipseWiki</title>
      <link>http://eclipsewiki.net/eclipse/index.php?vi%A5%D7%A5%E9%A5%B0%A5%A4%A5%F3</link>
      <description></description>
      <pubDate>Sun, 13 Jan 2008 01:00:34 +0900</pubDate>
      <author>utadaq</author>
      <dc:subject>vi</dc:subject>
      <dc:subject>eclipse</dc:subject>
    </item>
  </channel>
</rss>
#! /bin/ruby
$KCODE = 'u'

require 'rexml/document'


rss = open('tmp.xml').read
doc = REXML::Document.new(rss)
elem = REXML::XPath.match(doc,'/rss/channel//item')

elem.each_with_index do |e,i|
  p "------------- #{i} -------------"
  e.each_element('title') do |title|
    p "title:#{title.text}"
  end
  e.each_element('dc:subject') do |tag|
    p "tag  :#{tag.text}"
  end
end
  • 実行結果
"------------- 0 -------------"
"title:ラッキー☆ちゃんねる "
"tag  :lucky-star"
"tag  :kagamin"
"tag  :京アニ"
"tag  :next"
"------------- 1 -------------"
"title:viプラグイン - EclipseWiki"
"tag  :vi"
"tag  :eclipse"

XPathの指定方法については、以下のサイトを参考にさせていただきました。
http://www.nextindex.net/java/XML/XPath.html
(プログラムはJavaですが、XPathがどういうものなのかの説明がわかりやすいです)

rails2.0では、setupメソッドがうまく呼ばれないバグがある

http://jijixi.azito.com/cgi-bin/diary/index.rb?date=20071221
な、なんだってー
うまくいかずに、setupに書くべき部分をそれぞれのテストメソッドの先頭に書いて
DRYじゃないなぁと気持ち悪い思いをしていた俺涙目ww


こんなソース書いてた(毎回、おなじみのquentinさんでloginしてた)

  def setup
  end

  def test_should_get_index
    login_as('quentin')
    get :index
    assert_response :success
  end

vimで保存したときにFirefoxを自動リロード

http://d.hatena.ne.jp/spiritloose/20061002/1159783126
に記載されているahkスクリプトで基本は大丈夫なのだけど、
自分の環境だとvimperatorを使っている環境上?windowsのタスクバーに出るFierfoxの表示が
"Mozilla Firefox" ではなく単に "Firefox"になっているので、うまく動かなかった。
(この"Firefox"は確か自分で設定した記憶が。vimperator入れると、デフォルトは"vimperator"がタスクバー上の表示になったきがした)

対処方法。

:*B0C::w`n::
SetTitleMatchMode, 2
WinGet, FF,, Firefox
ControlSend,, {F5}, ahk_id %FF%

3行目を変えただけです。

http://www.autohotkey.com/