Я пытаюсь отсканировать текст статьи в базе данных joomla для URI, которые приводят к 404. Если 404 найден, удалите якорь и просто оставьте полученный текст.
Код ниже успешнов поиске URI, но я понятия не имею, как затем удалить их из основного текста, оставив только текстовую часть ссылки.
Функция fetch_body () возвращает указатель на статью, гдеможно получить доступ к идентификатору, полному тексту и другим характеристикам.
Я также экспериментировал с HTTP :: Tiny, чтобы загрузить URL-адрес и проверить состояние, и, похоже, он работает правильно.
Есть лисуществующий модуль, который я могу использовать для удаления URL, оставляя только текст? Можно ли использовать URI :: Find: Simple для возврата всего HTML (якоря?), Окружающего URI?
Я не знаю, какую дополнительную информацию я могу предоставить, чтобы помочь мне определить, что делать дальше.
foreach my $ref (fetch_body($dbh)) {
print "checking body: $ref->{'id'} ";
my @uris = URI::Find::Simple::list_uris($ref->{fulltext});
foreach my $uri (@uris) {
print "current uri: $uri\n";
# check uri for status code here ***
my $response = HTTP::Tiny->new->get($url);
if ($response->{success}) {
print "status: $response->{'status'}\n";
} else {
print "Failed: $response->{status} $response->{reasons}\n";
}
}
}
Эти две другие функции просто открывают базу данных и возвращают указатель на статью в базе данных joomla.
sub db_connect() {
my %DB = (
'host' => 'db.example.com',
'db' => 'db5',
'user' => 'joomla',
'pass' => 'joomlapass',
);
return DBI->connect("DBI:mysql:database=$DB{'db'};host=$DB{'host'}",$DB{'user'}, $DB{'pass'});
}
sub fetch_body ($) {
$dbh = shift;
my $sql = "select id, title, alias, urls, \`fulltext\`
FROM xxx_content
WHERE state = 1";
my $sth = $dbh->prepare($sql);
my @rv = ();
$sth->execute();
while (my $ref = $sth->fetchrow_hashref()) {
push @rv, $ref;
}
$sth->finish();
return @rv;
}