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


HSPTV!掲示板


未解決 解決 停止 削除要請

2007
0617
吉竹データ取得に関して9未解決


吉竹

リンク

2007/6/17(Sun) 12:00:37|NO.8982

--------------------------------------ここから
年年=今年 #(2000)
月月=今月 #(2)
日日=31

s=「http://table.yahoo.co.jp/t?c=2000&a=1&b=1&f=」&年年&「&d=」&月月&「&e=」&日日&「&g=d&s=998405.t&y=0&z=998405.t」#トピックス価格データ
sからHTTPデータ取得。それをSJIS変換。それを小文字変換。b=それ

a=0
50回
       bの「<td><small>」から「</small></td>」まで範囲切り取る。「,」を「」に置換。倉庫【a,00】=それ。#年月日区切り 単語トピックス価格データ
       bの「<td><small>」から「</small></td>」まで範囲切り取る。「,」を「」に置換。倉庫【a,01】=それ。#初値区切り  単語
       bの「<td><small>」から「</small></td>」まで範囲切り取る。「,」を「」に置換。倉庫【a,02】=それ。#高値区切り  単語
       bの「<td><small>」から「</small></td>」まで範囲切り取る。「,」を「」に置換。倉庫【a,03】=それ。#安値区切り  単語
       bの「<td><small><b>」から「</b></small></td>」まで範囲切り取る。 「,」を「」に置換。倉庫【a,04】=それ。#終値区切り  単語
a=a+1
---------------------------------------ここまで
上記を『なでしこ』にて起動しますと最新のトピックス
年月日/初値/高値/安値/終値
...
...
50日分が倉庫【a,00〜04】に入ります。
このようなプログラムをHSPでつくりたいのですが
できるのでしょうか?

できればデータ取得する簡単な書式を提示して
頂ければ幸いです。m(__)m



この記事に返信する


f

リンク

2007/6/17(Sun) 12:42:07|NO.8983

とりあえず、hspに付属の

sampview.exe

を実行して、
サンプルのカテゴリを

HSPINET

にして、

表示される物を見てみると良いんじゃね?



G

リンク

2007/6/17(Sun) 12:52:31|NO.8984

なでしこ? なにそれ・・ 
わざわざ、HSPでやる意味あんの?
出来るか出来ないかは、あんたの腕次第だろ?

その、なでしことやらができるんなら。



eller

リンク

2007/6/17(Sun) 22:01:30|NO.9001

吉竹さん、はじめまして。
スクリプトを拝見する限りでは「なでしこ」のほうが格段に簡単にできるように思いますが、もちろんHSPでも可能です。

fさんの仰っているサンプルビューアでネットの接続方法は分かります。
文字コード変換・小文字変換はモジュールがありますのでそれを利用されると良いでしょう。
http://quasiquote.org/hspwiki/Module%3aTextproc

テキストの切り出しにはgetstr, instr, strmidなどを利用することになると思います。多少文字列操作の慣れが必要です。
ループの使い方や配列変数の使い方など、基本的な事柄はご自分に合う講座などを探して学ばれることをお勧めします。



f

リンク

2007/6/18(Mon) 12:03:00|NO.9011

なんか

「bの「<td><small>」から「</small></td>」まで範囲切り取る。」

て命令、凄く羨まし悔しかったので作ってみた(鬼
使い方はちょっと違いそうだが。


#module #defcfunc _strcut str kore , int bango , str kokokara , str kokomade base_str = kore string_index = 0 count = 0 *lp1 start_index = instr( base_str , string_index , kokokara ) if start_index = -1 { return "" } else { count++ if count <= bango { string_index += start_index + 1 goto *lp1 } } end_index = instr( base_str , start_index + string_index , kokomade ) + strlen( kokomade ) return strmid( base_str , start_index + string_index , end_index) #global //01234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789 moto = "123<td><small>abcdefg</small></td><td><small>123456</small></td><td><small>987\n 65</small></td><td><small>ABCDEFGEFGH</small></td>" hajimari = "<td><small>" owari = "</small></td>" mes "[" + _strcut( moto , 0 , hajimari , owari ) + "]" mes "[" + _strcut( moto , 1 , hajimari , owari ) + "]" mes "[" + _strcut( moto , 2 , hajimari , owari ) + "]" mes "[" + _strcut( moto , 3 , hajimari , owari ) + "]" mes "[" + _strcut( moto , 4 , hajimari , owari ) + "]" stop

ちゃっちゃと作ったので、バグが潜んでるかもしれん。
使う分には注意しろ。



eller

リンク

2007/6/18(Mon) 15:22:53|NO.9012

> fさん
第2パラメータで何番目の該当文字列を取り出すか指定するのですね。
バグは無いと思いますが、私だったらstart_index + 1はstart_index + strlen(kokokara)にするでしょうか。……趣味の問題ですね。今回のケースではどっちでも良いでしょう。


なお、余談ですが吉竹さんのために。
結果にHTMLタグ("<td><small>"とか)を含めたくない場合は、19行目のreturnを

return strmid( base_str , start_index + string_index + strlen(kokokara) , end_index - strlen(kokokara) - strlen(kokomade))
とすればOKです。他にも良い方法はありますが、これが一番お手軽かと思います。



f

リンク

2007/6/18(Mon) 16:01:48|NO.9013

ああ、使い方からすれば「ここから」部分と「ここまで」部分は要らないんだな。
これは失敬。



pizza

リンク

2007/6/18(Mon) 22:11:08|NO.9022

Documentオブジェクト(HTMLDocument)を利用して
必要なデータ部分を抜き出してみました。


#module #define IID_IDispatch "{00020400-0000-0000-C000-000000000046}" #uselib "urlmon.dll" #func CreateURLMoniker "CreateURLMoniker" int, wstr, int #uselib "ole32.dll" #func BindMoniker "BindMoniker" comobj, int, int, int #func IIDFromString "IIDFromString" wstr, var #deffunc loadHTML var v, str url // v = Documentオブジェクトを受け取る変数 // url = ロードするURL dimtype moniker, vartype("comobj"), 1 dimtype doc, vartype("comobj"), 1 CreateURLMoniker 0, url, varptr(moniker) if varuse(moniker) == 0 : return // モニカ作成失敗 IIDFromString IID_IDispatch, iid BindMoniker moniker, 0, varptr(iid), varptr(doc) delcom moniker v = doc if varuse(v) : delcom doc return #global #include "user32.as" y = 2000 m = 2 d = 31 url = "http://table.yahoo.co.jp/t?c=2000&a=1&b=1&f="+y+"&d="+m+"&e="+d+"&g=d&s=998405.t&y=0&z=998405.t" loadHTML doc, url if varuse(doc) == 0 : dialog "オブジェクト作成失敗" : end repeat wait 1 if doc("readyState") == "complete" : break title "読み込み中" loop title "解析中" buf = "" comres colTR doc->"getElementsByTagName" "tr" // trのコレクション取得 repeat colTR("length") tr = colTR("item", cnt) if varuse(tr) == 0 : // 背景色が#ffffffのtrを列挙する if tr("bgcolor") == "#ffffff" { buf += tr("innerHTML") + "\n" count++ } delcom tr if count == 50 : break // 最大50日分 loop delcom colTR delcom doc title "終了 : データ"+count+"日分" // 全て小文字に CharLowerBuff varptr(buf), strlen(buf) mesbox buf, ginfo_winx, ginfo_winy, 5 stop

後は変数bufにfさんのモジュールを使うと簡単です。
(,の置き換えはしてません)



pizza

リンク

2007/6/18(Mon) 22:22:48|NO.9023

なんかゴミが残ってた・・・。

ループ内の

if varuse(tr) == 0 :
は消すか、

if varuse(tr) == 0 : continue
にしてください。
(消して問題ないと思います。)



f

リンク

2007/7/7(Sat) 02:26:20|NO.9297

age



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