• ベストアンサー

ホームページの更新日時の取得

use LWP::Simple; ($content_type, $document_length, $modified_time, $expires, $server) = head $url; とすると,$modified_timeに$urlのアドレスのWebページの更新日時が 得られるとあったのですが,何も値が取得できないのはなぜでしょうか. $expiresにだけ NCSA/1.3という値が入っていました.

質問者が選んだベストアンサー

  • ベストアンサー
  • syg
  • ベストアンサー率54% (6/11)
回答No.3

LWP::UserAgent使ってましたがtimeoutがうまくいってくれないので 使うのをやめてしまいました。^^; で、日付が取得できないのはどのサーバーでもでしょうか? サーバーによっては日付取得させてくれないのもあるみたいです。 仕組みがわかってしまえばsocketも簡単ですから、LWP::Simpleに 頼らず自力で書いてしまっては?参考URLを見れば必要なコマンドも わかりますし。 http://rie.h.kobe-u.ac.jp/~ohkubo/script.shtml のsky_lib.plなんかも参考になります。

参考URL:
http://www.glasscom.com/tone/articles/nos1998b/www/
sunasearch
質問者

補足

参考URLをありがとうございます.大変参考になりました. LWPでは日付が取得できるサーバとできないサーバがあるようです. 素人な者ですこしお伺いしたいのですが, 自力で書くというのは HTTP::Requestなどでヘッダ情報を取得するということでしょうか? LWPで取得できない場合に,「自力」で書くと取得できるようになるのでしょうか?

全文を見る
すると、全ての回答が全文表示されます。

その他の回答 (3)

  • dany
  • ベストアンサー率35% (27/77)
回答No.4

>LWPでは日付が取得できるサーバとできないサーバがあるようです. LWPではというよりも、設定なのかなんなのか、そういうサーバーは 存在します。取得できないページをNetscapeで見て[情報を見る]を やってみてください。同じように日付が取得できないのではないかと。 WWWDがそうですが、HEADで更新日が取得できないもの、動的出力される ページなどは、ページのサイズを見て更新されたかどうかを判断 しています。もし更新チェッカを作ろうとしているのならばサイズで 判断してはどうでしょう。 >自力で書くというのは >HTTP::Requestなどでヘッダ情報を取得するということでしょうか? 違います。use Socket;のみ用いて、あとのやりとりは全て自前で 書くということです。前回参考としてあげたURLにtelnetでアクセス する方法がありますが、まさにそれをperlでやるのです。 そのほうがあらゆる環境で動くものが作れますし、モジュールに まかせっきりよりか、何が問題なのかがわかってくるでしょう。 Socketの使い方は同じく前回あげたsky_lib.plが参考になります。

sunasearch
質問者

お礼

ありがとうございます. いろいろと勉強になります. 一説によると,サーバのバージョンが古くてLast-modifiedに対応していないのではとのことでした. どうやら,そのようなサーバのHPはgoogleでは検索されるのに, 更新日時も表示するgooでは検索にひっかからないようです. gooの人たちが頑張ってもだめということは, 取得は不可能という結論でいいのかな.

全文を見る
すると、全ての回答が全文表示されます。
回答No.2

CGIは正常に稼動してますでしょうか?

sunasearch
質問者

補足

get $url; でWebページを獲得することはできています.

全文を見る
すると、全ての回答が全文表示されます。
回答No.1

Perlはサーバに対応してますか? もし、無理であるならばJavaで取得するってのはどうでしょうか?

sunasearch
質問者

補足

早速の回答ありがとうございます. 「Perlがサーバに対応」の意味が少しわかりかねるのですが, もう少し詳しい説明が頂けないでしょうか? よろしくお願いします.

全文を見る
すると、全ての回答が全文表示されます。

関連するQ&A

  • LWPによるページ取得の問題

    すいません、アホです。いろいろ調べましたが、まったくみつかりませんでした。この質問をすることは初歩すぎて失礼かとおもいますが、堪忍してくださいませ。 LWPで相互リンクをされているかどうかをCGIファイルの登録ページ後に判断したいプログラムですが、同じCGIファイル内に登録ページがありまして、<INPUT size=30 name=url>のように相手リンクを登録した自分のHTMLを書いてsubmitさせて、 if ($ENV{'REQUEST_METHOD'} eq "POST") { read(STDIN,$buffer,$ENV{'CONTENT_LENGTH'}); } else { $buffer = $ENV{'QUERY_STRING'}; } で、取り出し、$FORM{'url'}まできます。URLがちゃんと$FORM{'url'}に入っているのは画面で確認できるのですが、下記のように指定した場合、相手HTMLを取得できません。エラーメッセージはでないで、真っ白い画面がでます。 $url = $FORM{'url'}; use LWP::Simple; $content = get("$url"); print "Content-type: text/html\n\n$content"; 下記はちゃんとうつります。 $url = 'http://www.yahoo.co.jp'; use LWP::Simple; $content = get("$url"); print "Content-type: text/html\n\n$content"; これは$FORM{'url'}のエンコードの問題なのでしょうか? まことに申し訳ありませんが、その方法をできれば具体的にお教えくださいませ。 何卒、宜しく御願いいたします。m_ _ m

  • LWPモジュールについて教えてください。

    プログラミングは初心者です。 LWPモジュールのサブクラスLWP::Simpleの get()という関数を使いたいです。 現在、Perlは5.005_3を使用しています。 use LWP::Simple; require LWP::Simple; ・ get(URL) と入れると、500 Internal Server Errorと言うものが出てしまいます。 LWPを使うとき、どのようにすれば使えるのかご指導お願いいたします。

    • ベストアンサー
    • Perl
  • ホームページの更新日時を操作したい

    ホームページの更新日時を操作したい javascript:alert(document.lastModified) などでホームページの更新日時を確認することが出来ますが、これって通常、サーバーにファイルをアップロードした時点の日付時刻になりますよね。これを、ローカルでファイルを更新、上書きした日付時刻(ファイルのプロパティで表示されるタイムスタンプ)にしたいのですが、FTPソフトでそのような設定は可能でしょうか?たとえば2010年10月25日に上書き保存したhtmlファイルを、サーバーにアップするのが2010年10月31日になってしまっても、ブラウザなどで閲覧者が確認できる更新日時はあくまで2010年10月25日としたい、ということです。 今使っているFTPソフトはWinSCPというものですが、他のソフトのご説明でも構いません。 よろしくおねがいします。

  • perlチェックでエラーが出て困ってます

    csvファイルが存在するかどうか確認するためif節でheadを使っています $data_hokkaido = "http://denkiyoho.hepco.co.jp/data/juyo_hokkaidou.csv"; if (head "$data_hokkaido" ){ use LWP::Simple; $content = get($data_hokkaido); } こうするとエラーになるのでperlチェックをしてみたところ String found where operator expected at test.cgi line 393, near "head "$data_hokkaido"" (Do you need to predeclare head?) と警告が出ました if節を外して $data_hokkaido = "http://denkiyoho.hepco.co.jp/data/juyo_hokkaidou.csv"; use LWP::Simple; $content = get($data_hokkaido); とするとエラーは出ず、問題なくデータ取得できるので、headに原因があるのだと思いますが、具体的に何が悪いのでしょうか? ちなみに何のデータを取得しているかと言いますと、電力各社の電気予報のデータで、 エラーが出るのは北海道電力ので、同じようにファイルがダウンロードされる形式になっている関西電力部分 $data_kansai = "http://www.kepco.co.jp/yamasou/juyo1_kansai.csv"; if (head "$data_kansai" ){ use LWP::Simple; $content = get($data_kansai); } ではエラーは出ません 理由がお分かりの方ぜひ教えてください。 よろしくお願いします。

    • ベストアンサー
    • Perl
  • 他のサーバーにあるファイルの存在確認をしたい

    データを取得するため、他のサーバーにあるファイルの存在確認をしたいのですが、どのようにすればいいでしょうか? ファイルは普通に公開されているファイルです 他の方の質問の回答にもあった if(head "$data"){ use LWP::Simple; $content = get($data); } #$dataは別行でURLを指定してます という方法を試したのですがわざと存在しないファイル名を指定したところtrueが返り、ifの中に入っていって存在しないファイルを取得しようとしてgetでエラーになってしまいましたし、存在するファイル名を指定してみてもやはりifの中に入ってそのままデータの取得ができました (ファイルが存在するしないにかかわらずif分岐がtrueになりました) 他に if(-e "$data"){ use LWP::Simple; $content = get($data); } #$dataは別行でURLを指定してます とやってみましたがこれは逆に存在するファイル名をしていても全てifの中に入っていかずfalseが返ってきました なお、確認したいファイルはcsvです

  • 動的ファイルの最終更新日を取得する方法はありませんか

    はじめまして。 静的なファイルであれば、javascript:alert(document.lastModified) や (stat 'ファイル名')[9]で最終更新日の取得ができますが CGIやPHP、サーバから送り出される際自動的に広告が挿入されるHTMLの 最終更新日を読むことは出来ないものなのでしょうか。 (例えば、日付を保持してミラーリングするなど) CGI設置不可・自動広告挿入のとあるWEBスペースに  相当数のHTMLファイルを置いており、 これのファイルリストを作りたいと思っています。 別の、CGI可のサーバに置いたスクリプトから LWP::SimpleやWgetを使ってヘッダ取得を試してみましたが やはり(当たり前といえば当たり前なのですが) タイムスタンプはスクリプトを作動させた日付になってしまいます。 ※今回リスト化したいファイルのあるサーバは、  CGIの置けないサーバですが、もし置ける環境であっても  stat関数では動的なファイルのLastModifiedは読めませんよね? もし何か良い方法をご存じでしたらぜひご教示ください。 何卒宜しくお願いします。

    • ベストアンサー
    • Perl
  • perlによるxmlファイルの取得

    あるサーバにあるxmlファイルの内容を取得する為に use LWP::Simple; $url = "http://***/***.xml"; #取得するXMLファイル $text = get($url); 以上の様な方法を用いたのですが、目的のxmlファイルを取得する際のみ、$textに格納される内容が『1文字ごとに半角スペースのようなもので区切られている』という意図しないものになってしまいます。 他のxmlファイルは問題なく取得できるのですが・・・・・・何か特別な方法が必要なのでしょうか。

    • ベストアンサー
    • Perl
  • LWP Cookie取得

    恐れ入ります。 LWPで、特定サイトにアクセスした時に発行されるCookieを任意のディレクトリに保存したいのですが、どのようにしたらよいかわかりません。 use HTTP::Cookies; use LWP::UserAgent; $ua = LWP::UserAgent->new(); $cookie_file = './cookie/xxx.txt'; $cookie_jar = HTTP::Cookies->new(file => $cookie_file, autosave => 1); $url = "http://~~"; $response = $ua->get($url); print $response->content; で、コンテンツは表示されますが、xxx.txtにcookieが保存されません。 #LWP-Cookies-1.0 のみが記載された白紙のxxx.txtが精製されます。 よろしくお願いします。

    • ベストアンサー
    • Perl
  • LWPでヘッダー情報をあらかじめ取得したい

    例えば、下記のようなスクリプトの場合、一度画像が保存された後、ファイルサイズをを抜き出すようになります。 ダウンロード前に、ファイルサイズをあらかじめ知りたいのですがどのようにしたら良いでしょうか? use strict; my $url = "http://img.www.goo.ne.jp/img/gh_logo.png"; use LWP::UserAgent; use HTTP::Cookies; use HTTP::Request; use HTTP::Headers; my $req = HTTP::Request->new(GET => $url); my $ua = LWP::UserAgent->new; $ua->agent( 'Mozilla/5.0 (Windows NT 6.0; rv:12.0)' ); $ua->timeout('10'); $ua->max_redirect(); $ua->cookie_jar( HTTP::Cookies->new( file => '', autosave => 1, )); my $res = $ua->request($req, "save.png"); my $file_size = $res->header("content-length"); print $file_size;

    • ベストアンサー
    • Perl
  • web文書を取得するプログラムのサイト内での不具合について

    perl初心者です。 自分のwebサイトのコードを取得するプログラムをつくろう と思っているのですが、下のコード -------------------------------------------------------- #!/usr/local/bin/perl use LWP::UserAgent; use HTTP::Request; use HTTP::Response; our $URL = 'http://www.google.co.jp/'; # アクセスする URL my $proxy = new LWP::UserAgent; my $req = HTTP::Request->new('POST' => $URL); # HTTP リクエストを作成 my $res = $proxy->request($req); # $res に HTTP レスポンスが返ってくる print $res->content; # HTML を表示 1; --------------------------------------------------------------- でターゲットのurlが上のgoogleだと取得できるんですが 自サイトのurl'http://○○.××.△△.com/'だと 500 Internal Server Errorとなってしまいます。 因みにレンタルサーバーを利用しています。 サーバーでは技術的な質問は受け付けてないとの事なので、 スクリプトの質問とは少しズレますが分る方がいましたら ご教えていただきたく質問いたしました。

プリンター起動時、ERRとDraum
このQ&Aのポイント
  • プリンター起動時に表示されるERRとDraumについて解説します。
  • ERRとDraumの表示が出て印刷できない原因と解決策について説明します。
  • ブラザー製品のプリンターが起動時にERRとDraumのエラーメッセージを表示する場合、印刷できない状態になる可能性があります。
回答を見る

専門家に質問してみよう