2011-07-23 18 views
0

毎日の長さが変化するperlで文字列を取得する必要があります。以下のURLコンテンツをご覧くださいウェブページから未知の長さの文字列を取得する方法

<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 3.2 Final//EN"> 
<html> 
<head> 
<title>Index of /isos/preFCS5.3/LATESTGOODCVP</title> 
</head> 
<body> 
<h1>Index of /isos/preFCS5.3/LATESTGOODCVP</h1> 
<table><tr><th><img src="/icons/blank.gif" alt="[ICO]"></th><th><a href="?C=N;O=D">Name</a></th><th><a href="?C=M;O=A">Last  modified</a></th><th><a href="?C=S;O=A">Size</a></th><th><a href="?C=D;O=A">Description</a></th></tr><tr><th colspan="5"><hr></th></tr> 
<tr><td valign="top"><img src="/icons/back.gif" alt="[DIR]"></td><td><a href="/isos/preFCS5.3/">Parent Directory</a></td><td>&nbsp;</td><td align="right"> - </td></tr> 
<tr><td valign="top"><img src="/icons/unknown.gif" alt="[ ]"></td><td><a href="CVP-LATEST-5.3.0.37.iso">CVP-LATEST-5.3.0.37.iso</a></td><td align="right">19-Jul-2011 03:32 </td><td align="right">816M</td></tr> 
<tr><td valign="top"><img src="/icons/unknown.gif" alt="[ ]"></td><td><a href="ChangeLog-LATEST.2011-07-19-03h.30m.01s">ChangeLog-LATEST.2011-07-19-03h.30m.01s</a></td><td align="right">19-Jul-2011 03:32 </td><td align="right"> 16K</td></tr> 
<tr><td valign="top"><img src="/icons/unknown.gif" alt="[ ]"></td><td><a href="is.iso">is.iso</a></td><td align="right">19-Jul-2011 03:32 </td><td align="right">816M</td></tr> 
<tr><td valign="top"><img src="/icons/unknown.gif" alt="[ ]"></td><td><a href="md5SUM">md5SUM</a></td><td align="right">19-Jul-2011 03:32 </td><td align="right">111 </td></tr> 
<tr><th colspan="5"><hr></th></tr> 
</table> 
<address>Apache/2.2.3 (Red Hat) Server at www.google.com Port 80</address> 
</body></html> 

"CVP-LATEST-5.3.0.37.iso"という文字列が表示されます。 これを$ nameに入れる必要があります。 文字列CVP-LATEST-5.3.0.37.isoは、毎日 、またはCVP-LATEST-5.3.0.39.isoまたはCVP-LATEST-5.3.39a.iso、またはCVP-LATEST-6.1.isoまたはCVP- LATEST-6.23.23.112.iso。

私はこれを得る方法はありますか?ここで

は、コードあなたがそのは5.3.0の後にのみ番号(XX)を取得したコードを見ればここで

use strict; 
use warnings; 
use LWP::Simple; 

my $oldVersion = CVP-LATEST-5.3.0.37.iso; 
my $url  = 'http://www.google.com/isos/preFCS5.3/LATESTGOODCVP/'; 

my $newPage = get($url) 
or die "Cannot retrieve contents from $url\n"; 

if ($newPage =~ /href=\"CVP-LATEST-5\.3\.0\.(\d\d)/) { 
my $version = $1; 

if ($version != $oldVersion) { 
    my $status = getstore($url . "CVP-LATEST-5.3.0.$version.iso", 
          "CVP-LATEST-5.3.0.$version.iso"); 
} else { 
    print "Already at most recent version\n"; 
} 

} else { 
die "Cannot find version tag in contents from $url\n"; 
} 

。「XX」で、2

ある既知の長さでありますとにかく、ファイル名全体を読むように変更することができますか? CVP-LATEST-XXXXXX * .isoと比較して$ oldversionと比較しますか?

文字列 "CVP-LATEST-"と ".iso"は一定のままですが、後の数字は変更され、アルファベットも含まれることに注意してください。 URLコンテンツにis.isoというファイルがもう1つ存在することにも注意してください。私はそれを取得したくありません。

+1

があなたの前の質問の一部に対する回答を受け付けてくださいダブルクォート、正規表現ではなくHTMLに。あなたはそうしないことによって人々があなたの質問に答えるのをやめさせています。 – Zaid

答えて

0

if ($newPage =~ /href=\"CVP-LATEST-(.*?)\.iso\"/) { 
    my $name = "CVP-LATEST-${1}.iso"; 

$nameを試してみては、全体のファイル名が含まれています。

+0

$ nameには何が入っていますか?それは全体の文字列(CVP-LATEST-XX * .iso)を持っていますか? $ nameに入るためには文字列全体が必要だからです。また、私はあなたのコードで1 "だけを参照してください?申し訳ありませんが、私は現在、コードを試していません。それ以来、私は – mac

+0

@ macのリンクにアクセスできません。 – marc

+0

ありがとうございます、しかし、私はあなたがライン1の "(double_quote)を見逃したと思います。 – mac

2

HTMLを解析するときにHTMLを解析する方法を知っているモジュールを使用する必要があります。

あなたの質問はよく聞かれます。

perldoc -q url 

How do I extract URLs? 

use HTML::SimpleLinkExtor; 
... 
my $extor = HTML::SimpleLinkExtor->new(); 
$extor->parse($newPage); 
my($version) = grep /^CVP-LATEST-.*\.iso/, $extor->href; 
+0

このモジュールを使用してウェブサイトのタイムスタンプを取得することは可能ですか?私はちょうど私が更新をチェックするために使用すべきパラメータを混同しました。ファイル名またはタイムスタンプをチェックするかどうか。 – mac

+0

「ウェブサイトのタイムスタンプ」とは、何時ですか? – tadmc

+0

上記のWeb-Sourceを見ると、「CVP-LATEST-5.3.0.37.iso」と同じ行に「19-Jul-2011 03:32」と表示されます。 。エポックで時間を取得し、保存した時間を比較し、ファイル名(CVP-LATEST-5.3.0.37.iso)を取得して比較することをお勧めします。 – mac

0

秘密

/href="([^"]*)"/i