job for fixing fa names

This commit is contained in:
Dylan Knutson
2023-05-16 18:53:01 -07:00
parent 17d2a87089
commit 37ad4b2ea8
3 changed files with 52 additions and 23 deletions

View File

@@ -193,6 +193,32 @@ class Domain::Fa::User < ReduxApplicationRecord
similar_users_by(:for_followed, exclude_followed_by)
end
def guess_user_page_log_entry
for_path = proc { |uri_path|
HttpLogEntry.where(
uri_scheme: "https",
uri_host: "www.furaffinity.net",
uri_path: uri_path,
).order(created_at: :desc).first
}
for_hle_id = proc { |hle_id|
hle_id && HttpLogEntry.find_by(id: hle_id)
}
# older versions don't end in a trailing slash
hle_id = self.log_entry_detail && self.log_entry_detail["last_user_page_id"]
# first try the last scanned user page (present on most fa user models)
for_hle_id.call(hle_id) ||
# if that's missing, see if there's an existing request logged to the user page
for_path.call("/user/#{self.url_name}/") ||
# and try the non-trailing-slash version as well
for_path.call("/user/#{self.url_name}")
# TODO - maybe can look for posts as well, those might list an avatar
end
private
def similar_users_by(factor_col, exclude_followed_by)

View File

@@ -33,28 +33,6 @@ class Domain::Fa::UserAvatar < ReduxApplicationRecord
end
def guess_user_page_log_entry
for_path = proc { |uri_path|
HttpLogEntry.where(
uri_scheme: "https",
uri_host: "www.furaffinity.net",
uri_path: uri_path,
).order(created_at: :desc).first
}
for_hle_id = proc { |hle_id|
hle_id && HttpLogEntry.find_by(id: hle_id)
}
# older versions don't end in a trailing slash
hle_id = user.log_entry_detail && user.log_entry_detail["last_user_page_id"]
# first try the last scanned user page (present on most fa user models)
for_hle_id.call(hle_id) ||
# if that's missing, see if there's an existing request logged to the user page
for_path.call("/user/#{user.url_name}/") ||
# and try the non-trailing-slash version as well
for_path.call("/user/#{user.url_name}")
# TODO - maybe can look for posts as well, those might list an avatar
user.guess_user_page_log_entry
end
end

View File

@@ -1,4 +1,29 @@
namespace :fa do
desc "fix FurAffinity user name"
task :fix_names => [:set_logger_stdout, :environment] do
start_at = (ENV["start_at"] || 0).to_i
Domain::Fa::User.find_each(start: start_at, batch_size: 100) do |user|
page_log_entry = user.guess_user_page_log_entry
unless page_log_entry
Rails.logger.error("user #{user.id} / #{user.url_name} does not have a scanned user page")
next
end
parser = Domain::Fa::Parser::Page.new(page_log_entry.response.contents, require_logged_in: false)
unless parser.probably_user_page?
Rails.logger.error("user #{user.id} / #{user.url_name} page #{page_log_entry.id} is not a user page")
next
end
old_name = user.name
new_name = parser.user_page.name
user.name = new_name
if old_name != new_name
Rails.logger.info("updated #{user.id} / #{user.url_name} - #{old_name} -> #{new_name}")
else
Rails.logger.info("no change #{user.id} / #{user.url_name} - #{old_name}")
end
end
end
desc "dump FurAffinity users into json file, sorted by name"
task :dump_users => [:set_logger_stdout, :environment] do
out_file = ENV["out"] || raise("`out` file not specified (json)")