<?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:at="http://www.sixapart.com/ns/at"
    xmlns:icbm="http://postneo.com/icbm"
    xmlns:rvw="http://purl.org/NET/RVW/0.2/"
    xmlns:media="http://search.yahoo.com/mrss">
    <channel>
        <title>バイトのメモなど</title>
        <link>http://takumi.vox.com/library/posts/2007/01/page/1/</link>
        <description>あと、買った本とか</description>
        <language>en</language>
        <generator>Vox</generator>
        <lastBuildDate>Mon, 15 Jan 2007 17:25:32 +0900</lastBuildDate>
        <copyright>Copyright 2007</copyright>
        <docs>http://blogs.law.harvard.edu/tech/rss</docs>  
 
        <item>
            <title>to_absolute_uriをＶB６で</title>
            <link>http://takumi.vox.com/library/post/to_absolute_uri%E3%82%92%EF%BD%82%EF%BD%96%EF%BC%96%E3%81%A7.html?_c=feed-rss-full</link>   
            <author>nobody@vox.com(takumi)</author>
            <comments>http://takumi.vox.com/library/post/to_absolute_uri%E3%82%92%EF%BD%82%EF%BD%96%EF%BC%96%E3%81%A7.html?_c=feed-rss-full</comments>
            <guid isPermaLink="true">http://takumi.vox.com/library/post/to_absolute_uri%E3%82%92%EF%BD%82%EF%BD%96%EF%BC%96%E3%81%A7.html?_c=feed-rss-full</guid> 
            <pubDate>Mon, 15 Jan 2007 17:25:32 +0900</pubDate>         
            
            <description>    &lt;pre&gt;VB6で下のコードを動かすと、getメソッドが無いって怒られる。&lt;br /&gt;既存のWWW::Mechanizeに定義を追加するのではなくて、新しいWWW::Mechanizeを作り出している。&lt;br /&gt;&lt;pre&gt;&lt;br /&gt;require &amp;quot;rubygems&amp;quot;&lt;br /&gt;require &amp;quot;mechanize&amp;quot;&lt;br /&gt;&lt;br /&gt;module WWW&lt;br /&gt;&amp;#160;&amp;#160; class Mechanize&lt;br /&gt;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160; def to_absolute_uri(url, cur_page=current_page())&lt;br /&gt;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160; url =&amp;#160; URI.parse(&lt;br /&gt;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160; Util.html_unescape(url.to_s.strip)&lt;br /&gt;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160; ) unless url.is_a? URI&lt;br /&gt;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160; &lt;br /&gt;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160; # construct an absolute uri&lt;br /&gt;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160; if url.relative?&lt;br /&gt;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160; raise &amp;#39;no history. please specify an absolute URL&amp;#39; unless cur_page.uri&lt;br /&gt;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160; url = cur_page.uri + url&lt;br /&gt;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160; end&lt;br /&gt;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160; &lt;br /&gt;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160; return url&lt;br /&gt;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160; end&lt;br /&gt;&amp;#160;&amp;#160; end&lt;br /&gt;end&lt;br /&gt;agent = WWW::Mechanize.new&lt;br /&gt;agent.user_agent_alias=&amp;#39;Windows Mozilla&amp;#39;&lt;br /&gt;puts agent.get(&amp;quot;http://ja.wikipedia.org/wiki/%E3%83%A1%E3%82%A4%E3%83%B3%E3%83%9A%E3%83%BC%E3%82%B8&amp;quot;).body&lt;br /&gt;&lt;/pre&gt; &lt;br /&gt;で、&lt;br /&gt;&lt;pre&gt;&lt;br /&gt;module WWW&lt;br /&gt;   class Mechanize&lt;br /&gt;   end&lt;br /&gt;end&lt;br /&gt;&lt;/pre&gt;&lt;br /&gt;を&lt;br /&gt;&lt;pre&gt;&lt;br /&gt;class WWW::Mechanize&lt;br /&gt;end&lt;br /&gt;&lt;/pre&gt;&lt;br /&gt;に変更したら動いた。何でだ？&lt;br /&gt;&lt;/pre&gt;     &lt;p style=&quot;clear:both;&quot;&gt; 
    &lt;a href=&quot;http://takumi.vox.com/library/post/to_absolute_uri%E3%82%92%EF%BD%82%EF%BD%96%EF%BC%96%E3%81%A7.html?_c=feed-rss-full#comments&quot;&gt;Read and post comments&lt;/a&gt;   |   
    &lt;a href=&quot;http://www.vox.com/share/6a00c22522e8d9604a00cdf7f3e09d094f?_c=feed-rss-full&quot;&gt;Send to a friend&lt;/a&gt; 
&lt;/p&gt;
 
            </description>   
        </item> 
 
        <item>
            <title>to_absolute_uri</title>
            <link>http://takumi.vox.com/library/post/to_absolute_uri.html?_c=feed-rss-full</link>   
            <author>nobody@vox.com(takumi)</author>
            <comments>http://takumi.vox.com/library/post/to_absolute_uri.html?_c=feed-rss-full</comments>
            <guid isPermaLink="true">http://takumi.vox.com/library/post/to_absolute_uri.html?_c=feed-rss-full</guid> 
            <pubDate>Fri, 12 Jan 2007 18:14:36 +0900</pubDate>         
            
            <description>    &lt;p&gt;rubyのmechanizeで日本語が通らない。&lt;br /&gt;&lt;pre&gt;&lt;br /&gt;# sample.rb&lt;br /&gt;require &amp;quot;rubygems&amp;quot;&lt;br /&gt;require &amp;quot;mechanize&amp;quot;&lt;br /&gt;&lt;br /&gt;agent = WWW::Mechanize.new&lt;br /&gt;agent.user_agent_alias=&amp;#39;Windows Mozilla&amp;#39;&lt;br /&gt;agent.get(&amp;quot;http://ja.wikipedia.org/wiki/%E3%83%A1%E3%82%A4%E3%83%B3%E3%83%9A%E3%83%BC%E3%82%B8&amp;quot;)&lt;br /&gt;&lt;/pre&gt;&lt;br /&gt;これを実行すると&lt;br /&gt;&lt;pre&gt;&lt;br /&gt;&amp;gt;ruby sample.rb&lt;br /&gt;ruby sample.rb&lt;br /&gt;C:/opt/ruby-1.8/lib/ruby/1.8/uri/common.rb:432:in `split&amp;#39;: bad URI(is not URI?): http://ja.wikipedia.org/wiki/繝｡繧､繝ｳ繝壹・繧ｸ (URI::InvalidURIError)&lt;br /&gt;&amp;#160;&amp;#160;&amp;#160; from C:/opt/ruby-1.8/lib/ruby/1.8/uri/common.rb:481:in `parse&amp;#39;&lt;br /&gt;&amp;#160;&amp;#160;&amp;#160; from C:/opt/ruby-1.8/lib/ruby/gems/1.8/gems/mechanize-0.6.4/lib/mechanize.rb:272:in `to_absolute_uri&amp;#39;&lt;br /&gt;&amp;#160;&amp;#160;&amp;#160; from C:/opt/ruby-1.8/lib/ruby/gems/1.8/gems/mechanize-0.6.4/lib/mechanize.rb:141:in `get&amp;#39;&lt;br /&gt;&amp;#160;&amp;#160;&amp;#160; from sample.rb:6&lt;br /&gt;&lt;/pre&gt;&lt;br /&gt;例外はmechanize.rbのto_absolute_uriというメソッドから。&lt;br /&gt;&lt;pre&gt;&lt;br /&gt;#コード&lt;br /&gt;&amp;#160; def to_absolute_uri(url, cur_page=current_page())&lt;br /&gt;&amp;#160;&amp;#160;&amp;#160; url =&amp;#160; URI.parse(&lt;br /&gt;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160; URI.unescape(Util.html_unescape(url.to_s.strip)).gsub(/ /, &amp;#39;%20&amp;#39;)&lt;br /&gt;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160; ) unless url.is_a? URI&lt;br /&gt;&lt;br /&gt;&amp;#160;&amp;#160;&amp;#160; # construct an absolute uri&lt;br /&gt;&amp;#160;&amp;#160;&amp;#160; if url.relative?&lt;br /&gt;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160; raise &amp;#39;no history. please specify an absolute URL&amp;#39; unless cur_page.uri&lt;br /&gt;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160; url = cur_page.uri + url&lt;br /&gt;&amp;#160;&amp;#160;&amp;#160; end&lt;br /&gt;&lt;br /&gt;&amp;#160;&amp;#160;&amp;#160; return url&lt;br /&gt;&amp;#160; end&lt;br /&gt;&lt;/pre&gt;&lt;/p&gt;&lt;p&gt;urlを&lt;br /&gt;url　→　htmlでunescapeしたurl　→　htmlでunescapeしたurlをuriでunescapeしたurl&lt;br /&gt;→　htmlでunescapeしたurlをuriでunescapeしたurlの空白文字を%20に置換したurl&lt;br /&gt;と変更を繰り返してる。&lt;/p&gt;&lt;p&gt;ところで、なぜいったんURI.unescapeしたあと空白文字を%20に置換しているんだ？&lt;br /&gt;これなら、&lt;br /&gt;url　→　htmlでunescapeしたurl&lt;br /&gt;で、いいはずなのに。&lt;/p&gt;&lt;p&gt;実際にto_absolute_uriのurlの部分を&lt;br /&gt;&lt;pre&gt;&lt;br /&gt;&amp;#160;&amp;#160;&amp;#160; url =&amp;#160; URI.parse(&lt;br /&gt;           URI.unescape(Util.html_unescape(url.to_s.strip)).gsub(/ /, &amp;#39;%20&amp;#39;)&lt;br /&gt;                     ) unless url.is_a? URI&lt;br /&gt;&lt;/pre&gt;&lt;br /&gt;から&lt;br /&gt;&lt;pre&gt;&lt;br /&gt;&amp;#160;&amp;#160;&amp;#160; url =&amp;#160; URI.parse(&lt;br /&gt;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160; Util.html_unescape(url.to_s.strip)&lt;br /&gt;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160; ) unless url.is_a? URI&lt;br /&gt;&lt;/pre&gt;&lt;br /&gt;を変更すると、上のsample.rbが動作する。&lt;/p&gt;&lt;p&gt;Mechanizeのメーリングリストを見てみると、このto_absolute_uriって変更要望がたくさん出ているんだよなぁ。。。&lt;/p&gt;&lt;p&gt;追記&lt;br /&gt;既存のものを再定義すればいいわけだから、これでとりあえずしのげた。&lt;br /&gt;&lt;pre&gt;&lt;br /&gt;require &amp;quot;rubygems&amp;quot;&lt;br /&gt;require &amp;quot;mechanize&amp;quot;&lt;br /&gt;&lt;br /&gt;module WWW&lt;br /&gt;&amp;#160;&amp;#160; class Mechanize&lt;br /&gt;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160; def to_absolute_uri(url, cur_page=current_page())&lt;br /&gt;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160; url =&amp;#160; URI.parse(&lt;br /&gt;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160; Util.html_unescape(url.to_s.strip)&lt;br /&gt;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160; ) unless url.is_a? URI&lt;br /&gt;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160; &lt;br /&gt;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160; # construct an absolute uri&lt;br /&gt;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160; if url.relative?&lt;br /&gt;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160; raise &amp;#39;no history. please specify an absolute URL&amp;#39; unless cur_page.uri&lt;br /&gt;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160; url = cur_page.uri + url&lt;br /&gt;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160; end&lt;br /&gt;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160; &lt;br /&gt;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160; return url&lt;br /&gt;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160; end&lt;br /&gt;&amp;#160;&amp;#160; end&lt;br /&gt;end&lt;br /&gt;agent = WWW::Mechanize.new&lt;br /&gt;agent.user_agent_alias=&amp;#39;Windows Mozilla&amp;#39;&lt;br /&gt;puts agent.get(&amp;quot;http://ja.wikipedia.org/wiki/%E3%83%A1%E3%82%A4%E3%83%B3%E3%83%9A%E3%83%BC%E3%82%B8&amp;quot;).body&lt;br /&gt; &lt;/pre&gt;&lt;/p&gt;    &lt;p style=&quot;clear:both;&quot;&gt; 
    &lt;a href=&quot;http://takumi.vox.com/library/post/to_absolute_uri.html?_c=feed-rss-full#comments&quot;&gt;Read and post comments&lt;/a&gt;   |   
    &lt;a href=&quot;http://www.vox.com/share/6a00c22522e8d9604a00d09e4ca563be2b?_c=feed-rss-full&quot;&gt;Send to a friend&lt;/a&gt; 
&lt;/p&gt;
 
            </description>   
        </item> 
    </channel>
</rss>

