7月 9th, 2010相対パスを絶対パスに変更する
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;
}
これで取得したコンテンツのリンクはすべて絶対パスに変わります。
正規表現駆使してやらずともできるのはうれしい。