[Date Prev][Date Next][Thread Prev][][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)