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*