Net::Domain::Info - request for domain information like whois, dns, seo


Net-Domain-Info documentation Contained in the Net-Domain-Info distribution.

Index


Code Index:

NAME

Top

Net::Domain::Info - request for domain information like whois, dns, seo

SYNOPSIS

Top

If you use just this module, then you receive only IDNA domain support. The main power of this module is contained in plugins. Usage of plugins is simple: you need provide their names in the import list.

	use Net::Domain::Info qw(::Whois ::SEO); # used Whois and SEO plugins
	use Encode;

	my $domain_raw = 'нфтвучюкг.com';
	my $domain_idn = Encode::decode_utf8 ($domain_raw);
	my $domain_asc = 'xn--b1acukzhe1a7d.com';

	my $domain_info = Net::Domain::Info->new ($domain_idn);

	ok $domain_info;
	ok $domain_info->name eq $domain_asc;
	ok $domain_info->idn  eq $domain_idn;

METHODS

Top

new

Creates domain info object.

name

Returns ASCII representation of domain name.

idn

Returns IDNA representation of domain name.

AUTHOR

Top

Ivan Baktsheev, <apla at the-singlers.us>

BUGS

Top

Please report any bugs or feature requests to my email address, or through the web interface at http://rt.cpan.org/NoAuth/ReportBug.html?Queue=Net-Domain-Info. I will be notified, and then you'll automatically be notified of progress on your bug as I make changes.

SUPPORT

Top

ACKNOWLEDGEMENTS

Top

COPYRIGHT & LICENSE

Top


Net-Domain-Info documentation Contained in the Net-Domain-Info distribution.
package Net::Domain::Info;

use Class::Easy;

use Net::Domain::Info::IDN;
use Encode;

use vars qw($VERSION);
$VERSION = '0.02';

has 'idn';
has 'name';

sub import {
	# this class doesn't export any functions as long as it's
	# completely object oriented, but with help of export list
	# you can configure which plug-ins to use
	# use Net::Domain::Info qw(::Whois); # used Net::Domain::Info::Whois plugin
	
	my $package = shift;
	my @plugins = @_;
	
	foreach my $plugin_tag (@plugins) {
		
		my $plugin = $plugin_tag;
		$plugin = "${package}${plugin_tag}"
			if $plugin_tag =~ /^::/;
		die "can't require package '$plugin'"
			unless try_to_use ($plugin);
		
		warn "plugin '$plugin' must contain '_init' method, skipped"
			unless $plugin->can ('_init');
		
		$plugin->_init ($package);
	}
}

sub new {
	my $class  = shift;
	my $domain = shift;
	
	# if idn prefixed with xn--, then reverse-decode must occur
	
	my $object = {idn => $domain};
	
	if (
		$domain =~ /^$Net::IDN::Encode::IDNA_prefix/
		and $domain =~ /^([0-9a-z]+[0-9a-z\-]+\.)+[0-9a-z]+[0-9a-z\-]+$/i
	) {
		$object->{name} = $domain;
		$object->{idn}  = Net::IDN::Encode::domain_to_unicode ($domain);
	} elsif ($domain !~ /^([0-9a-z]+[0-9a-z\-]+\.)+[0-9a-z]+[0-9a-z\-]+$/i) {
		unless (Encode::is_utf8 ($domain)) {
			$domain = Encode::decode_utf8 ($domain);
		}
		
		$object->{name} = Net::IDN::Encode::domain_to_ascii (
			$domain
		);
		$object->{idn}  = $domain;
	} else {
		$object->{name} = $domain;
		$object->{idn}  = $domain;
	}
	
	bless $object, $class;
}

1;