[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]
Re:
shimbunで
参照するURL
あまり詳しくないので、自分なりに書いたメモを折り混ぜます。最後に
ぼくなりに出した解 (sb-atmarkit.el に当てるパッチ) を一つ。
>>>>> In [emacs-w3m : No.07788] 長さん wrote:
> sb-atmarkitを使用していたところ、一部のコンテンツで画像が表示されない
> 問題を発見しました。
例えば fdb グループの最新(?)の記事ですね。
Date: Sat, 26 Feb 2005 00:00:00 +0900
Message-ID: <fdb/rensai/odpdotnet04/odpdotnet04_1%fdb@atmarkit.co.jp>
Xref: http://www.atmarkit.co.jp/fdb/rensai/odpdotnet04/odpdotnet04_1.html
先頭にある top.gif という絵が、たしかに取得できません。
> sb-atmarkitでは現在
> rss (shimbun-index-url)
> +->コンテンツのページ取り出し (shimbun-article-base-url)
> +-> 印刷ページの取得 (shimbun-article-url:固定)
> という風に情報をとっていきますが、この印刷ページでは <base>が定義され
> ており、これは shimbun-article-base-urlと同じになるようです。(例外ま
> では発見できず)
その印刷用のページでは
<base href="http://www.atmarkit.co.jp/club/print/print.php">
<img src="top.gif" width="500" height="50">
となっているんですが、これを見て
http://www.atmarkit.co.jp/club/print/top.gif
を取得しようとするのは間違いなんですねえ。実際 emacs-w3m や
Firefox などは印刷用のページを表示しても
http://www.atmarkit.co.jp/fdb/rensai/odpdotnet04/top.gif
を取得します。
> ここで、shimbun.elの shimbun-make-mime-articleで
> (setq images
> (shimbun-mime-replace-image-tags base-cid
> (shimbun-article-url shimbun
> header))))
> ^^^^^^^^^^^^^^^^^^^^^^^^^^^
> (let ((body (shimbun-make-text-entity "text/html" (buffer-string))))
> となっているため、相対アドレスの画像の置換に失敗するようです。
sb-atmarkit.el では shimbun-article-url が固定値 (印刷用のページ
の url) を返すようになっているんですね。で、もとのページの url
を referer として呼ぶと、その印刷イメージを表示する、と。
> これは、
> (a) : shimbun-mime-replace-image-tags では shimbun-article-base-urlを使用する
> (b) : sb-atmarkitでshimbun-make-contentsをオーバーライドして対応する
> ((c) : shimbun-article-contents-baseみたいなのを新設する必要がある?)
> どのようににすべき問題になるのでしょうか
(a) だと、他のすべての shimbun モジュールに対して副作用が無いか
どうか確信が持てません。(b) と (c) はいちおう安全な気がします。
そして、この特殊事例は今のところ sb-atmarkit.el だけなので (b)
でいいんじゃないかと思って、パッチを作ってみました。
> # それぞれ
> # shimbun-article-url : 実際に取得するコンテンツのページ
> # shimbun-article-base-url : 元のページ
> # だとは理解できたのですが。
> コンテンツページ(shimbun-article-url)内の<base>を対処する部分はないので、
> shimbun-article-base-urlを使用しても正解ではないことになりますね。
> なので、どうすべきかちょっと判別ができませんでした。
長さんのおっしゃる意味がいまいち掴めませんが、sb-atmarkit.el の
場合は、shimbun-article-url と shimbun-article-base-url の戻り値
はデフォルトでは同じ、しかし前者が特定の固定値を返すようにされて
いる、という観点から、(a) は別段変ではないと思うんですけれど。
--- sb-atmarkit.el~ 2005-02-24 21:41:06 +0000
+++ sb-atmarkit.el 2005-03-07 10:08:18 +0000
@@ -85,8 +85,17 @@
(format "<%s%%%s@atmarkit.co.jp>" (match-string-no-properties 1 url)
(shimbun-current-group-internal shimbun)))
+(defvar shimbun-atmarkit-use-base-url nil
+ "Non-nil means make `shimbun-article-url' return a base url.")
+
(luna-define-method shimbun-article-url ((shimbun shimbun-atmarkit) header)
- "http://www.atmarkit.co.jp/club/print/print.php")
+ (if shimbun-atmarkit-use-base-url
+ (shimbun-article-base-url shimbun header)
+ "http://www.atmarkit.co.jp/club/print/print.php"))
+
+(luna-define-method shimbun-make-contents ((shimbun shimbun-atmarkit) header)
+ (let ((shimbun-atmarkit-use-base-url t))
+ (shimbun-make-html-contents shimbun header)))
(luna-define-method shimbun-clear-contents :before ((shimbun shimbun-atmarkit)
header)