アプリ版:「スタンプのみでお礼する」機能のリリースについて

少し長くなるかもしれませんし、難しいかもしれないのですがお願い致します。

携帯で色んな株価を知りたい

という内容です
http://quote.nomura.co.jp/nomura/cgi-bin/parser. …
ここを見てみてください
真ん中ぐらいの
現在値 460000 ↓(15:00) -2000 -0.43%
(今の時間の値ですが)
この中で
【460000】 と【(15:00)】 と【-2000】
の値だけ引っ張りだしたいのです
あ、当然ですけど【ヤフー】ってのもです

【ヤフー】【460000】 【(15:00)】 【-2000】
【違う銘柄】【60000】 【(15:00)】 【-500】
【違う銘柄】【650】 【(15:00)】 【+50】
・・・・・

という感じで列記させたいのです

これをするためには目的のページの情報を取り込む必要があるのですが
その方法がわからないのです
行数は全ての銘柄いっしょなのでなんとかなりそうなのですが


そのページを取り込む

例えば10行目と12行目を(ヤフーってとこと現在地ってとこを10、12と仮定)
それをそのまま表示さす(もしくはテキストに落とす)
3あとは列記ひょうじだけ

という風に進めばいけそうな気がするんです

そこで
A 1が一番わからないのですが、そういう事ができるにはどうしたらいいのでしょうか?
そもそもCGIでは(perl)では無理でしょうか?
B その場合適したプログラムはなんでしょうか?
C それ以前にそもそも株値の列記であれば、こういうのあるよってのがあればそれでいいです

お知恵を拝借したいのですがどうぞよろしくお願いいたします。

 

A 回答 (6件)

#5>参考にされてたURLはほぼここでの話と同じですね。


if($string =~ /現在値.*?<\/td>/m){
$string = $&;
$string =~ s/<font.*?>|<\/font>|<b>|<\/b>|<\/td>|\s+//g;
$string =~ s/()+/,/g;
この行の 【()+】を【,】に置換してる
}
の解説と言うことなんですが、
取り出したい、テーブルの行は
<tr></tr>の中の行なんですが、その中のTDは1個しかなくて
現在地から</td>まででマッチするか調べています。
.*?は、最小マッチで?をつけないと、ずっと後の</td>までマッチしていまします。
$&は、Perlの特殊変数で、マッチした全体になっています。
ここから、必要のないタグを同様にマッチさせて削除しています。
丁度が区切りのようになっているので、,に置き換えます。複数ある場合があるので+をつけます。
    • good
    • 0
この回答へのお礼

遅れてすいません
大変わかりやすく説明
ほんとにありがとうございます!
すっごく役にたちました!

お礼日時:2004/12/22 11:03

自分でも作ってみました、参考にして下さい。


「ヤフー」の切り出しはきっかけが面倒なのでやってません。というか、この場合、読みにいったアドレスがヤフーだとわかっているので、規定値にしてもいいと思いますが…
#ヤフーの現在の株価を取り出す
use Socket;
socket(SERVER, PF_INET, SOCK_STREAM, getprotobyname('tcp'));
$addr = inet_aton("quote.nomura.co.jp");
$paddr = sockaddr_in(80, $addr);
connect(SERVER, $paddr);
select(SERVER);
$| = 1;
select(stdout);
print SERVER "GET /nomura/cgi-bin/parser.pl?QCODE=4689&TEMPLATE=nomura_tp_kabu_01&MKTN=T HTTP/1.0\r\n\r\n";
$/='';
$string=<SERVER>;
close(SERVER);
if($string =~ /現在値.*?<\/td>/m){
$string = $&;
$string =~ s/<font.*?>|<\/font>|<b>|<\/b>|<\/td>|\s+//g;
$string =~ s/()+/,/g;
print $string;
}
#結果
#現在値 460000↓(15:00),-2000,-0.43%
    • good
    • 0
この回答へのお礼

すごい!できました。
実は最初にここを参考にしてがんばってたんですが
(一番下)
http://www.phoenix-c.or.jp/~zspc/cgi-bin/wwwlng. …

思うようにいかなくて諦めてました。

ヤフー規定値の案はそれがいいですね笑
URL固定なわけだし

それでもう一つ宜しければなんですが
初心者でわからん部分があるので解説ねがえませんか?
ラストのココです
実は置換とか苦手でさっぱりわからんのですが
この辺りで欲しい所の抜き出しをやってますよね?
わかるのは

if($string =~ /現在値.*?<\/td>/m){
$string = $&;
$string =~ s/<font.*?>|<\/font>|<b>|<\/b>|<\/td>|\s+//g;
$string =~ s/(&nbsp;)+/,/g;
この行の 【(&nbsp;)+】を【,】に置換してる
}

ってことぐらいです。
なんとなく各行に解説ねがえないでしょうか?

それにしても有難うございます!

お礼日時:2004/12/17 11:32

>Can't locate encoding.pm in @INC


>嗚呼もしかしてencodingできないってこと???

use encoding 'shift_jis'; の部分に1行足して,

use Encode;
use encoding 'shiftjis'; (アンダースコア無し)と変えてみてください。うまくいきますでしょうか。

レンタルサーバがWindowsの場合はshiftjis,UNIXの場合はeuc-jpです。
    • good
    • 0
この回答へのお礼

ありがとうです。ためしました
UNIXのようなのでeuc-jpで。
同様でしたです。多分モジュールがないんでしょ
「ただいま技術者に問い合わせております」
って、メッセージかえって来ました笑

お礼日時:2004/12/17 11:02

> use encodingの行に”;”がない


失礼いたしました。
ちなみに,レンタルサーバがUNIXの場合は,'shiftjis'を'euc-jp'に変えてください。

見た事も無いエラーということですので,セミコロン抜けではなくLWP::Simpleに関わるエラーメッセージが出ているのでしょうか。
LWP::Simpleは標準のperlには入っていないので別にインストールします。他のモジュールと同じく,CPANからダウンロードします。(CPANの使い方については,web上に解説がたくさんあります)
エラーの原因が分からないので何とも言えませんが,レンタルサーバということですので,管理者にこのモジュールが使えるかどうか問い合わせる事をお勧めします。使えるように対応してくれるかもしれません。

Spidering Hacksはperlでwebから情報を取得する方法の解説書です。ちょっと高いですが,ヤフオク監視スクリプトや画像の自動ダウンロードなど,面白そうなサンプルスクリプトがたくさん載っていました。

参考URL:http://www.oreilly.co.jp/books/4873111870/toc.html

この回答への補足

ありがとうございます。UNIXでしたので'euc-jp'
でもためしてみました。サーバさんには現在聞き込み中

その本めっちゃよさそうですね。
買ってみようと思います。ありがとうございます!

補足日時:2004/12/17 10:57
    • good
    • 0

use encodingの行に”;”がないというエラーを言っているのじゃないよね?

この回答への補足

ありがとう、結論は違います

今はこれでやってます

#!/usr/local/bin/perl
#############################################################
$datafile = './count.dat';
use LWP::Simple;
use encoding 'shift_jis';
$string= get("http://www.goo.ne.jp");

open(OUT, ">$datafile");
print OUT $string;
close(OUT);

print "Content-type: text/plain\n\n";
print"OK";
exit;

んで、エラーごこれです
[str.internalServerError]
[str.internalServerErrorNote]


Can't locate encoding.pm in @INC

嗚呼もしかしてencodingできないってこと???
古いのか?サーバが・・うーん

補足日時:2004/12/16 21:38
    • good
    • 0

webページの取り込みはperlでできます。


LWP::Simpleというモジュールを使って、例えばgooのトップページのテキストを取り込む場合

use LWP::Simple;
use encoding 'shiftjis' # windowsの場合

$string= get("http://www.goo.ne.jp");

これで、$stringの中にgooトップのテキストが入ります。
(動作は未検証です)
あとはマッチングで特定の文字列を切り出して表示させれば、お考えのイメージの物ができそうです。

うろ覚えですが、オライリー・ジャパンから出ている『Spidering Hacks』という本に、株価サイトから情報を収集する、というそのものズバリの方法が書かれていたような気がします。
    • good
    • 0
この回答へのお礼

#!/usr/local/bin/perl
#############################################################
$datafile = './count.dat';
use LWP::Simple;
use encoding 'shiftjis' # windowsの場合
$string= get("http://www.goo.ne.jp");

open(OUT, ">$datafile");
print OUT $string;
close(OUT);

print"OK";


でやったらなんか見たこともないエラー

LWP::Simpleが使えないみたいです。
俺のレンタルサーバ…あんぎゃー

他にありますか?てか、最新のperlだっていってたけど・・なにかスクリプトミス?
気になるとこありますか?

その本はしらないので見てみたいですが
ようするにスクリプトが掲載されてる本なのですか?

お礼日時:2004/12/16 17:39

お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!