NAME WWW::DoctypeGrabber - grab doctypes from webpages SYNOPSIS use strict; use warnings; use WWW::DoctypeGrabber; my $grabber = WWW::DoctypeGrabber->new; my $res_ref = $grabber->grab('http://zoffix.com/') or die "Error: " . $grabber->error; print "Results: $grabber\n"; DESCRIPTION The module was developed to be used in an IRC bot and probably will be useless for anything else. If your intent is to parse some doctypes of HTML documents for validness etc. you are probably better off using some other module. The module accesses a given URI and checks if the page has doctype, what kind of doctype, whether or not there are any (non-)whitespace characters in front of the doctype, whether or not there is an XML prolog and whether or not the DTD URI matches the ones provided by W3C. CONSTRUCTOR "new" my $grabber = WWW::DoctypeGrabber->new; my $grabber = WWW::DoctypeGrabber->new( raw => 1, timeout => 30, max_size => 100, ); my $grabber = WWW::DoctypeGrabber->new( ua => LWP::UserAgent->new( agent => 'SuperUA', timeout => 30, max_size => 500, ), ); Constructs and returns a new WWW::DoctypeGrabber object. Takes several arguments as key/value pairs but all of them are optional. The possible arguments are as follows: "raw" ->new( raw => 1 ); Optional. When set to a true value will make the "grab()" method (see below) return the full doctype string as it appears in the document ( with the exception that all whitespace will appear as single spaces ). When set to a false value will cause the "grab()" method return a hashref and interpret the kind of doctype on the page. Defaults to: "undef" "timeout" ->new( timeout => 30 ); Optional. Specifies LWP::UserAgent timeout for the requests. Defaults to: 30 "max_size" ->new( max_size => 30 ); Optional. Since DOCTYPE is supposed to be at the beginning of the page we are not really interested in anything past the first bytes of the document. The "max_size" argument specifies the "maximum" number of bytes to download; however the final size may be larger as document is retrieved in chunks. Defaults to: 500 "ua" ->new( ua => LWP::UserAgent->new( agent => 'Foos' ) ); Optional. If "timeout" and "max_size" arguments are not enough for your needs feel free to specify the "ua" argument which takes an LWP::UserAgent object as a value. Defaults to: default LWP::UserAgent object with "timeout" and "max_size" set WWW::DoctypeGrabber constructor's "timeout" and "max_size" arguments as well as "agent" argument set to mimic FireFox. METHODS "grab" my $data_ref = $grabber->grab('http://zoffix.com/') or die $grabber->error; Instructs the object to grab the doctype from the webpage uri of which is specified as the first and only argument. On failure returns either "undef" or an empty list depending on the context and the reason for failure will be available via "error" method. On success returns the raw doctype if "raw" argument to constructor is set to a true value, otherwise returns a hashref with the following keys/values: $VAR1 = { 'doctype' => 'HTML 4.01 Strict + url', 'xml_prolog' => 0, 'non_white_space' => 0, 'has_doctype' => 1, 'mime' => 'text/html; charset=UTF-8' }; "doctype" { 'doctype' => 'HTML 4.01 Strict + url', } The "doctype" key will contain the name of the doctype (e.g. HTML 4.01 Strict) and possibly words "+ url" indicating that a known DTD URI is also specified. If DTD URI is not recognized the "doctype" value will say so, if doctype is not recognized the "doctype" value will have the doctype as is. If the page does not have a doctype then "doctype" will contain an empty string. "xml_prolog" { 'xml_prolog' => 0, } The "xml_prolog" key will have the number of XML prologs present before the doctype. "non_white_space" { 'non_white_space' => 0, } The "non_white_space" key will contain the number of non-whitespace characters (excluding XML prologs) present before the doctype. "has_doctype" { 'has_doctype' => 1 } The "has_doctype" key will have either true or false value indicating whether or not the doctype was found on the page. "mime" { 'mime' => 'text/html; charset=UTF-8' } The "mime" key will contain the value of the "Content-type" header. "error" $grabber->grab('http://zoffix.com') or die $grabber->error; Takes no arguments, returns an error message explaining why "grab()" method failed. "result" print "Last doctype: " . $grabber->result->{doctype}; Must be called after a successful call to "grab()" method. Takes no arguments, returns the exact same hashref (or raw doctype) last call to "grab()" returned. "doctype" $grabber->grab('http://zoffix.com'); print "Doctype is: " . $grabber->doctype . "\n"; # or print "Doctype is: $grabber\n"; Must be called after a successful call to "grab()" method. Takes no arguments, returns an "info string" which indicates what doctype is present on the page (see "doctype" key in "grab()"'s return value) as well as mention about the XML prolog and any non-whitespace characters present. If no doctype was found on the page the string will only contain words "NO DOCTYPE". If "raw" argument (see CONSTRUCTOR) is set to a true value the "doctype()" method will return the same raw doctype as "result()" and "grab()" method would. Note: this method is overloaded for "q|""|" thus you can simply interpolate your object in a string to call this method. "raw" my $do_get_raw = $grabber->raw; $grabber->raw( 1 ); This method is an accessor/mutator of constructor's "raw" argument. See "CONSTRUCTOR" section for details. When given the optional argument will assign a new value to "raw" argument. "ua" my $old_ua = $grabber->ua; $grabber->ua( LWP::UserAgent->new( agent => 'foos' ) ); Returns a current LWP::UserAgent object used for retrieving doctypes. When called with its optional argument which must be an LWP::UserAgent object will use it in any subsequent calls to "grab()" AUTHOR Zoffix Znet, "" (, ) BUGS Please report any bugs or feature requests to "bug-www-doctypegrabber at rt.cpan.org", or through the web interface at . I will be notified, and then you'll automatically be notified of progress on your bug as I make changes. SUPPORT You can find documentation for this module with the perldoc command. perldoc WWW::DoctypeGrabber You can also look for information at: * RT: CPAN's request tracker * AnnoCPAN: Annotated CPAN documentation * CPAN Ratings * Search CPAN COPYRIGHT & LICENSE Copyright 2008 Zoffix Znet, all rights reserved. This program is free software; you can redistribute it and/or modify it under the same terms as Perl itself.