package OpenIDHack; use strict; use warnings; use Web::Scraper::Config; use Data::Dumper; use DateTime::Format::Natural; use DateTime; use base qw/Class::Accessor/; use utf8; __PACKAGE__->mk_accessors(qw/config/); sub detect { my $self = shift; my $identity = shift; my $suffix = undef; foreach my $key ( keys %{ $self->{config} } ) { my $match = $self->{config}{$key}{match}; if ( $identity =~ /$match/ ) { $suffix = $key; } } return $suffix; } sub identity_key { my $self = shift; my $identity = shift; my $suffix = shift; my $regex = $self->{config}{$suffix}{identity_key}; my $identity_key = ( $identity =~ m/$regex/ )[0]; return $identity_key; } sub get { my $self = shift; my $identity = shift; if ( my $suffix = $self->detect($identity) ) { my $res = {}; my $identity_key = $self->identity_key( $identity, $suffix ); return unless $identity_key; my $user_key = $identity_key . '-' . $suffix; eval { my $scraper = Web::Scraper::Config->new( $self->{config}{$suffix}{conf} ); my $url = sprintf( $self->{config}{$suffix}{profile}, $identity_key ); $res = $scraper->scrape( URI->new($url) ); $res->{user_key} = $user_key ; $res->{bio} ||= '秘密'; $res->{nickname} ||= '名無し'; $res->{interest} ||= '秘密'; $res->{gender} = &_gender( $res->{gender} ) ; $res->{bday} = &_bday( $res->{bday} ) ; $res->{icon} ||= ''; return $res; }; if ($@) { return { user_key => $user_key }; } return $res; } else { return ; } } sub _bday { my $bday = shift; my $result = ''; return $result unless $bday; eval { my $parser = DateTime::Format::Natural->new(); my $dt = $parser->parse_datetime( $bday ); $result = $dt->ymd(); }; return $result; } sub _gender { my $gender = shift; if( $gender =~ /男性|Male/ ) { return 1; } elsif( $gender =~ /女性|Female/ ) { return 0; } else { return 2; } } 1;