OpenURI

ドキュメント:

library open-uri | Ruby リファレンスマニュアル [公式]

使い方

参考:

OpenURI の使い方 | KeruuWeb

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|
    # ...
endCode language: Ruby (ruby)

URI.parse を使う。

require "open-uri"
URI.parse("https://example.com/").open do |f|
    # ...
endCode 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 となる。

参考:

open-uri の open の戻り値 – Qiita

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
endCode language: Ruby (ruby)

参考:

Nokogiri で文字化けを防ぐ – Qiita

Shift_JIS サイトを Nokogiri でパースするときにはエンコード指定 (CP932 指定推奨) – Qiita

open-uri で utf-8 以外のページを文字変換して取得する | deadwood

Nokogiri を使った Ruby スクレイピング | 酒と涙とRubyとRailsと

open-uri で UTF-8 でないページを取得するときの注意 | Route 477

OpenURI の使い方 | KeruuWeb

OpenURI::Meta#charset | Ruby リファレンスマニュアル [公式]

charset のデフォルトを UTF-8 にする

URI.open("http://example.com").tap do |io|
    charset = io.charset { "utf-8" }
    io.set_encoding(charset)
endCode 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))
endCode language: Ruby (ruby)

参考:

インターネット上のファイルをダウンロードしてローカルに保存したい – Qiita

リダイレクトが失敗する

参考:

OpenURI で HTTP から HTTPS へのリダイレクトが禁止されている件 – Qiita

OpenURI で HTTP から HTTPS のリダイレクトを一時的に許す Gem 作った | ぴよログ

OpenURIで HTTP から HTTPS へのリダイレクトを行う | 歩いたら休め

BASIC 認証

参考:

OpenURI の認証とリダイレクト – Qiita

User-Agent を指定する

URI.parse(url).open("User-Agent" => user_agent) do |f|
    content = f.read
endCode 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

リポジトリ:

open-uri-redirections/open_uri_redirections: OpenURI Patch to Allow Redirections Between HTTP and HTTPS – GitHub

参考:

open-uri redirect forbidden – Stack Overflow

記事をシェアする:
タグ:

コメントを残す

メールアドレスが公開されることはありません。 が付いている欄は必須項目です

Protected by reCAPTCHA