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データが破壊されるので、そこだけ注意するべし。