package Data::OpenGraph::Parser; use strict; use HTML::Parser; sub new { my $class = shift; my $parser = HTML::Parser->new( api_version => 3, start_h => [ sub { my ($self, $tag, $attr) = @_; return unless $tag eq 'meta'; my $prop = $attr->{property}; my $content = $attr->{content}; return unless $prop && $content; return unless $prop =~ s/^og://; $self->{properties}->{$prop} = $content; }, "self, tagname, attr" ], ); return bless { parser => $parser }, $class; } sub parse_string { my ($self, $string) = @_; my %properties; my $parser = $self->{parser}; local $parser->{properties} = \%properties; $parser->parse($string); $parser->eof; return \%properties; } 1;