Namazu-devel-ja(旧)


[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]

Re: scheme (Re: indexer.pl)



<200212050640.PAA31685@xxxxxxxxxxxxxxxxxx>の記事において
私は書きました。

>>   とりあえずできました。まずは scheme に対応するための差分をつけます。

  これに対応した scheme/http.pl です。

  まだエラーチェック等いろいろと甘いですが、一応これで

$ mknmz http://www.namazu.org/index.html 

  といったことができます。
-- 
野首 貴嗣
E-mail: knok@xxxxxxxxxxxxx
	knok@xxxxxxxxxx / knok@xxxxxxxxxx

-- 
#
# -*- Perl -*-
# http.pl
#
#

package Namazu::Scheme::http;

use strict;
require 'util.pl';

sub scheme() {
    return ('http');
}

sub status() {
    return 'no' if (! util::checklib('Net/HTTP.pm'));
    return 'no' if (! util::checklib('URI.pm'));
    return 'yes';
}

sub recursive() {
    return 0;
}

sub init() {
    eval 'use Net::HTTP;';
    eval 'use URI;';
    eval 'use HTTP::Date;';
}

sub fetch($$) {
    my ($url, $contref) = @_;
    my $err = undef;

    my $u = URI->new($url);
    my $h = Net::HTTP->new(Host => $u->host());
    $h->write_request(GET => $u->path());
    my $code;
    ($code, undef, undef) = $h->read_response_headers();
    if ($code eq '200') {
	$h->read_entity_body($$contref, $conf::FILE_SIZE_MAX);
    } else {
	$err = $code;
    }

    return $err;
}

sub mtime($) {
    my $url = shift @_;
    my $u = URI->new($url);
    my $h = Net::HTTP->new(Host => $u->host());
    $h->write_request(HEAD => $u->path());
    my ($code, $mess, %head) = $h->read_response_headers();
    return time unless defined $head{'Last-Modified'};
    return HTTP::Date::str2time($head{'Last-Modified'});
}

1;