|
|
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
|
|
2007/6/17(Sun) 12:42:07|NO.8983
とりあえず、hspに付属の
sampview.exe
を実行して、
サンプルのカテゴリを
HSPINET
にして、
表示される物を見てみると良いんじゃね?
|
|
2007/6/17(Sun) 12:52:31|NO.8984
なでしこ? なにそれ・・
わざわざ、HSPでやる意味あんの?
出来るか出来ないかは、あんたの腕次第だろ?
その、なでしことやらができるんなら。
|
|
2007/6/17(Sun) 22:01:30|NO.9001
吉竹さん、はじめまして。
スクリプトを拝見する限りでは「なでしこ」のほうが格段に簡単にできるように思いますが、もちろんHSPでも可能です。
fさんの仰っているサンプルビューアでネットの接続方法は分かります。
文字コード変換・小文字変換はモジュールがありますのでそれを利用されると良いでしょう。
http://quasiquote.org/hspwiki/Module%3aTextproc
テキストの切り出しにはgetstr, instr, strmidなどを利用することになると思います。多少文字列操作の慣れが必要です。
ループの使い方や配列変数の使い方など、基本的な事柄はご自分に合う講座などを探して学ばれることをお勧めします。
|
|
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
ちゃっちゃと作ったので、バグが潜んでるかもしれん。
使う分には注意しろ。

| |
|
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です。他にも良い方法はありますが、これが一番お手軽かと思います。
|
|
2007/6/18(Mon) 16:01:48|NO.9013
ああ、使い方からすれば「ここから」部分と「ここまで」部分は要らないんだな。
これは失敬。
|
|
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さんのモジュールを使うと簡単です。
(,の置き換えはしてません)

| |
|
2007/6/18(Mon) 22:22:48|NO.9023
なんかゴミが残ってた・・・。
ループ内の
if varuse(tr) == 0 :
は消すか、
if varuse(tr) == 0 : continue
にしてください。
(消して問題ないと思います。)
|
|
2007/7/7(Sat) 02:26:20|NO.9297
age
|
|