finish scraper

This commit is contained in:
byte[] 2019-11-28 18:19:47 -05:00
parent da09d45c7f
commit 109f3f781a
6 changed files with 67 additions and 2 deletions

View file

@ -7,7 +7,7 @@ import { $, $$, hideEl, showEl, makeEl, clearEl } from './utils/dom';
import { addTag } from './tagsinput';
function scrapeUrl(url) {
return fetchJson('POST', '/images/scrape_url', { url })
return fetchJson('POST', '/images/scrape', { url })
.then(handleError)
.then(response => response.json());
}

View file

@ -0,0 +1,17 @@
defmodule PhilomenaWeb.Image.ScrapeController do
use PhilomenaWeb, :controller
alias Philomena.Scrapers
def create(conn, params) do
result =
params
|> Map.get("url")
|> to_string()
|> String.trim()
|> Scrapers.scrape!()
conn
|> json(result)
end
end

View file

@ -14,6 +14,7 @@ defmodule PhilomenaWeb.ImageController do
plug PhilomenaWeb.FilterBannedUsersPlug when action in [:new, :create]
plug PhilomenaWeb.UserAttributionPlug when action in [:create]
plug PhilomenaWeb.CaptchaPlug when action in [:create]
plug PhilomenaWeb.ScraperPlug, [params_name: "image", params_key: "image"] when action in [:create]
def index(conn, _params) do
query = conn.assigns.compiled_filter

View file

@ -0,0 +1,39 @@
defmodule PhilomenaWeb.ScraperPlug do
def init(opts), do: opts
def call(conn, opts) do
case conn.params do
%{"scraper_cache" => url} ->
Philomena.Http.get!(url, [], max_body_length: 30_000_000)
|> maybe_fixup_params(opts, conn)
_ ->
conn
end
end
defp maybe_fixup_params(%HTTPoison.Response{body: body, status_code: 200}, opts, conn) do
params_name = Keyword.get(opts, :params_name, "image")
params_key = Keyword.get(opts, :params_key, "image")
file = Briefly.create!()
now = DateTime.utc_now() |> DateTime.to_unix(:microsecond)
File.write!(file, body)
fake_upload =
%Plug.Upload{
path: file,
content_type: "application/octet-stream",
filename: "scraper-#{now}"
}
updated_form =
Map.put(conn.params[params_name], params_key, fake_upload)
updated_params =
Map.put(conn.params, params_name, updated_form)
%{conn | params: updated_params}
end
defp maybe_fixup_params(_response, _opts, conn), do: conn
end

View file

@ -84,6 +84,9 @@ defmodule PhilomenaWeb.Router do
get "/", ActivityController, :index
resources "/activity", ActivityController, only: [:index]
scope "/images", Image, as: :image do
resources "/scrape", ScrapeController, only: [:create]
end
resources "/images", ImageController, only: [:index, :show, :new, :create] do
resources "/comments", Image.CommentController, only: [:index, :show, :create]
resources "/tags", Image.TagController, only: [:update], singleton: true

View file

@ -28,7 +28,7 @@
h4 Select an image
.image-other
#js-image-upload-previews
p Upload a file from your computer
p Upload a file from your computer, or provide a link to the page containing the image and click Fetch.
.field
= file_input f, :image, class: "input js-scraper"
= error_tag f, :image_size
@ -37,6 +37,11 @@
= error_tag f, :image_name
= error_tag f, :image_mime_type
.field.field--inline
= url_input f, :scraper_url, class: "input input--wide js-scraper", placeholder: "Link a deviantART page, a Tumblr post, or the image directly"
button.button.button--separate-left#js-scraper-preview type="button" title="Fetch the image at the specified URL" data-disable-with="Fetch"
' Fetch
.field-error-js.hidden.js-scraper
h4 About this image