package WWW::Wikipedia::TemplateFiller::Source::DrugbankId; use base 'WWW::Wikipedia::TemplateFiller::Source'; use warnings; use strict; use Tie::IxHash; sub search_class { 'DrugBank' } sub get { my( $self, $drugbank_id ) = @_; my $drug = $self->_search($drugbank_id); return undef unless $drug; return $self->__source_obj( { __source_url => $drug->{_url}, %$drug } ); } sub template_name { 'drugbox' } sub template_ref_name { 'drug'.shift->{accession_number} } sub template_basic_fields { my $self = shift; my $cat = $self->{category}; my @atc_codes = map { /^(...)(....)$/; { prefix => $1, suffix => $2 }; } map { $_->{code}; } grep { length $_->{code} == 7 } @{ $cat && $cat->{atc} || [] }; my $first_atc = shift @atc_codes; my $supplemental_atc = join ', ', map { sprintf '{{ATC|%s|%s}}', $_->{prefix}, $_->{suffix} } @atc_codes; ( my $chemical_formula_html = $self->{chemical_formula} )=~ s~(\d+)~$1~g; my $melting_point; if( $self->{melting_point} ) { $self->{melting_point} =~ /(\d+\.\d+)/; $melting_point = $1; } tie( my %fields, 'Tie::IxHash' ); %fields = ( IUPAC_name => { value => $self->{chemical_iupac_name} }, image => { value => '{{PAGENAME}}.png' }, width => { value => undef, show => 'if-filled' }, image2 => { value => undef, show => 'if-filled' }, CAS_number => { value => $self->{cas_registry_number} }, CAS_supplemental => { value => undef, show => 'if-filled' }, ATC_prefix => { value => $first_atc->{prefix} }, ATC_suffix => { value => $first_atc->{suffix} }, ATC_supplemental => { value => $supplemental_atc, show => 'if-filled' }, PubChem => { value => $self->{pubchem_id}->{compound} }, DrugBank => { value => $self->{accession_number} }, chemical_formula => { value => $chemical_formula_html }, molecular_weight => { value => $self->{molecular_weight} }, smiles => { value => $self->{smiles_string}, show => 'if-extended' }, density => { value => undef, show => 'if-filled' }, melting_point => { value => $self->{melting_point}, show => 'if-extended' }, boiling_point => { value => undef, show => 'if-filled' }, solubility => { value => $self->{h2o_solubility}, show => 'if-filled' }, specific_rotation => { value => undef, show => 'if-filled' }, sec_combustion => { value => undef, show => 'if-filled' }, bioavailability => { value => undef }, protein_bound => { value => $self->{protein_binding} }, metabolism => { value => undef }, 'elimination_half-life' => { value => $self->{half_life} }, excretion => { value => undef }, dependency_liability => { value => undef, show => 'if-filled' }, # New field from David Ruben pregnancy_AU => { value => '' }, pregnancy_US => { value => '' }, pregnancy_category => { value => undef }, legal_AU => { value => '' }, legal_UK => { value => '' }, legal_US => { value => '' }, legal_status => { value => undef }, routes_of_administration => { value => undef }, ); return \%fields; } 1;