前提条件#
- Ruby 3.0+
- Firecrawl APIキー — 無料で取得できます
Web を検索#
Firecrawl は、REST API を介して net/http を使用し、Ruby から利用できます。
require "net/http"require "json"require "uri"api_key = ENV.fetch("FIRECRAWL_API_KEY")uri = URI("https://api.firecrawl.dev/v2/search")request = Net::HTTP::Post.new(uri)request["Authorization"] = "Bearer #{api_key}"request["Content-Type"] = "application/json"request.body = { query: "firecrawl web scraping", limit: 5 }.to_jsonresponse = Net::HTTP.start(uri.hostname, uri.port, use_ssl: true) { |http| http.request(request) }results = JSON.parse(response.body)results["data"]["web"].each do |result| puts "#{result['title']} - #{result['url']}"endページをスクレイピング#
uri = URI("https://api.firecrawl.dev/v2/scrape")request = Net::HTTP::Post.new(uri)request["Authorization"] = "Bearer #{api_key}"request["Content-Type"] = "application/json"request.body = { url: "https://example.com" }.to_jsonresponse = Net::HTTP.start(uri.hostname, uri.port, use_ssl: true) { |http| http.request(request) }data = JSON.parse(response.body)puts data.dig("data", "markdown")レスポンス例
{ "success": true, "data": { "markdown": "# Example Domain\n\nThis domain is for use in illustrative examples...", "metadata": { "title": "Example Domain", "sourceURL": "https://example.com" } }}ページに対して Interact する#
ページをスクレイピングした後、自然言語のプロンプトを使ってそのまま操作を続けられます。
uri = URI("https://api.firecrawl.dev/v2/scrape")request = Net::HTTP::Post.new(uri)request["Authorization"] = "Bearer #{api_key}"request["Content-Type"] = "application/json"request.body = { url: "https://www.amazon.com", formats: ["markdown"] }.to_jsonresponse = Net::HTTP.start(uri.hostname, uri.port, use_ssl: true) { |http| http.request(request) }scrape_id = JSON.parse(response.body).dig("data", "metadata", "scrapeId")interact_uri = URI("https://api.firecrawl.dev/v2/scrape/#{scrape_id}/interact")interact_req = Net::HTTP::Post.new(interact_uri)interact_req["Authorization"] = "Bearer #{api_key}"interact_req["Content-Type"] = "application/json"interact_req.body = { prompt: "Search for iPhone 16 Pro Max" }.to_jsoninteract_resp = Net::HTTP.start(interact_uri.hostname, interact_uri.port, use_ssl: true) { |http| http.request(interact_req) }puts JSON.parse(interact_resp.body)# セッションを停止するdelete_uri = URI("https://api.firecrawl.dev/v2/scrape/#{scrape_id}/interact")delete_req = Net::HTTP::Delete.new(delete_uri)delete_req["Authorization"] = "Bearer #{api_key}"Net::HTTP.start(delete_uri.hostname, delete_uri.port, use_ssl: true) { |http| http.request(delete_req) }
