PerlでGoogle NewsのRSSを取得する方法とは?

このQ&Aのポイント
  • PerlでGoogle NewsのRSSを取得する方法について教えていただいたが、取得したページ表示データにはRSS特有のタグが抜け落ちており、その後の解析ができないことが分かった。
  • RSS特有のタグも含めたRSS情報を入手する方法はあるのか尋ねたい。
  • 直接URLを入力することで、ブラウザでRSS情報を確認できるが、それと同様の方法でPerlプログラム内で取得する方法はないか聞きたい。
回答を見る
  • ベストアンサー

Perlでgoogle newsのRSSを取得2

質問を閉め切った直後に気付いたもので、すいません!! QNo.3797932の、つづきなのですが、、、 教えていただいた以下の方法 ------------------------- #!/usr/local/bin/perl use LWP::Simple; use XML::RSS; use LWP::UserAgent; my $url = 'http://news.google.com/news?hl=ja&ned=us&ie=UTF-8&oe=UTF-8&output=rss&q=aiko'; my $ua = new LWP::UserAgent; my $responce = $ua->get($url, 'User-Agent' => 'Mozilla/4.0'); my $data_from_web = $responce->content; print <<"HTML"; Content-type: text/html <html> HTML print $data_from_web; exit; ------------------------- の場合だと、ページ表示データは取得できるのですが、RSS特有のタグが 抜け落ちる為、その後の解析ができない事に気付きました。 なんとか、RSS特有のタグも含めてのRSS情報を入手する方法はないでしょうか? ちなみに、RSS特有のタグも含めてのRSS情報は、ブラウザーのURLの窓に http://news.google.com/news?hl=ja&ned=us&ie=UTF-8&oe=UTF-8&output=rss&q=aiko このアドレスを直接入力してリターンキーを押すと、確認する事ができます。 度々申し訳ないのですが、よろしくご指導、お願い致します。

  • Perl
  • 回答数3
  • ありがとう数4

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

  • ベストアンサー
回答No.3

>で、目的はニュース記事のタイトルとリンク抽出なので、 >&gt;&lt;title&gt; >と >&lt;/title&gt;&lt; >で囲まれた部分、及び、 >link&gt;&lt;guid isPermaLink=&quot;false&quot;&gt; >と >&lt;/guid&gt;&lt; >に囲まれた部分を抽出する方法 やっぱり,回答1は的外れじゃないか(笑) 予想はしてたけど。 #!/usr/local/bin/perl use LWP::Simple; use XML::RSS; use LWP::UserAgent; use XML::XPath; use XML::DOM; sub getData{ my $url = 'http://news.google.com/news?hl=ja&ned=us&ie=UTF-8&oe=UTF-8&output=rss&q=aiko'; my $ua = new LWP::UserAgent; my $response = $ua->get($url, 'User-Agent' => 'Mozilla/4.0'); return $response->content; } sub getPairs{ my $data = @_[0]; my @pairs; my $xp = new XML::XPath( xml => $data ); $hoge = $xp->findnodes("/rss/channel/item/title/text()"); $fuga = $xp->findnodes("/rss/channel/item/link/text()"); while($hoge->size() > 0 ){ push(@pairs,[$hoge->pop()->getNodeValue(),$fuga->pop()->getNodeValue()]); } return @pairs; } sub generateContent{ my $pairs = @_[0]; my @pair; my $document = new XML::DOM::Document; # not in DOM spec my $xmlDecl = $document->createXMLDecl("1.0","UTF-8","no"); $document->setXMLDecl($xmlDecl); # not in DOM spec my $doctype = $document->createDocumentType("html","http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd" ,"-//W3C//DTD XHTML 1.0 Strict//EN", ""); $document->setDoctype($doctype); my $Eul = $document->createElement("ul"); while($#$pairs > 0){ $pair = pop(@$pairs); my $Eli = $document->createElement("li"); my $Ea = $document->createElement("a"); $Ea -> setAttribute("href",$$pair[1]); my $Ea_text = $document->createTextNode($$pair[0]); $Ea->appendChild($Ea_text); $Eli->appendChild($Ea); $Eul->appendChild($Eli); } my $Ebody = $document->createElement("body"); $Ebody->appendChild($Eul); my $Etitle = $document->createElement("title"); $title_text = $document->createTextNode("Q3798395 TestCase 1"); $Etitle->appendChild($title_text); my $Ehead = $document->createElement("head"); $Ehead->appendChild($Etitle); my $Ehtml = $document->createElement("html"); $Ehtml->setAttribute("xmlns","http://www.w3.org/1999/xhtml"); $Ehtml->appendChild($Ehead); $Ehtml->appendChild($Ebody); $document->appendChild($Ehtml); return $document; } sub generateHTTPHeader{ my $headers = ''; $headers = $headers . 'Status: 200 OK' . "\n"; $headers = $headers . 'Content-Type:text/html;charset=UTF-8' . "\n\n"; return $headers; } sub Main{ # toString is not in DOM Spec. the output functionality is defined in DOM Level 3 Load and Save Module #指定された文字列をp要素の子のテキストノードとして持つ,HTMLを生成。 #/まあ、生ソース自体は別にこんな事しなくてもContent-Typeをtext/plainとすれば出来るが。 print generateHTTPHeader(); my @arr = getPairs(getData()); print generateContent(\@arr)->toString; exit; } Main(); exit; #格好つけてXPathを使ってみたけど,XSLTのほうが楽そうだった気がする #正規表現や文字符号化方式については俺詳しくないのでパス。なので意地でもDOMを使う(笑) #ただし,このコードが取ってきているのは #/rss/channel/item/title/text() #だけで, #/rss/channel/title/text() #/rss/channel/link/text() #や #/rss/channel/image/title/text() #/rss/channel/image/link/text() については考えてない。

keeeeeeen
質問者

お礼

himajin100000様へ 実は、実は、、、、、、、 下の方~に既にレスを付けていたのですが以下の方法で全て解決することができました。 --- himajin100000様へ ご指摘いただいた 「$all中にtitle要素はXHTML名前空間の1個しかなくlink要素は書いてないから存在しないからね?RSS 0.92名前空間(Or 名前空間なし)のlink要素およびtitle要素は存在しない」 この部分の意味がわかり、そして、 「ということは、逆に言えば、tamahiro22様から教えていただいたプログラムのHTMLの「ソース」の方には、実はtitleタグが入っているのではないか?(ブラウザーでの表示では見えなかった。ブラウザーで見えるもの=$allと勘違いしていました!)」 と気付き、実際に見てみると入っており、そして、以下のプログラムを作ったところ、イメージしていたものができました! --- #!/usr/local/bin/perl use LWP::Simple; use XML::RSS; use LWP::UserAgent; my $url = '​http://news.google.com/news?hl=ja&ned=us&ie=UTF-8&oe=UT...​ my $ua = new LWP::UserAgent; my $responce = $ua->get($url, 'User-Agent' => 'Mozilla/4.0'); my $data_from_web = $responce->content; print <<"HTML"; Content-type: text/html <html> HTML $_ = $data_from_web; my @titles = $data_from_web =~ /<title>([^<]*)<\/title>/ig; my @links = $data_from_web =~ /<guid isPermaLink=\"false\">([^<]*)<\/guid>/ig; $no = 0; foreach $value (@links){$news[$no]="<A HREF=\"$links[$no]\"TARGET=\"_new\">$titles[$no+2]</a><BR>";$no++} $delete = pop @news; foreach $value (@news){print $value;} exit; ---- tamahiro22様からは、google newsからの特殊な情報入手の方法を教えていただき、himajin100000様からは、ブラウザーで見えているものと、perlが吐き出しているものとは違う!という事を気付かせていただき(こんな単純な事に長い間気付きませんでした!)、この2つ合わせ技のおかがで解決する事ができました! 今回、OKWaveを活用することにより、イメ-ジするものができたと同時に、いろいろと学ばせていただきました。 tamahiro22様、himajin100000様、OKWave、教えてgoo、皆様に心より感謝致します。

その他の回答 (2)

回答No.2

何をやろうとしているのかが見えなかったから なんか・・・・ >まさに、この様な形をイメージしていました。 と言われて安心した一方で, やりたそうなこと見ているとこの回答でよかったんだろうか、って不安になってくる。 本当に?って聞き返したくなる。 この方法だとRSSはParseできないからね? #この方針で書いているのは元のPerlソースに html要素開始タグがあるから。終了タグがないのがよくわからんけど。 >$#T; @Tはどこから来たんだ、@Tは。 言っておくけど, $all中に title要素はXHTML名前空間の1個しかなく link要素は書いてないから存在しないからね? RSS 0.92名前空間(Or 名前空間なし)のlink要素およびtitle要素は存在しない。 ブラウザで右クリックしてもらってソース見てもらえば解ると思うけど RSSの文字列がTextNodeのnodeValueになるように 全部実体参照に展開されている。 (その見ている「ソース」が$allに入っている。) あとXHTML名前空間のlink要素は旧SGMLの流れを汲んだHTML 4.01との互換性から <link rel="stylesheet" href="hogehoge.css" /> みたいに省略されていることが殆どだから</link>が出てくることは少ないよ。 ======================= 念のため,ここだけ不安なので理解しているか確認させて。当たり前ジャン、っていうかもしれないけど。ここが間違っていると絶対うまくいかないから。 ======================== 間違いない、って自信もてるんだったら考えてみるよ。 ★テキストノードおよび属性値中に>は文字参照でもCDATAでもない形で存在できる とか ★属性を持つlink要素が出現するかもしれない とか

keeeeeeen
質問者

お礼

himajin100000様 ご指導、ありがとうございます。 >何をやろうとしているのかが見えなかったから 最終的な望む形は、perlからgoogleニュースに人名で検索をかけ、 その結果のデータをperlで入手し、リンク付タイトルで数行表示する事です。 >@Tはどこから来たんだ、@Tは。 それは、教えてgooのこのページから持ってきました。 http://oshiete1.goo.ne.jp/qa3143595.html これを組み合わせれば、望む形が実現できるのではないかと思って。 >$all中にtitle要素はXHTML名前空間の1個しかなく >link要素は書いてないから存在しないからね? 実際にプログラムを稼働させ、$allを表示させたところ、 <TITLE>タグで囲まれたニュースの見出しが10個確認できています。 (キーワードaikoで検索した結果です) 例えば、こんな感じで、、、 -------------------- < item> <title> aiko、デビュー10周年を記念して過去のアルバム7タイトルの初回限定盤を復刻。オールナイトニッポンにも久々の出演決定 - bounce </title> (中略) <title> aiko、過去の初回限定仕様盤が復刻! - エキサイト </title> 以下同様に8つ。 -------------------- ということで、、、、 >$all中にtitle要素はXHTML名前空間の1個しかなく >link要素は書いてないから存在しないからね? これは、実際にプログラムを動かしてみてのことでしょうか? 私の方では、以下のプログラムでTITLEタグ10個確認しています。 (漢字でも検索できる様に変更しています) ------------------------------ #!/usr/local/bin/perl use LWP::Simple; use XML::RSS; use LWP::UserAgent; use XML::DOM; sub getData{ my $keyword = 'aiko'; #URLエンコードを行う $keyword=~s/([^0-9A-Za-z_])/'%'.unpack('H2',$1)/ge; $keyword=~s/\s/+/g; my $url = 'http://news.google.com/news?hl=ja&ned=us&ie=UTF-8&oe=UTF-8&output=rss&q='.$keyword; my $ua = new LWP::UserAgent; my $response = $ua->get($url, 'User-Agent' => 'Mozilla/4.0'); return $response; } (中略) sub Main{ $part1=generateHTTPHeader(); $part2=generateContent(getData()->content)->toString; $all=$part1.$part2; print $all; exit; } Main();

keeeeeeen
質問者

補足

>$all中にtitle要素はXHTML名前空間の1個しかなく >link要素は書いてないから存在しないからね? >ブラウザで右クリックしてもらってソース見てもらえば解ると思うけど >RSSの文字列がTextNodeのnodeValueになるように >全部実体参照に展開されている。 この言葉の意味に、送信した後に気付きました。 で、目的はニュース記事のタイトルとリンク抽出なので、 &gt;&lt;title&gt; と &lt;/title&gt;&lt; で囲まれた部分、及び、 link&gt;&lt;guid isPermaLink=&quot;false&quot;&gt; と &lt;/guid&gt;&lt; に囲まれた部分を抽出する方法をご指導いただければ幸です。

回答No.1

#!/usr/local/bin/perl #ひょっとしてこんなの期待したの?解析云々は関係なしに #ソースコードはBOMなしUTF-8の改行コードLF use LWP::Simple; use XML::RSS; use LWP::UserAgent; #要インストール #http://www.edita.jp/musekininit/one/musekininit541874.html use XML::DOM; sub getData{ my $url = 'http://news.google.com/news?hl=ja&ned=us&ie=UTF-8&oe=UTF-8&output=rss&q=aiko'; my $ua = new LWP::UserAgent; my $response = $ua->get($url, 'User-Agent' => 'Mozilla/4.0'); return $response; } sub generateContent{ my $text = @_[0]; my $document = new XML::DOM::Document; # not in DOM spec my $xmlDecl = $document->createXMLDecl("1.0","UTF-8","no"); $document->setXMLDecl($xmlDecl); # not in DOM spec my $doctype = $document->createDocumentType ("html", "http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd" ,"-//W3C//DTD XHTML 1.0 Strict//EN", ""); $document->setDoctype($doctype); #悩んだけど、熟知してないと非常に厄介なので、CDATAセクションにはしない my $p_text = $document->createTextNode($text); my $Ep = $document->createElement("p"); $Ep->appendChild($p_text); my $Ebody = $document->createElement("body"); $Ebody->appendChild($Ep); my $Etitle = $document->createElement("title"); $title_text = $document->createTextNode("Q3798395 TestCase 1"); $Etitle->appendChild($title_text); my $Ehead = $document->createElement("head"); $Ehead->appendChild($Etitle); my $Ehtml = $document->createElement("html"); $Ehtml->setAttribute("xmlns","http://www.w3.org/1999/xhtml"); $Ehtml->appendChild($Ehead); $Ehtml->appendChild($Ebody); $document->appendChild($Ehtml); return $document; } sub generateHTTPHeader{ my $headers = ''; $headers = $headers . 'Status: 200 OK' . "\n"; $headers = $headers . 'Content-Type:text/html;charset=\'UTF-8\'' . "\n\n"; return $headers; } sub Main{ # toString is not in DOM Spec. the output functionality is defined in DOM Level 3 Load and Save Module #指定された文字列をp要素の子のテキストノードとして持つ,HTMLを生成。 #/まあ、生ソース自体は別にこんな事しなくてもContent-Typeをtext/plainとすれば出来るが。 print generateHTTPHeader(); print generateContent(getData()->content)->toString; exit; } Main();

keeeeeeen
質問者

お礼

himajin100000様 ご指導いただき、ありがとうございます!! >#ひょっとしてこんなの期待したの? まさに、この様な形をイメージしていました。 詳しい説明付のリンクも含め、ありがとうございます。 BOMとは何なのかを調べ、その処理を行える テキストエディターを入手し、着手してから3時間、 エラーの嵐(マックユーザーなので、コードの問題で かなり時間をとられました)の末、正常に稼働できました。 ありがとうございます! やっとのことで、データ入手でき、最後の仕上げとばかりに、 リンク付の見出しリスト出力の為、sub Mainの中を以下の様にしました。 sub Main{ $part1=generateHTTPHeader(); $part2=generateContent(getData()->content)->toString; $all=$part1.$part2; $_ = $all; for(my $i=0; $i<=$#T; $i++){ $T[$i]=~s/<title>(.+)<\/title>/$1/; $L[$i]=~s/<link>(.+)<\/link>/$1/; print '<a href="'.$L[$i]."'>".$T[$i]."</a><BR>\n"; } exit; } Main(); が、最後のこの部分がうまく稼働せず、半日、Internal Server Errorと格闘しています。 調べたところ「正規表現で処理する前にutf-8をEUCに変換しなければならない」との記述を見つけ、あれこれ試したのですが、うまくいきません。 文字コードの問題で、何もヒットせず、その場合はInternal Server Errorになってしまっている感じがしています。 尚、当初はXMLパースモジュールを使い処理するつもりでしたが、 それが、どうもうまくいかず、上記の様なシンプルな形で 処理しようとしています。 お手数をかけますが、最後のこの部分、ご指導いただければ幸です。

keeeeeeen
質問者

補足

himajin100000様へ ご指摘いただいた 「$all中にtitle要素はXHTML名前空間の1個しかなくlink要素は書いてないから存在しないからね?RSS 0.92名前空間(Or 名前空間なし)のlink要素およびtitle要素は存在しない」 この部分の意味がわかり、そして、 「ということは、tamahiro22様から教えていただいたプログラムのHTMLの「ソース」の方にはtitleタグが入っているのではないか?(ブラウザーでの表示では見えなかった。ブラウザーで見えるもの=$allと勘違いしていました!)」 と気付き、実際に見てみると入っており、そして、以下のプログラムを作ったところ、イメージしていたものができました! ------------------------- #!/usr/local/bin/perl use LWP::Simple; use XML::RSS; use LWP::UserAgent; my $url = 'http://news.google.com/news?hl=ja&ned=us&ie=UTF-8&oe=UTF-8&output=rss&q=aiko'; my $ua = new LWP::UserAgent; my $responce = $ua->get($url, 'User-Agent' => 'Mozilla/4.0'); my $data_from_web = $responce->content; print <<"HTML"; Content-type: text/html <html> HTML $_ = $data_from_web; my @titles = $data_from_web =~ /<title>([^<]*)<\/title>/ig; my @links = $data_from_web =~ /<guid isPermaLink=\"false\">([^<]*)<\/guid>/ig; $no = 0; foreach $value (@links){$news[$no]="<A HREF=\"$links[$no]\"TARGET=\"_new\">$titles[$no+2]</A><BR>";$no++} $delete = pop @news; foreach $value (@news){print $value;} exit; ------------------------- tamahiro22様とhimajin100000様のアドバイスのおかげです! ありがとうございました!! イメ-ジするものができたと同時に、いろいろと学ばせていただきました。 心より感謝致します。

関連するQ&A

  • Perlでgoogle newsのRSSを取得する方法を教えて下さい。

    Google NewsのRSS情報をperlで取得し、表示するプログラムを作っています。 が、他のサイトのRSS情報は容易に取得できるのに、Google Newsだけは、取得できません。 具体的には、、、 ----------------------------- #!/usr/local/bin/perl use LWP::Simple; use XML::RSS; my $url = 'http://news.google.com/news?hl=ja&ned=us&ie=UTF-8&oe=UTF-8&output=rss&q=aiko'; my $data_from_web = get($url); print <<"HTML"; Content-type: text/html <html> HTML print $data_from_web; print $url; exit; ----------------------------- ※URL部分が長すぎて一部省略されている様ですが、 あえて2行で書くと、こうなっています。 http://news.google.com/news?hl=ja&ned=us&ie=UTF-8 &oe=UTF-8&output=rss&q=aiko'; 上記の様な簡単なプログラムで、歌手aikoのニュースに関する RSS情報を取得し、表示できるはずなのですが、実行してみても、 何も表示されません。 ちなみに、my $urlの部分を他のURL、例えば、日刊ゲンダイ http://headlines.yahoo.co.jp/rss/gen_ent.xml に差し替えて実行してみると、きちんと表示されます。 また、ブラウザーのURLの窓に、直接、プログラム内の$url部分である http://news.google.com/news?hl=ja&ned=us&ie=UTF-8&oe=UTF-8&output=rss&q=aiko というURLを入れ、リターンキーを押すと、歌手aikoのニュースに関する RSS情報が直接ブラウザーで表示されます。 なのに、上記のプログラムでは表示されないのです。 (ブラウザー等の情報もPerlで送信しないとGoogle newsはRSS情報を送信してくれない?) どの様にしたら、perlでGoogle NewsのRSS情報を取得できるのか、 教えていただけたら幸です。 尚、参考にしたサイトは以下です。 Google news日本語版 http://news.google.com/news??hl=ja&ned=jp&ie=UTF-8&oe=UTF-8 Googleニュース日本語版のAtom/RSSフィード http://d.hatena.ne.jp/Gimite/20061205/1165287606 Googleニュース(日本語版)のRSSフィード http://blog.fkoji.com/2006/12091315.html Google News日本語版のRSSとAtomを取得してみるテスト http://ryouchi.seesaa.net/article/28534464.html PHPで実現しているGoogle NewsのRSS情報表示サイト http://www.usamimi.info/~ryouchi/googlenews/index.php Googleニュース用RSSジェネレータ http://g.1o4.jp/news-rss.html Google NewsがRSSフィードを採用  http://zen.seesaa.net/article/5748907.html RSSリーダーを使った情報収集術&便利なフィード7選 http://google-mania.net/archives/895 以上、よろしくお願い致します。

    • ベストアンサー
    • Perl
  • LWPモジュールでログインしHTML取得

    use LWP::UserAgent; use HTTP::Request::Common qw(POST); my $url = 'https://toto.netbk.co.jp/main/smm0100'; my %formdata = ('userName' => 'ID', 'loginPwdSet' => 'Pass'); my $request = POST($url,[%formdata]); my $ua = LWP::UserAgent->new; $ua->agent('Mozilla/5.0'); $ua->ssl_opts(verify_hostname => 0); my $res = $ua->request($request); print $res->as_string; サポートされないブラウザーで弾かれます 解決策、教えてください

  • GoogleニュースのRSSフィードに関して

    GoogleニュースのRSSフィードに関して質問です。 ジャニーズが大好きで、RSSリーダーで色々情報収集しています。 下記サイトを見てGoogleニュースのRSSフィードを取得する方法を知りました。 ■参考サイト http://d.hatena.ne.jp/Gimite/20061205/1165287606 「嵐」の検索結果 http://news.google.co.jp/news/search?pz=1&cf=all&ned=jp&hl=ja&q=%E5%B5%90 「嵐」のRSS http://news.google.com/news?hl=ja&ned=us&ie=UTF-8&oe=UTF-8&output=atom&q=%E5%B5%90 こんな感じで「q=」以下を変更することでRSS化というのができているんですが、 今回やりたいのはちょっと検索条件を細かく設定した場合です。 「NEWS 山下智久 OR 山P」の検索結果 http://news.google.co.jp/news/search?pz=1&cf=all&ned=jp&hl=ja&as_q=NEWS&as_epq=&as_oq=%E5%B1%B1%E4%B8%8B%E6%99%BA%E4%B9%85+%E5%B1%B1P&as_eq=&as_scoring=r&btnG=%E6%A4%9C%E7%B4%A2&as_drrb=q&as_qdr=a&as_minm=10&as_mind=27&as_maxm=11&as_maxd=26&as_nsrc=&as_occt=any ↑これはNEWSというキーワードを必ず含みつつ、山下智久か山Pいずれかを含むGoogleニュースの検索結果という条件指定です。 これをRSS化したいんですが、q=の差し替えだけだと、うまくRSSフィードになりませんでした。 RSS化する方法を教えてもらえたら嬉しいです。よろしくお願いします。

    • ベストアンサー
    • XML
  • 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
  • perlで画像をダウンロードしようと思っています

    gazou_element.txtにurlを保存していて、それらを一つずつ取り出してダウンロードするようにしようとしているのですがError:Invalid argument at C:User~~~となってしまいます。 どうすればいいかよろしければお教え下さい。 use Encode; use LWP::UserAgent; use IPC::Open2; use warnings; $file = "gazou_element.txt"; open (IN, $file) or die "$!"; my @url =<IN> ; my $time = time; for(my $i = 0; $i < scalar(@url); $i++){ my $request = HTTP::Request->new('GET', $url[$i]); my $ua = LWP::UserAgent->new; $ua->agent('Mozilla/4.0'); my $response = $ua->request($request); my $prefix = get_prefix($url[$i]); my $count = $i + 1; if($response->is_success){ open($OUT, ">","$time$i$prefix") or die("Error:$!"); binmode $OUT; print $OUT $response->content; close $OUT; }else{ } } #拡張子を取得する sub get_prefix{ my $url = shift; my $start = rindex($url, "."); my $end = length($url); my $string = substr($url, $start, $end - $start); return $string; }

  • Perlのコードを隠蔽する

    Perlのソースコードを隠蔽する&ActivePerlなどがない環境でも動くようにperl2exeを使って変換して配布しようと思っています。 逆コンパイラされる可能性が0ではないことはわかっています。 しかし、下記コードの実行がなかなかうまくいきません。実際の.plでの起動時ではうまくいくのですが、.exeに変換するとうまくいかないようです。回避方法を教えてください。 -------------------- use HTTP::Request::Common qw(POST); use LWP::UserAgent; my $ua = LWP::UserAgent->new; my %loginform = ('mail' => 'hogehoge@hoge.jp', 'password' => 'hogehoge'); my $request = POST('https://****/login', [%loginform]); my $res = $ua->request($request); my $cookie = $res->header('Set-Cookie'); --------------------

  • LWPで応答データを取得できない

    お世話になります。 perl5でLWPを使用しているのですが、一部のサイトでデータを取得できず困っております。 具体的には my $ua = LWP::UserAgent->new; $ua->agent('Mozilla/5.0'); my $req = HTTP::Request->new(GET => "http://misshiki.blog7.fc2.com/?xml"); my $res = $ua->request($req); my $buf = $res->content; といった感じでRSSを取得したいのですが、$bufが空になってしまいます。 しかし、 $res->as_string とすると、レスポンスヘッダも含めてRSSが取得できていることが確認できます。 また、上記以外のURLでは正常に$res->contentでデータを取得することができています。 どうもFC2ブログのRSSのみの事象のようではあるのですが、対処方法がわからず困っております。 対策をご教授いただければ幸いです。 以上、よろしくお願いいたします。

    • ベストアンサー
    • 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
  • perlでhtmlファイルを取得したいのですが

    perlでmixiなどログイン処理のあるサイトのhtmlファイルを取得したいのですがなかなか上手くいきません。 どなたかご教授をお願いします。 ----------------------------------------------------------------- #!/usr/bin/perl use LWP::UserAgent; use HTTP::Cookies; use HTTP::Request::Common; use LWP::Simple; my $mixi_email = 'メールアドレス@yahoo.co.jp'; my $mixi_password = 'パスワード'; my $login_url = 'http://mixi.jp/login.pl'; my $home_url = 'http://mixi.jp/home.pl'; my $mixi = LWP::UserAgent->new($mixi_email, $mixi_password); #Cookieを有効にする# my $cookie = sprintf('cookie_%s_%s.txt', $$, time); my $cookie_jar = HTTP::Cookies->new(file => $cookie, ignore_discard => 1); $mixi->cookie_jar($cookie_jar); #ログインする# my @form = ('email' => $mixi_email, 'password' => $mixi_password, 'next_url' => $home_url);#POSTで送る内容の配列 my $request1 = &HTTP::Request::Common::POST($login_url, [@form]); #リクエストヘッダの生成 my $response1 = $mixi->request($request1); #ログインする getstore("http://mixi.jp/search_community.pl?from=global(取得先の指定)", "test.html"); ---------------------------------------------------------------------- 試しに書いてみたのですがうまくいきませんでした

  • perl で 画像を取得したい

    下記perlのコードを書いたのですが、なぜか、画像を取得することができません。 メモ帳で開くと、画像データっぽい文字列はあるのですが、普通に見ることができません。 なぜでしょうか?また、どのように改良すれば取得できますか? ご存知の方教えていただけないでしょうか? 宜しくお願い致します。 $source = &GetImg('http://www.goo.ne.jp/img/logo/gootop_logo.gif'); $FileOut = "tmp.gif"; open(OUT, ">$FileOut"); print OUT $source; close (OUT); sub GetImg() { my($url) = @_; use LWP::UserAgent; my $browser = LWP::UserAgent->new; my $response = $browser->get($url,'User-Agent' => 'Mozilla/5.0 (Windows; U; Win98; en-US; rv:1.5) Gecko/20031007'); my $img_file = $response->content; return $img_file; }

    • ベストアンサー
    • Perl