> ## Documentation Index
> Fetch the complete documentation index at: https://docs.firecrawl.dev/llms.txt
> Use this file to discover all available pages before exploring further.

# Ruby

> Comece a usar o Firecrawl em Ruby. Faça buscas, scraping e interaja com dados da web usando a API REST.

<div id="prerequisites">
  ## Pré-requisitos
</div>

* Ruby 3.0+
* Uma chave da API do Firecrawl — [obtenha uma grátis](https://www.firecrawl.dev/app/api-keys)

<div id="search-the-web">
  ## Fazer uma busca na web
</div>

O Firecrawl funciona com Ruby por meio da API REST, usando `net/http`.

```ruby theme={null}
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_json

response = 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
```

<div id="scrape-a-page">
  ## Fazer scraping de uma página
</div>

```ruby theme={null}
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_json

response = Net::HTTP.start(uri.hostname, uri.port, use_ssl: true) { |http| http.request(request) }
data = JSON.parse(response.body)

puts data.dig("data", "markdown")
```

<Accordion title="Exemplo de resposta">
  ```json theme={null}
  {
    "success": true,
    "data": {
      "markdown": "# Example Domain\n\nThis domain is for use in illustrative examples...",
      "metadata": {
        "title": "Example Domain",
        "sourceURL": "https://example.com"
      }
    }
  }
  ```
</Accordion>

<div id="interact-with-a-page">
  ## Interaja com uma página
</div>

Faça o scraping de uma página e depois continue trabalhando com ela usando prompts em linguagem natural.

```ruby theme={null}
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_json

response = 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_json

interact_resp = Net::HTTP.start(interact_uri.hostname, interact_uri.port, use_ssl: true) { |http| http.request(interact_req) }
puts JSON.parse(interact_resp.body)

# Encerrar a sessão
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) }
```

<div id="next-steps">
  ## Próximos passos
</div>

<CardGroup cols={2}>
  <Card title="Documentação de scraping" icon="file-lines" href="/pt-BR/features/scrape">
    Todas as opções de scraping, incluindo formatos, ações e proxies
  </Card>

  <Card title="Documentação de busca" icon="magnifying-glass" href="/pt-BR/features/search">
    Busque na web e obtenha o conteúdo completo da página
  </Card>

  <Card title="Referência da API" icon="code" href="/pt-BR/api-reference/v2-introduction">
    Documentação completa da API REST
  </Card>

  <Card title="Documentação para interagir" icon="hand-pointer" href="/pt-BR/features/interact">
    Clique, preencha formulários e extraia conteúdo dinâmico
  </Card>
</CardGroup>
