OpenURI
ドキュメント:
library open-uri | Ruby リファレンスマニュアル [公式]
使い方
参考:
open-uri による Web クローリング入門 | 株式会社ルーター
Ruby で Web 上からファイルをダウンロードする | UX MILK
URL を開く
URI.open
を使う。
※ Kernel.#open
の拡張は Ruby 2.7 で廃止された。Ruby 2.7 以降では、URI.open
を使う。
require "open-uri"
URI.open("https://example.com/") do |f|
# ...
end
Code language: Ruby (ruby)
URI.parse
を使う。
require "open-uri"
URI.parse("https://example.com/").open do |f|
# ...
end
Code language: Ruby (ruby)
参考:
Ruby で warning: calling URI.open via Kernel#open is deprecated, … が出る対策 | あれやこれやの日々
Ruby 2.7 で発生する「プロを目指す人のための Ruby 入門」との差異について – Qiita
URI.open | Ruby リファレンスマニュアル [公式]
OpenURI.open_uri | Ruby リファレンスマニュアル [公式]
OpenURI::OpenRead#open | Ruby リファレンスマニュアル [公式]
Rails fetch URL – Stack Overflow
open の戻り値
open
で URL を開いた時に開かれるファイルの型は、10 キロバイト (10,240 バイト) 以下の場合は StringIO
、それより大きい場合は Tempfile
となる。
参考:
Ruby の open_uri でファイルオブジェクトが Tempfile になる瞬間を追った – Qiita
Buffer – ruby/open-uri.rb at v2_6_0 · ruby/ruby – GitHub
Why does OpenURI treat files under 10kb in size as StringIO? – Stack Overflow
charset
require "open-uri"
charset = nil
html = URI.open(url) do |f|
charset = f.charset
f.read
end
Code language: Ruby (ruby)
参考:
Shift_JIS サイトを Nokogiri でパースするときにはエンコード指定 (CP932 指定推奨) – Qiita
open-uri で utf-8 以外のページを文字変換して取得する | deadwood
Nokogiri を使った Ruby スクレイピング | 酒と涙とRubyとRailsと
open-uri で UTF-8 でないページを取得するときの注意 | Route 477
OpenURI::Meta#charset | Ruby リファレンスマニュアル [公式]
charset のデフォルトを UTF-8 にする
URI.open("http://example.com").tap do |io|
charset = io.charset { "utf-8" }
io.set_encoding(charset)
end
Code language: Ruby (ruby)
参考:
Specify default charset using open-uri but use server-provided charset if given – Stack Overflow
base_uri
参考:
OpenURI::Meta#base_uri | Ruby リファレンスマニュアル [公式]
画像を保存する
require "open-uri"
image_dir = "images"
image_url =
"https://upload.wikimedia.org/wikipedia/commons/b/bc/" +
"Bristol.zoo.capybara.arp.jpg"
name = File.basename(URI.parse(image_url).path)
URI.open(image_url) do |image|
IO.copy_stream(image, File.join(image_dir, name))
end
Code language: Ruby (ruby)
参考:
インターネット上のファイルをダウンロードしてローカルに保存したい – Qiita
リダイレクトが失敗する
参考:
OpenURI で HTTP から HTTPS へのリダイレクトが禁止されている件 – Qiita
OpenURI で HTTP から HTTPS のリダイレクトを一時的に許す Gem 作った | ぴよログ
OpenURIで HTTP から HTTPS へのリダイレクトを行う | 歩いたら休め
BASIC 認証
参考:
User-Agent を指定する
URI.parse(url).open("User-Agent" => user_agent) do |f|
content = f.read
end
Code language: Ruby (ruby)
参考:
Ruby で RSS 取得するときに User-Agent を偽装する | 動かざることバグの如し
Ruby ではてなブックマークの RSS にアクセスすると 503 が返ってくる | /var/www/yatta47.log
追加のヘッダフィールドを指定できます | Ruby リファレンスマニュアル [公式]
How to set a custom user agent in ruby – Stack Overflow
uri
参考:
library uri | Ruby リファレンスマニュアル [公式]
URI
参考:
module URI | Ruby リファレンスマニュアル [公式]
URI::Generic
参考:
class URI::Generic | Ruby リファレンスマニュアル [公式]
URI.parse
参考:
URI.parse | Ruby リファレンスマニュアル [公式]
OpenURI
参考:
module OpenURI | Ruby リファレンスマニュアル [公式]
OpenURI::Meta
サーバーから取得したデータに、属性を扱うためのメソッドを追加するモジュール。OpenURI
を使用して開いた StringIO
が OpenURI::Meta
で extend
される。
参考:
module OpenURI::Meta | Ruby リファレンスマニュアル [公式]
IO
参考:
class IO | Ruby リファレンスマニュアル [公式]
IO#read | Ruby リファレンスマニュアル [公式]
File
参考:
class File | Ruby リファレンスマニュアル [公式]
Tempfile
参考:
class Tempfile | Ruby リファレンスマニュアル [公式]
StringIO
参考:
class StringIO | Ruby リファレンスマニュアル [公式]
StringIO#string | Ruby リファレンスマニュアル [公式]
StringIO#read | Ruby リファレンスマニュアル [公式]
OpenURI::HTTPError
HTTP リクエストに失敗した際に投げられる例外
参考:
class OpenURI::HTTPError | Ruby リファレンスマニュアル [公式]
コード:
HTTPError – open-uri.rb at v3_1_2 – GitHub
open-uri-redirections
リポジトリ:
参考: