kiyokaのブログアーカイブ

Archive of old blog posts

URLで取得したHTMLのタイトル文字列を取得する関数

[oldtype-mode]でURLをリンク書式に変換する機能をサポートした。 この関数はURLで取得したHTMLのタイトルを取得して、書式に埋めこんでいる。 といっても、HTMLの解析部分はw3mにおまかせ。 なぜならEmacsLispだけでは、到底実現できないからだ。 Net上に存在する現実のHTMLは、文字コードが多様すぎるのと、タグの対応がデタラメすぎるのとで、ロバストな処理を実現するのは不可能に近い。 こういう場合は外部のプログラムを使うのが一番。

;;
;; *fetch command*
;;   w3m -no-graph -halfdump -o ext_halfdump=1 -o strict_iso2022=0 -o fix_width_conv=1 URL
;;       | awk '-F<' '/title_alt/ { print $2; }' | tail -1 | awk '-F"' '{ print $2; }'
;;
(defun oldtype-fetch-html-title (url)
  (cond 
   ((string-match "http://" url)
    (with-temp-buffer
      (shell-command 
       (concat
	(format "w3m -no-graph -halfdump -o ext_halfdump=1 -o strict_iso2022=0 -o fix_width_conv=1 \'%s\' |" url)
	"awk \'-F\<\' \'/title_alt/ { print $2; }\' |"
	"tail -1 |"
	"awk \'-F\"\' \'{ printf(\"%s\", $2); }\'")
       (current-buffer))
      (replace-string "*" "<" nil (point-min) (point-max))
      (replace-string "*" ">" nil (point-min) (point-max))
      (buffer-substring-no-properties (point-min) (point-max))))
   (t
    "No Title")))

このコード、もしよければ使って下さい。 この関数を呼ぶと、グローバルのmatchデータが破壊されるので、そこだけ注意するべし。