kiyoka.2008_07_04 RSSPLAIN

Related pages: !kiyoka.blog.list !kiyoka.blog.2008_07
5555555555555555555555555555554
5

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

5

oldtype-modeでURLをリンク書式に変換する機能をサポートした。

5

この関数はURLで取得したHTMLのタイトルを取得して、書式に埋めこんでいる。

5

といっても、HTMLの解析部分はw3mにおまかせ。

5

なぜならEmacsLispだけでは、到底実現できないからだ。

5

Net上に存在する現実のHTMLは、文字コードが多様すぎるのと、タグの対応がデタラメすぎるのとで、ロバストな処理を実現するのは不可能に近い。

5

こういう場合は外部のプログラムを使うのが一番。

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

このコード、もしよければ使って下さい。

5

この関数を呼ぶと、グローバルのmatchデータが破壊されるので、そこだけ注意するべし。

4