mourningdove/cgi-bin/DW/External/Page.pm
2026-05-24 01:03:05 +00:00

60 lines
1.5 KiB
Perl

#!/usr/bin/perl
#
# DW::External::Page
#
# This class is for Page objects, which hold information from pages on other sites.
#
# Authors:
# Janine Smith <janine@netrophic.com>
#
# Copyright (c) 2009 by Dreamwidth Studios, LLC.
#
# This program is free software; you may redistribute it and/or modify it under
# the same terms as Perl itself. For a copy of the license, please reference
# 'perldoc perlartistic' or 'perldoc perlgpl'.
#
package DW::External::Page;
use strict;
use warnings;
use HTML::TokeParser;
sub new {
my ( $class, %opts ) = @_;
my $url = LJ::durl( $opts{url} );
return undef unless $url;
my $ua = LJ::get_useragent( role => 'share' );
$ua->agent($LJ::SITENAME);
my $res = $ua->get($url);
my $content = $res && $res->is_success ? $res->content : undef;
return undef unless $content;
my $p = HTML::TokeParser->new( \$content );
my $title;
if ( $p->get_tag('title') ) {
$title = $p->get_trimmed_text;
}
my $description;
while ( my $token = $p->get_tag('meta') ) {
next unless $token->[1]{name} && $token->[1]{name} eq 'description';
$description = LJ::trim( $token->[1]{content} )
if $token->[1]{content};
}
return bless {
url => $url,
title => $title || '',
description => $description || '',
}, $class;
}
sub url { $_[0]->{url} }
sub title { $_[0]->{title} }
sub description { $_[0]->{description} }
1;