Hatena::Grouprubyist

yuichi_katahiraのRuby日記 このページをアンテナに追加 RSSフィード

2008-05-12

よく忘れるので

| 16:50 | よく忘れるので - yuichi_katahiraのRuby日記 を含むブックマーク はてなブックマーク - よく忘れるので - yuichi_katahiraのRuby日記 よく忘れるので - yuichi_katahiraのRuby日記 のブックマークコメント

時刻 time を [RFC1123] フォーマットに準拠した文字列に変換。

require 'cgi'
CGI.rfc1123_date(Time.now)
 # => Sat, 1 Jan 2000 00:00:00 GMT

2008-04-07

文字実体参照ってどういう場面で出てくるんだろ?

| 09:04 | 文字実体参照ってどういう場面で出てくるんだろ? - yuichi_katahiraのRuby日記 を含むブックマーク はてなブックマーク - 文字実体参照ってどういう場面で出てくるんだろ? - yuichi_katahiraのRuby日記 文字実体参照ってどういう場面で出てくるんだろ? - yuichi_katahiraのRuby日記 のブックマークコメント

昨日、Twitterで、Rubyで実体参照文字列を普通の文字に戻すのはどうするのってなつぶやきが。

" とか & とか < かなと思って

require 'cgi'
CGI.unescapeHTML("&lt;")

とreply


そしたら「日本語が実体参照文字列化されていてそれを戻したい」って事らしい。

適切に文字コードを設定すればOKって事で

require 'cgi'
$KCODE='u' #UTF-8の場合
CGI.unescapeHTML("&#x3042;")

とか


NKF.nkf(opt,CGI.unescapeHTML("&#x3042;")) 

とか使えばOKではって返して終了したんだけど・・

Railsで出くわしたことはないのですが、Ruby使ってると出くわすことあるのかな?

こういう状態になってるstringが渡されるって、主にどういう場面で出てくるんだろうという興味が。

教えてエロイ人!

yyamasakyyamasak2008/04/08 20:52おじゃまします。もっと早く知っていれば・・・

つい最近RailsでXMLのAPIを作ろうとしたとき、

render :xml=>User.find(:first).to_xml

とかやるとXMLのレスポンスが返ると知ったんですけど、テキストノードが実体参照文字列になっていて
読めないといわれたことがありました。

最初は無理やり戻すメソッドをどっかから拾って来る。
class String
def xml_unescape
gsub(/(?:&#\d+;)+/){|s| s.split(/&#|;/).reject(&:blank?).map(&:to_i).pack('U*')}
end
end

でもやっぱりそもそも変換して戻すなんて無駄だからActiveRecordのメソッドを上書き。
class String
def to_xs
self
end
end

なんてことをしていました。

yuichi_katahirayuichi_katahira2008/04/09 09:38>yyamasakさん
マジですか!!おお、本当だ・・。
そういえばto_xml使ったことなかったです。
こんな身近な所にあったなんて・・・。
ありがとうございます。

2008-03-31

日程調整アプリを作ろうバックアップ

| 18:54 | 日程調整アプリを作ろうバックアップ - yuichi_katahiraのRuby日記 を含むブックマーク はてなブックマーク - 日程調整アプリを作ろうバックアップ - yuichi_katahiraのRuby日記 日程調整アプリを作ろうバックアップ - yuichi_katahiraのRuby日記 のブックマークコメント

日程調整アプリをつくろうも、回を重ねてだんだん増えてきたので、ローカルにwikiのバックアップを取っておく事に。

エンコーディングは、CotEditorやVimで見るので、そのままeucでいいや。

#!/opt/local/bin/ruby                                                                                                                                     
require 'open-uri'                                                                                                                                              
require 'rubygems'                                                                                                                                              
require 'hpricot'                                                                                                                                               
                                                                                                                                                                
date =Time.now.strftime("%Y-%m-%d")                                                                                                                             
                                                                                                                                                                
urls=%w(                                                                                                                                                        
http://wiki.fdiary.net/rails/?c=edit;p=AdjusterTutorial                                                                                                         
http://wiki.fdiary.net/rails/?c=edit;p=AdjusterTutorial-0001                                                                                                    
http://wiki.fdiary.net/rails/?c=edit;p=AdjusterTutorial-0002                                                                                                    
http://wiki.fdiary.net/rails/?c=edit;p=AdjusterTutorial-0003                                                                                                    
http://wiki.fdiary.net/rails/?c=edit;p=AdjusterTutorial-0004                                                                                                    
http://wiki.fdiary.net/rails/?c=edit;p=AdjusterTutorial-0005                                                                                                    
http://wiki.fdiary.net/rails/?c=edit;p=AdjusterTutorial-0006                                                                                                    
http://wiki.fdiary.net/rails/?c=edit;p=AdjusterExtension-0001                                                                                                   
)                                                                                                                                                               
wikifile="/Users/user_acount/Documents/path/to/wiki-#{date}.txt"                                                                              
File.open(wikifile,"w") {|file| file.puts "AdjusterTutorial-backup"}                                                                                            
urls.each do |url|                                                                                                                                              
doc = Hpricot(open(url).read)                                                                                                                                   
title=doc.at("input[@name='page_title']")['value']                                                                                                              
body=doc.at("textarea[@name='contents']").inner_text                                                                                                            
File.open(wikifile,"a") {|file|                                                                                                                                 
  file.puts title                                                                                                                                               
  file.puts body                                                                                                                                                
}                                                                                                                                                               
end 

Hpricotお手軽だなー。