画像の直リンクからポップアップHTMLをつくる

lightboxを使っていたのに突如全てpopupのHTMLを用意しなければいかなくなったときのためのプチツー

やっていること

  • 全HTMLから画像への直リンクを見つける
  • 同名のhtmlをpopup/以下に作る。
  • 上記HTMLにtemplates.htmlの内容を保存する。
  • 上記HTMLの画像を差し替える。
  • 呼び出し元のHTMLのH1をポップアップ用HTMLのタイトルとH1に挿入する
  • 呼び出し元のHTMLのリンクをポップアップ用HTMLへ差し替える。
  • 適当にclass="popup"とtarget="_blank"を挿入する。

急な対応にもうまー。

$KCODE = 'utf8'
#popupHTMLを自動生成
#画像(gif,jpg)への直リンクを見つけたら「popup/同名.html」を作成してタイトルと画像を挿入

require 'kconv'
require 'rubygems'
require 'find'
require 'hpricot'
require "fileutils"

htmls=[]

Find.find(".") do |path|
  if path.match(/\.html$/)
    htmls.push(path.to_s)
  end
end

htmls.each do |html|
  puts html+"処理中".tosjis  #windowsのコマンドプロンプト用にsjis変換
  doc = Hpricot(open(html,"r"))

  doc.search("a").each do |_a|
    if(_a.attributes['href'].match(/(\.gif|\.jpg|\.jpeg)$/))  #画像探索
      img=_a.attributes['href']
      title=doc.search("title").inner_text
      hd1=doc.search("h1 span").inner_text
      if(_a.parent.previous_sibling&&_a.parent.previous_sibling.inner_text)
        hd2=_a.parent.previous_sibling.inner_text
      else
        hd2="ダミーダミー"
      end
      
      popuphtml=img.sub(/images\/([^\/]+)(\.gif|\.jpg|\.jpeg)$/,'popup/\1.html')
      popuphtml2=popuphtml.sub("/special/detail/","")
      popupDir=popuphtml.sub("/special/detail/","").sub(/([^\/]+)$/,"")
      FileUtils.mkdir_p(popupDir) unless FileTest.exist?(popupDir)   #popupディレクトリ作成
      FileUtils.cp("template.html",popuphtml2)
      
      puts popuphtml+"作成".tosjis     #windowsのコマンドプロンプト用にsjis変換
      file = open(popuphtml2,"w")
      htmldoc = Hpricot(open("template.html","r"))
      htmldoc.search("title").each do |_title|
        _title.innerHTML=hd1 +""+ title
      end
      htmldoc.search("h1").each do |head|
        head.innerHTML=hd1
      end
      htmldoc.search("img[@src=/dummy/images/catch-1.jpg]").each do |_img|
        _img.set_attribute("src",img)
      end
      
      puts ("ページタイトル"+hd1).tosjis  #windowsのコマンドプロンプト用にsjis変換
      file << htmldoc.to_original_html
      _a.set_attribute("href",popuphtml)
      _a.set_attribute("class","popup")
      _a.set_attribute("target","blank")
    end
  end
  
  open(html,"w")<<doc.to_original_html  #元のHTMLを極力維持した形式で保存
end

殴り書きしたからものすごくアレな感じ。しかも意味も無く残ってる部分が結構あるなー。まぁいいや。