From 8f5b248e571406cf8a29c147587847edddcac22a Mon Sep 17 00:00:00 2001 From: Chaska <166928710+chaskayote@users.noreply.github.com> Date: Sun, 21 Apr 2024 18:08:14 -0500 Subject: [PATCH] Scraper fixes + adding multiple sources --- assets/js/upload.js | 19 ++++++++++++++++ lib/philomena/scrapers.ex | 1 + lib/philomena/scrapers/furaffinity.ex | 31 +++++++++++++++++++++++++++ 3 files changed, 51 insertions(+) create mode 100644 lib/philomena/scrapers/furaffinity.ex diff --git a/assets/js/upload.js b/assets/js/upload.js index 84482341..09f6638a 100644 --- a/assets/js/upload.js +++ b/assets/js/upload.js @@ -35,6 +35,7 @@ function setupImageUpload() { const descrEl = $('.js-image-descr-input', form); const tagsEl = $('.js-image-tags-input', form); const sourceEl = $$('.js-source-url', form).find(input => input.value === ''); + const sourceAdd = $('.js-image-add-source'); const fetchButton = $('#js-scraper-preview'); if (!fetchButton) return; @@ -116,6 +117,24 @@ function setupImageUpload() { if (descrEl) descrEl.value = descrEl.value || data.description || ''; // Add author if (tagsEl && data.author_name) addTag(tagsEl, `artist:${data.author_name.toLowerCase()}`); + // Add multiple authors if provided + if (tagsEl && data.authors) data.authors.forEach(item => addTag(tagsEl, `artist:${item.toLowerCase()}`)); + // Add Tags + if (tagsEl && data.tags) data.tags.forEach(item => addTag(tagsEl, `${item.toLowerCase()}`)); + // Add multiple sources + if (sourceAdd && data.sources && data.sources.length > 0) { + data.sources.forEach(() => { + sourceAdd.dispatchEvent(new Event('click')); + }); + + let index; + const inps = document.querySelectorAll('.js-image-source input:placeholder-shown'); + + data.sources.forEach(item => { + index = data.sources.indexOf(item); + if (inps[index]) inps[index].value = item; + }); + } // Clear selected file, if any fileField.value = ''; showImages(data.images); diff --git a/lib/philomena/scrapers.ex b/lib/philomena/scrapers.ex index 31830c88..d0ac22ae 100644 --- a/lib/philomena/scrapers.ex +++ b/lib/philomena/scrapers.ex @@ -6,6 +6,7 @@ defmodule Philomena.Scrapers do Philomena.Scrapers.Tumblr, Philomena.Scrapers.Inkbunny, Philomena.Scrapers.E621, + Philomena.Scrapers.Furaffinity, Philomena.Scrapers.Raw ] diff --git a/lib/philomena/scrapers/furaffinity.ex b/lib/philomena/scrapers/furaffinity.ex new file mode 100644 index 00000000..e103f8fe --- /dev/null +++ b/lib/philomena/scrapers/furaffinity.ex @@ -0,0 +1,31 @@ +defmodule Philomena.Scrapers.Furaffinity do + @url_regex ~r|\Ahttps?://furaffinity\.net/view/([0-9]+)| + + @spec can_handle?(URI.t(), String.t()) :: true | false + def can_handle?(_uri, url) do + String.match?(url, @url_regex) + end + + def scrape(_uri, url) do +[_, submission_id] = Regex.run(@url_regex, url, capture: :all) + api_url = "https://faexport.spangle.org.uk/submission/#{submission_id}.json" + {:ok, %Tesla.Env{status: 200, body: body}} = Philomena.Http.get(api_url) + + json = Jason.decode!(body) + [submission] = json + + images = for x <- submission do + %{ + url: "#{x["download"]}", + camo_url: Camo.Image.image_url(x["thumbnail"]) + } + end + + %{ + source_url: url, + author_name: submission["name"], + description: submission["description"], + images: images + } + end +end