WindowsにRuby-1.9.2-p0とRuby on Rails 3をインストールする

Ruby-1.9.2のインストール

One-Click Ruby Installer for Windows

  1. One-Click Ruby Installer for Windowsのダウンロードページ2010-09-14時点で最新のRuby 1.9.2-p0をダウンロード。
  2. ダウンロードした「rubyinstaller-1.9.2-p0.exe」をダブルクリックし「実行」、「Next」を押していけばインストール完了。
    ※インストールフォルダは「C:\ruby」に変更、「Add Ruby executables to your PATH」「Associate ,rb and ,rbw files with Ruby installation」の2つにチェックを入れる。

Ruby on Rails3のインストール

  1. コマンドプロンプトで以下のように入力。
    gem  i rails
    

SQLite3のDLLのインストール

  1. コマンドプロンプトで以下のように入力。
    gem  i sqlite3-ruby
    
  2. sqlitedll-3_7_2.zipをダウンロード→解凍すると「sqlite3.def」「sqlite3.dll」の2つのファイルが現れるので、「sqlite3.dll」を「C:\ruby\bin」へコピー。

以上で、Ruby1.9.2とRuby on rails 3が使えるようになります。

【Ruby1.9】msvcrt-ruby18.dll が見つからなかったため、このアプリケーションを開始できませんでした。・・・とエラーが。。。

あるruby1.9スクリプトを実行したら、

msvcrt-ruby18.dll が見つからなかったため、このアプリケーションを開始できませんでした。・・・

という、ダイアログボックスで出た!
ウゼーということで、ぐぐったら、同じ問題を解決した人を発見!

突然「msvcrt-ruby18.dllが見つからなかったため…」になった時の対処方法 – aki note

gemインストールしたjsonが原因ということなので、自分のgemの一覧をみてみた。
コマンドプロンプトから

gem list

json(1.4.6 x86-mswin32)があったので、それをアンインストールしてみた。
コマンドプロンプトから、

gem uninstall json

で、解決しましたw

【Ruby1.9】「~」が変換時エラーになっちゃう場合の解決策!U+FF5E from UTF-8 to Shift_JIS (Encoding::UndefinedConversionError)

最近Windows環境でスクレイピングしてて、「~」をShift_JISに変換すると、やたら

U+FF5E from UTF-8 to Shift_JIS (Encoding::UndefinedConversionError)

エラー連発するんで、の「U+FF5E」を手がかりにぐぐったら見つけました!

Route 477 – Ruby 1.9と波ダッシュ問題に関するメモ

波ダッシュ問題というらしい。。。

「~」をShift_JISに変換

# -*- coding: utf-8 -*-
str = '~'
puts str.encoding
puts str.encode 'Shift_JIS'
encode': U+FF5E from UTF-8 to Shift_JIS (Encoding::UndefinedConversionError)

解決策は、Shift_JISをWindows-31Jにする!

「~」をWindows-31Jに変換

# -*- coding: utf-8 -*-
str = '~'
puts str.encoding
puts str.encode 'Windows-31J'
UTF-8
~

ここまで数日を費やしました。。。

【Ruby1.9】HTMLパーサNokogiriの文字化けに苦しむ。。。

AppleのMac整備済製品のページをスクレイピングして、WordPressのウィジェットを作ろうとしているんですが、文字化けの壁に数日阻まれています。。。
いろいろ調べてるんですが、うまくいきませんねぇ~(涙)

環境

  • ruby 1.9.2dev(2010-07-11 revision 28618) [i386-mswin32]
  • nokogiri: 1.4.2.1
# -*- coding: utf-8 -*-

require 'open-uri'
require 'nokogiri'

url = 'http://store.apple.com/jp/browse/home/specialdeals/mac'
doc = Nokogiri::HTML.parse(open(url))

doc.css("td.specs h3 a").each do |t|
  tt = Marshal.dump(t.text)
  puts tt
  puts tt.encoding
end

AppleのページはUTF-8で、NokogoriもUTF-8に自動変換するみたいな記事をみつけて問題ないと思ったら。。。

I"
                            MacBook Pro 17テ」ツつ、テ」ツδウテ」ツδ・2.8GHz Intel Core 2
 Duo / テゥツ敖榲・ツ・嘉ヲツイツ「テ」ツδッテ」ツつ、テ」ツδ嘉」ツつケテ」ツつッテ」ツδェテ」ツδシテ」ツδウテ」ツδ・
」ツつ」テ」ツつケテ」ツδ療」ツδャテ」ツつ、 / USテ」ツつュテ」ツδシテ」ツδ愿」ツδシテ」ツδ・[テヲツ閉エテ・ツつ凖ヲ
ツクツ暗ィツ」ツステ・ツ督‐
                        :ET
ASCII-8BIT
I"・
                            MacBook Pro 17テ」ツつ、テ」ツδウテ」ツδ・3.06GHz Intel Core
2 Duo [テヲツ閉エテ・ツつ凖ヲツクツ暗ィツ」ツステ・ツ督‐
                        :ET
ASCII-8BIT

文字コードが「ASCII-8BIT」になってるから、むりやり「force_encoding」しちゃえとおもって、
11行目を

  puts tt.force_encoding 'Shift_JIS'

ってやると、

I"
                            MacBook Pro 17テ」ツつ、テ」ツδウテ」ツδ・2.8GHz Intel Core 2
 Duo / テゥツ敖榲・ツ・嘉ヲツイツ「テ」ツδッテ」ツつ、テ」ツδ嘉」ツつケテ」ツつッテ」ツδェテ」ツδシテ」ツδウテ」ツδ・
」ツつ」テ」ツつケテ」ツδ療」ツδャテ」ツつ、 / USテ」ツつュテ」ツδシテ」ツδ愿」ツδシテ」ツδ・[テヲツ閉エテ・ツつ凖ヲ
ツクツ暗ィツ」ツステ・ツ督‐
                        :ET
Shift_JIS
I"・
                            MacBook Pro 17テ」ツつ、テ」ツδウテ」ツδ・3.06GHz Intel Core
2 Duo [テヲツ閉エテ・ツつ凖ヲツクツ暗ィツ」ツステ・ツ督‐
                        :ET
Shift_JIS

今度はUTF-8で「force_encoding」するとどうだと思って

  puts tt.force_encoding 'Shift_JIS'

やってみると、

I"
                            MacBook Pro 17テ」ツつ、テ」ツδウテ」ツδ・2.8GHz Intel Core 2
 Duo / テゥツ敖榲・ツ・嘉ヲツイツ「テ」ツδッテ」ツつ、テ」ツδ嘉」ツつケテ」ツつッテ」ツδェテ」ツδシテ」ツδウテ」ツδ・
」ツつ」テ」ツつケテ」ツδ療」ツδャテ」ツつ、 / USテ」ツつュテ」ツδシテ」ツδ愿」ツδシテ」ツδ・[テヲツ閉エテ・ツつ凖ヲ
ツクツ暗ィツ」ツステ・ツ督‐
                        :ET
UTF-8
I"・
                            MacBook Pro 17テ」ツつ、テ」ツδウテ」ツδ・3.06GHz Intel Core
2 Duo [テヲツ閉エテ・ツつ凖ヲツクツ暗ィツ」ツステ・ツ督‐
                        :ET
UTF-8

んん~、うまくいきませんねぇ、、、

【Ruby1.9】HTMLパーサNokogiriでリンク(href属性)の値を抜き出す!

HTMLパーサNokogiri使ってると、いつもリンク(href属性)の値の抜き出し方忘れちゃうのでメモ。

たとえば「http://gururan.com/」のリンク、つまりhref属性の値「http://gururan.com/1/」「http://gururan.com/2/」「http://gururan.com/3/」、を抜き出したいとします。

 <h3><a href="http://gururan.com/1/">ぐるらんのリンク1</a></h3>
 <h3><a href="http://gururan.com/2/">ぐるらんのリンク2</a></h3>
 <h3><a href="http://gururan.com/3/">ぐるらんのリンク3</a></h3>

で、こう書くとうまくいきますw

# -*- coding: utf-8 -*-
require 'open-uri'
require 'nokogiri'

url = 'http://gururan.com/'
@doc = Nokogiri::HTML(open(url))
@doc.css("h3 a").each {|link| puts link[:href]}

いつも7行目をいつも「@doc.css(“h3 a[:href]“).each {|link| puts link}」にして、はまっちゃいます(涙)。。。