Sha256: f4ef83976a0f6a16a6d66486b68bd93330975afa0aab60ef3e687cff0d54e444

Contents?: true

Size: 867 Bytes

Versions: 2

Compression:

Stored size: 867 Bytes

Contents

# frozen_string_literal: true

require "json"
require "uri"

module Miteru
  class Feeds
    class UrlScan < Feed
      HOST = "urlscan.io"
      VERSION = 1
      URL = "https://#{HOST}/api/v#{VERSION}"

      attr_reader :size
      def initialize(size = 100)
        @size = size
        raise ArgumentError, "size must be less than 10,000" if size > 10_000
      end

      def urls
        url = url_for("/search/")
        url.query = URI.encode_www_form(
          q: "task.method:automatic",
          size: size
        )

        res = JSON.parse(get(url))
        res["results"].map { |result| result.dig("task", "url") }
      rescue HTTPResponseError, HTTP::Error, JSON::ParserError => e
        puts "Failed to load urlscan.io feed (#{e})"
        []
      end

      private

      def url_for(path)
        URI(URL + path)
      end
    end
  end
end

Version data entries

2 entries across 2 versions & 1 rubygems

Version Path
miteru-0.12.13 lib/miteru/feeds/urlscan.rb
miteru-0.12.12 lib/miteru/feeds/urlscan.rb