The Perl Toolchain Summit needs more sponsors. If your company depends on Perl, please support this very important event.
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;