w3m その8 (738レス)
前次1-
抽出解除 レス栞

580
(8): 2017/12/07(木)09:41 AAS
なんかここ↓のハイパーリンク『次のページ』が踏めない
外部リンク:gihyo.jp

というか、URL が file:/// に化ける謎
582
(3): 2017/12/07(木)12:48 AAS
>>580 俺のところもなるわ。

HTMLのソースを見ると当該部分は
<a href="/admin/serial/01/ubuntu-recipe/0019?page=2" rel="next">
となっているから、hrefのリンク先が '/' で始まってると
w3mはローカルファイルへのリンクと判断して "file://" を補うみたいね。

おそらくページ作成者はサーバのルートからの絶対アドレスとして
"外部リンク:gihyo.jp が補われると想定して書いてるのだと思う。
実際に "外部リンク:gihyo.jp で次のページが見られるし。

HTMLの文法としてどちらが正しいのか知らんけど、とりあえず現象の分析まで。
586: 580 2017/12/07(木)18:26 AAS
>>582,584,585
なるほど…と思ってよく見たら、これサイト側のベースURLの指定が間違ってるのか
理想: <base href="外部リンク:gihyo.jp />
現状: <base href="/" />
サイト側のミスっぽいけど、w3mも機転が足りてない感じがする

>>584
utf8版から入ると eucのマニュアルページを読むのが最初の試練だった気が

>>581
それは、debianなのか、fedoraなのか、freebsdなのか?
588: 580 2017/12/08(金)00:33 AAS
原因自体はそれで確定みたいですね
ただ、C言語なんて長いこと触ってないし、複雑過ぎるしで、自分にゃ手に負えんです。

暫定で baseurl を潰すだけで良いなら、
$ ag 'buf->baseurl' *.c

file.c の
case HTML_BASE:
ブロックの中あたりですかね?

……と当てずっぽうに言ってみる
てか、すまん
589: 580 2017/12/08(金)12:32 AAS
解析用にparse結果を書き出す関数を作ってみた
問題箇所(=buf->baseURL->hostの設定箇所)は、今の所特定できず
こんなことしなくても、正規なデバッグ方法がちゃんと用意されてそうな気も

/* w3mソース [proto.h] 末尾に追加 */
 extern void clear_mylog();
 extern void printf_mylog( char *fmt, ... );
 extern void dump_ParsedURL( ParsedURL *p );

/* w3mソース [url.c] 末尾に追加 */
 const char fn_mylog[100] = "/tmp/w3m_debug.log";
 void clear_mylog(){
  FILE *fp =fopen( fn_mylog,"w");
  if( fp ) fclose( fp );
 }
 void printf_mylog( char *fmt, ... ){
  FILE *fp = fopen( fn_mylog, "a");
  if( fp ){
  va_list args;
  va_start( args, fmt );
  vfprintf( fp, fmt, args );
  va_end( args );
  }
 }
 void dump_ParsedURL( ParsedURL *p ){
  if( p ){
  printf_mylog( " host:[%s] file:[%s] real_file:[%s]\n",
  p->host, p->file, p->real_file );
  }else{
  printf_mylog( " ParsedURL is null.\n" );
  }
 }
590: 580 2017/12/08(金)12:33 AAS
[dump 結果]
url.c:
  baseURL(Buffer *buf){ ... dump_ParsedURL(buf->baseURL); ... }

2chスレ:unix へのアクセス時

  host:[mevius.5ch.net] file:[/unix/] real_file:[(null)]
外部リンク:gihyo.jp へのアクセス時

  host:[(null)] file:[/] real_file:[(null)]
  ^^^^ 不具合
592
(1): 580 2017/12/08(金)19:10 AAS
>>591
おお、gihyo.jp も普通に見れるようになってますね

個人的には、
HTMLlineproc2body(Buffer *buf, Str (*feed) (), int llimit)
...
case HTML_BASE:
...
if( p && p[0]=='/' ) break; /* この一行を追加して、invalidな <base>タグを弾く */
if (!buf->baseURL)
で良いかなー、とか検討中だった
スキーマの使われ方とかまだ見てないですが、利用した方がベターっぽいですね

インライン画像がたまに表示されない気がするけど、気のせいだろか?
もうちょっと見てみます
594: 580 2017/12/09(土)09:48 AAS
>>591
[file.c]
 HTMLlineproc2body( )
  case HTML_BASE: にて、
base=NULL としてしまうと、サイトの初回訪問時(=画像がキャッシュされていない状態)では、インライン画像が表示されないみたいです
ParsedURL *base は、HTMLlineproc2bodya の先頭の方で、バッファの URL によって初期化されてて、NULL にしては駄目っぽい
596: 580 2017/12/10(日)12:28 AAS
>>591
オリジナルにこのパッチを当てた時は問題なかったです
お騒がせしました(一応報告まで)

テスト方法(Linux Mint serena 64bit環境)
$ mkdir w3m_test; cd w3m_test
$ wget 外部リンク[gz]:downloads.sourceforge.net
$ wget 外部リンク:www.linuxfromscratch.org
$ tar zxvf w3m-0.5.3.tar.gz
$ cd w3m-0.5.3
$ patch -Np1 -i ../w3m-0.5.3-bdwgc72-1.patch
$ patch -Np1 -i ../wtiNPhJm.txt ## ← >>591 のpatch
$ sed -i 's/file_handle/file_foo/' istream.{c,h}
$ sed -i 's#gdk-pixbuf-xlib-2.0#& x11#' configure
$ sed -i 's#/libexec#/lib#' configure ## ← w3mimg 用に微調整
$ PKG_CONFIG_PATH="/usr/lib/openssl-1.0/pkgconfig:$PKG_CONFIG_PATH" \
LIBS="-lX11 -ldl -lXext -lz" \
./configure --prefix=/usr --sysconfdir=/etc \
--with-migemo=cmigemo
$ make
$ rm ~/.w3m/w3mtmp*
$ ./w3m -v 外部リンク:gihyo.jp
$ ./w3m -version
w3m version w3m/0.5.3, options lang=en,m17n,image,color,ansi-color,mouse,gpm,menu,cookie,ssl,ssl-verify,external-uri-loader,w3mmailer,nntp,ipv6,alarm,mark,migemo

w3mimgは、
Makefile にて、
libexecdir = ${exec_prefix}/lib
w3mimgdisplay を /usr/lib/w3m/w3mimgdisplay に配置して確認

参考: 外部リンク[html]:www.linuxfromscratch.org
前次1-
スレ情報 赤レス抽出 画像レス抽出 歴の未読スレ

ぬこの手 ぬこTOP 1.040s*