Aide sur les actions groupées : remplacer les images liées par des fichiers d'image locaux

scénario :

  • un hébergeur d’images gratuit (foo-host dans cet exemple) a cessé d’exister, et un forum discourse contient un tas d’images hotlinkées dans ses publications
  • les images ont été sauvegardées manuellement avant qu’elles ne pourrissent et existent sur le système de fichiers local
  • une correspondance existe entre l’URL de l’image et le chemin du fichier local : get_paths_from_hotlinked_urls()

comment puis-je :

  1. créer une pièce jointe dans rails pour chacune de ces images et
  2. les ajouter correctement à la publication ?
image_host_domain = 'foo-host.com'

hotlink_posts = Post.where('cooked ~ ?', image_host_domain)
puts "trouvé #{hotlink_posts.length} publications avec des images hotlinkées..."

hotlink_posts.each do |p|
  # obtenir toutes les URL dans la publication contenant image_host_domain
  urls = URI.extract(p.cooked).select { |url| url[/#{Regexp.quote(image_host_domain)}/] }

  local_paths = get_paths_from_hotlinked_urls(urls)

  new_raw = p.raw
  urls.each.with_index do |url, i|
    next if local_paths[i].blank?

    # ***** TODO : 1) 'télécharger' local_paths[i] en tant que pièce jointe
    #                et l'associer correctement à la publication

    # ***** TODO : 2) remplacer le hotlink par la pièce jointe
    # new_raw = new_raw...
  end

  p.update(raw: new_raw)
end

désolé pour la publication à faible effort. je me sens juste un peu stressé aujourd’hui, lol
quelqu’un peut-il m’indiquer la bonne direction ? une solution complète n’est pas requise si c’est trop compliqué. merci

1 « J'aime »

Vous pouvez consulter les scripts d’importation pour des exemples sur la façon de télécharger des fichiers et d’insérer le code HTML pour ces téléchargements.

2 « J'aime »