0

相対パスを絶対パスに変更する

LWP等で取得してきたコンテンツをごにょごにょしようとしてもリンク先が相対パスだったら画像等がリンク切れで非常に扱いにくい。
後にその画像だけを取得したい時等。

これがすべて下記のように変換されていると何かと便利
<img src="../../header.gif" />

<img src="http://japan.cnet.com/news/header.gif" />

URIモジュールを使うのその変換を数行のコードでやってくれます。

#!/usr/bin/perl -w
 
use strict;
use warnings;
use utf8;
use LWP;
 
 
my $link = 'http://japan.cnet.com/news/business/story/0,3800104746,20416479-0,00.htm';
 
my $ua = LWP::UserAgent->new;
my $res = $ua->get($link);
 
my $content = $res->content;
 
$content =~ s/href=("|')(\S*)("|')/&change_path($1, $2, $3, $link, 'href=')/gei;
$content =~ s/src=("|')(\S*)("|')/&change_path($1, $2, $3, $link, 'src=')/gei;
 
print $content;
 
sub change_path {
my ($pre, $path, $sur, $link, $element) = @_;
my $uri = URI->new_abs($path, $link);
 
return $element . $pre . $uri . $sur;
}

これで取得したコンテンツのリンクはすべて絶対パスに変わります。
正規表現駆使してやらずともできるのはうれしい。

大阪のWEB屋です。

コメントを残す

メールアドレスが公開されることはありません。 * が付いている欄は必須項目です