HSPポータル
サイトマップ お問い合わせ


HSPTV!掲示板


未解決 解決 停止 削除要請

2006
0729
ガビーンMSNからレートの取得 (New Version)の続き7未解決


ガビーン

リンク

2006/7/29(Sat) 17:32:19|NO.1623

こんにちは
返事がおそくなってすみません
MSNからレートの取得 (New Version)
http://hsp.tv/play/pforum.php?mode=all&num=1552
に投稿すると流されていってしまいそうなので
新しく投稿しました

関連項目
MSNからレートの取得
http://hsp.tv/play/pforum.php?mode=all&num=1404

レートデータのあるページ(MSN マネー)
http://jp.moneycentral.msn.com/investor/market/rates.asp?Region=1&Compare=7

質問内容

まず
MSNからレートの取得 (New Version)で
bufにデータが入っているとtksさんがおっしゃいましたが前回投稿した
スクプリトを実行すると
情報をダウンロードします。
ダウンロード完了
接続ミス
404とか
と出てしまいます大丈夫なのでしょうか

あと
> で、問題は7行目までではありません(これが何を意味
> しているかは
> http://www.studyinghttp.net/cgi-bin/rfc.cgi?2616
> あたりで勉強してください)。
とおっしゃいましたが
どこら辺をよく勉強したらいいのか
もう少し教えていていただければうれしいです

最後にいくらネット上を探しても
http://www.studyinghttp.net/cgi-bin/rfc.cgi?2616
のようなページはありますがプログラムの組み方のかいせつがありません
HSP向けの解説ページをご存知なら
紹介してくださいお願いします



この記事に返信する


hedamd

リンク

2006/7/29(Sat) 17:33:38|NO.1624

書き込みすると一番上にもっていかれますから
新しいの作らなくても大丈夫ですよ。



tks

リンク

2006/7/29(Sat) 23:28:17|NO.1628

"ダウンロード完了"までを修正してみました。
7と9行目を書き換えてます。

根本的な原因は7行目だったようです…(失礼しました;)。
repeatが回数指定されていたので気づきませんでした。
文字列の終端まで来ても0が帰って来てなかったみたいです。
なぜなのかは原因は詳しい方にお任せします;
(そもそもヘッダーフィールドのContent-Length分
取得すれば良い?)


#include "hspsock.as" size=12000 : sdim buf,size : ps="" st="</td><td>":en="</td>" host = "jp.moneycentral.msn.com" path = "/investor/market/rates.asp?Region=1&Compare=7" sockopen 0,host,80:if stat{goto *er1} sockput "GET "+path+" HTTP/1.1\nHost:"+host+"\n\n \n\n":if stat{goto *er1} mes "情報をダウンロードします。" repeat:await 0 sockget ps,64:if stat{break} b=peek(ps,0):if b=0{er=1:break}else{buf+=ps} loop mes "ダウンロード完了。" if er{ pos_st = instr(buf,0,"1"+st) : pos_st += 10 repeat 53 pos_en=instr(buf,pos_st,en) if (pos_st=-1)|(pos_en=-1){ goto *er3 } rate=double(strmid(buf,pos_st,pos_en)) mes ""+str(rate)+"円です。" pos_st += pos_en+9 loop } else { mes "接続ミス" : goto *er2 } sockclose:stop *er1:mes "接続失敗しました。":sockclose:stop *er2:mes "404とか":sockclose:stop *er3:mes "取得失敗しました。":sockclose:stop

> どこら辺をよく勉強したらいいのか
> もう少し教えていていただければうれしいです

RFC2616はHTTP/1.1の定義ですので、一通り目を
通しておかれたほうがよろしいかと。特にここで
関係しているのは"5 リクエスト"のあたりですし、
"14.23 Host"の部分を見てみるとkz3さんが
NO.1407で書いておられた"HTTP/1.1 のクライアントは
Host ヘッダでホスト名を送信しなくてはなりません。"
ってことが書かれています。

> プログラムの組み方のかいせつがありません

kz3さんがおっしゃっている方法でがんばるか、
他の言語で書かれているものを読み替えるとか…。
HSP用のものがない場合、わたしはこの方法をとります
(他の言語はよくわからないので、勘を頼りに
トライアンドエラー…泣)。



ガビーン

リンク

2006/7/30(Sun) 16:06:23|NO.1640

回答ありがとうございます
ためしにtksさんが投稿していてだいたスクプリトを実行してみました。
実行してみると...

情報をダウンロードします。
ダウンロード完了。
200.000000円です
0.000000円です。
0.000000円です。
0.000000円です。
取得失敗しました。

とでてきます。
情報が4行しか出てこないししかも間違っています。
「情報をダウンロードします。」
から「ダウンロード完了。」
までの間で1秒ぐらい間が空くので
bufにはデータがはいっているとおもいます。
問題は14行目からで
いろいろ数字のところを改造してみましたが
まったく結果に変化がなく行き詰っています。

※自分が抜き出したいしたいデータは
 http://jp.moneycentral.msn.com/investor/market/rates.asp?Region=1&Compare=7
 にある「日本円にすると」というところです。

プログラムの組み方が全然違うのでしょうか。
もうすこしヒントをくださいよろしくお願いします。



Drip

リンク

2006/7/30(Sun) 18:28:54|NO.1644

Dripです。

 ガビーンさん、こんにちは。
なぜ全く同じテーマのスレッドがいくつもあるのでしょうか。
同じ内容の記事であれば、必ず「返信」の形で書き込んでください。
とても読みにくい上に他のビジターに不快感を与えます。

 返信が付かないからといって同じテーマで新規投稿するのはやめてください。
他のビジターに不快感を与えます。掲示板は必ずしも答えが求まる場所ではないことを
理解してください。

 自分の必要とする回答が得られるまで何度も同じ投稿をし続けると、俗に言う“荒し”と
同じ行為になります。注意してください。

> プログラムの組み方が全然違うのでしょうか。
> もうすこしヒントをくださいよろしくお願いします。
文字列操作関係のライブラリ全般を把握するとよいと思います。
instr,strlen,getstr等を用い、ネット上から取得したファイルを編集して表示してみてください。

尚、以下のスクリプトは全く将来性を考慮していないプログラムです。理想的なサンプルではありません。
このようなこともできる、程度に試してみてください。

hspbbsTagTrack="&"+"n"+"bsp;" //HSP掲示板タグ認識によりプログラムが破壊されるのを防ぐ #include "hspinet.as" #define dlfile "dltest_tmp060730.txt" #define keyCode1 "<TD NOWRAP>" #define keyCode2 hspbbsTagTrack+hspbbsTagTrack+hspbbsTagTrack+"</TD><TD ALIGN=RIGHT>" netinit:if stat : dialog "ネット接続できません。" neturl "http://jp.moneycentral.msn.com/investor/market/":netdlname dlfile netrequest "rates.asp?Region=1&Compare=7":mes "DOWNLOAD 開始":repeat:netexec res if res>0:{goto *comp}:if res<0:{neterror estr:mes "ERROR "+estr:stop}:await 50:loop *comp:mes "DOWNLOAD 完了":exist dlfile:buf=strsize:sdim data,buf:sdim tmpstr,256 sdim tmpstr2,256:bload dlfile,data:rp=0:pos 10,64:repeat 20:tmp=instr(data,rp,keyCode1) if tmp<0:{break}:rp+=tmp+strlen(keyCode1):getstr tmpstr,data,rp,'&' getstr tmpstr2,data,rp,'<':if strlen(tmpstr)<strlen(tmpstr2):mes tmpstr:else:mes tmpstr2 loop:pos 320,64:rp=0:repeat 20:tmp=instr(data,rp,keyCode2):if tmp<0:{break} rp+=tmp+strlen(keyCode2):getstr tmpstr,data,rp,'<':mes tmpstr:loop:pos 10,450:mes "以下略。" exist dlfile:if strsize>-1:{delete dlfile}:stop



ガビーン

リンク

2006/8/1(Tue) 14:19:15|NO.1689

Dripさん回答ありがとうございます
また返事が遅くなってしまいました
いまスクプリトを試してみたのですが
一番最後の
ロシア ルーブル を表示させると
わずかな誤差が生まれます
プログラムのほうも原本もほぼ同じ時間で起動しました
何回も同じことをやってみましたが
誤差がでっぱなしです
しかも何回もやると
ほかのレートも誤差が出てきます
直すことはできないのでしょうか
再度回答をよろしくお願いします



Drip

リンク

2006/8/1(Tue) 20:28:31|NO.1704

Dripです。

 こんにちは。
ガビーンさんはちゃんと回答内容を理解しているのでしょうか。
まるでサンプルを少しいじって思い通りにならなかったらすぐに不具合として返信しているように
思えます。私たちはあなた専属のデバッグプログラムではありません。
 プログラミングは、自分で書いたプログラムを自分自身でフィードバックしていく事が普通です。
それができないようでは、永久にソフトが完成することはありません。

 もう一度書きますが、前回私の書いたプログラムは将来性のないプログラムです。
つまり時間が経てば全く動作しない、使い物にならないものになります。
このアルゴリズムをそのまま用いることはできません。
もしもこのプログラムを使用するならば、自分なりに修正してください。


> 一番最後の
> ロシア ルーブル を表示させると
> わずかな誤差が生まれます
> プログラムのほうも原本もほぼ同じ時間で起動しました
> 何回も同じことをやってみましたが
> 誤差がでっぱなしです

こちらでは何度試してもそのような問題は発生しませんでした。
ガビーンさんのプログラムか、ガビーンさんのネットワーク環境に問題があると思われます。
私のプログラムはローカル処理なので、ダウンロードしたファイルとプログラムを
見合わせて検証すれば、原因を究明できる問題です。



ガビーン

リンク

2006/8/2(Wed) 13:34:53|NO.1726

Dripさん
すみませんでした
今度からはもう少し自分で解決するようにします



ONION software Copyright 1997-2023(c) All rights reserved.