webのデータを取得する方法教えてください

解決


株投資家  2004-09-18 22:00:19  No: 10987

VBAの下記と同じような命令を教えてください。
with ActiveSheet.QueryTables.Add(Connection:=URL, Destination:=Range(ADR))
ヤフーのwebから株価を取得したいので・・・。


TtPIPICH  2004-09-19 05:47:01  No: 10988

URLから内容を取得するならIndyを調べてみてください。


株投資家  2004-09-20 18:51:43  No: 10989

FAQ等で下記の取得方法がありますが、
text := InternetReadTextFile()
これだと、タグ情報も入っていて・・・。
先の
web.with ActiveSheet.QueryTables.Add(Connection:=URL, Destination:=Range(ADR))
だと簡単に表形式のデータになるのですが。


にしの  2004-09-22 18:58:40  No: 10990

VBAでも、これでは取得できないと思いますよ。
Excel for VBAならば出来るので、DelphiでもExcelを使ってやらせればよろしいかと。


Mr.XRAY  URL  2004-09-23 00:43:18  No: 10991

私の環境では,以下のコードでWeb上のデータを取得できました.

それにしても,ご自分の環境を書かれない方が多いですね.
また,このような質問の際は,具体的なURLを示されればテストがやり
やすいのではないかと思います.
質問される方が手をかけるか,レスする方に手をかけさせるかの選択の
問題ですけどね.

そのままコピペして実行してみてください.
[Servers]のコンポを使用していることがわかっていて,Delphiのバージョ
ンが書いてあれば,もっと早くレスしたんですけど...
この掲示板でもたまにあるように,違うんです,と言われるのがいやなので...

//====================================================================
//  エクセルを起動して指定URLのデータを取込む
//  新規プロジェクトに以下のコンポーネントを配置
//  [Servers] TExcelApolication
//  [Servers] TExcelWorkbook
//  [Servers] TExcelWorkSheet
//  [Standard] TButton
//  動作確認 WindowsXP + Delphi5 + Excel2000
//====================================================================
procedure TForm1.Button1Click(Sender: TObject);
var
     URLName: String;
     pC: OleVariant;
     pD: Range;
begin
     //エクセル起動
     ExcelApplication1.Connect;
     //エクセル表示
     ExcelApplication1.Visible[0]  :=  True;
     //ブックとシートオブジェクト接続
     ExcelWorkbook1.ConnectTo(
           ExcelApplication1.Workbooks.Add(Null, 0));
     ExcelWorksheet1.ConnectTo(
           ExcelWorkbook1.Worksheets['Sheet1'] as _Worksheet);

     //読込むCSVデータのURL}
     URLName :='http://www.pref.kanagawa.jp/guide/40/4006.html';
     pC        :='URL;'+URLName;
     //出力先セル(左上)の指定}
     pD :=ExcelWorkSheet1.Cells.Range_['A1','A1'];
     with ExcelWorkSheet1.QueryTables.Add(pC,pD,EmptyParam) do begin
       RefreshStyle           :=xlOverwriteCells;//上書き
       AdjustColumnWidth      :=True;            //列幅自動調整
       TextFileCommaDelimiter :=False;           //カンマ区切り
       Refresh(EmptyParam);                      //実行
     end;
end;
//====================================================================
//  エクセルオブジェクト使用終了
//  エクセルが先に閉じているのが条件
//====================================================================
procedure TForm1.FormCloseQuery(Sender: TObject; var CanClose: Boolean);
begin
     ExcelApplication1.Quit;
end;

end.


株投資家  2004-09-23 03:50:33  No: 10992

ご指導ありがとうございます。なにぶん初心者で・・。
そっか、環境で随分違ってしまうことも・・。
WinXP、Delphi7、Office2003です。
確かにExcelのVBAです。

HomePageは、ヤフーファイナンスの時系列データで、
http://table.yahoo.co.jp/t?c=2004&a=6&b=21&f=2004&d=9&e=22&g=d&s=9437&y=0&z=1001
です。
データ数がせいぜい300程度であれば、処理速度やその他気にせず、
excelを使った方が良いのですかね。
TClientSocketなどを使って、HTLMを一文字ずつ処理する方法も見ましたが、
より簡単ですね。
今時間がないので、後日試してみます。
数々の助言大変感謝しておりまうす。


株投資家  2004-09-23 06:03:35  No: 10993

追記
先の例  よく見ると
Serverコンポーネント?
すみません、どこで入手できるのかわからなくて・・。

それと、既存のEXCELデータもなく、残す必要もないのにEXCELを使うのは、
なんとなく違和感が・。

また、悩む日々w。


Mr.XRAY  URL  2004-09-23 08:06:31  No: 10994

>それと、既存のEXCELデータもなく、残す必要もないのにEXCELを使うのは、

これは変ですよ.ネット上で
with ActiveSheet.QueryTables.Add(Connection:=URL, Destination:=Range(ADR))
のような関係を検索すると,Excel関係のものとなっていますから.
では,株投資家さんは,一体,なにをどうしたいのでしょう.
「残す必要がない」なら,ブラウザでみるだけで用がすむとおもいますが...

私の調べ方が足りないのかも知れません.
with ActiveSheet.QueryTables.Add(Connection:=URL, Destination:=Range(ADR))

はVBAではどういう動作をするのですか.EXCELではないということですよね.

>すみません、どこで入手できるのかわからなくて・・。

Delphiのバージョンが不明なので正確なお答えではありませんが,
最初からついているバージョンもありますので,わからないようで
したら,株投資家さんのはないバージョンのDelphiでしょう.


Mr.XRAY  URL  2004-09-23 08:12:06  No: 10995

>Delphiのバージョンが不明なので正確なお答えではありませんが

Delphi7 のPro版以上なら最初からあります.
http://homepage2.nifty.com/Mr_XRAY/Delphi/plExcel/B_Delphi7.htm


株投資家  2004-09-24 01:44:42  No: 10996

バージジョンは7のproです。

で、何をしたいかというと
現在Excelでヤフーファイナンスのwebデータをシートへ埋め込み
つぎに、EXCELのVBAでP&Fチャートを作成させています。
このチャートは直近データ100位でいいので蓄積させなくてよいので、
起動の度にデータ取り込みを行い、終了で破棄してと考えております。

これを、DELPHI上で行おうと考えたのですが、
私のレベルでは難しいなとつくづく感じました。


KKK  2004-09-24 01:58:04  No: 10997

ようは、データを取得して、加工してグラフ(Chart)を書きたい。Chart表示後は取得したデータは必要ない。それを、Delphiのみでおこないたいって事でしょうか?
残念ながら希望されている命令(関数)等は無いと思います。Indy、THTTP等を使用してこまごまコードを書く事しか方法は無いと思います。
ちなみに、私も同じようなプログラムを作りたく勉強して取得できるようになり、
そのおかげで思わぬ株関係のデータも取得できるようになり喜んでいます(笑)。


株投資家  2004-09-24 02:29:06  No: 10998

返信ありがとうございます。

今回  とりあえずExcelの操作をしてみようと思います。
先のserversコンポですが、
OCX\servers\excelXP.pasというファイルを見つけました。
そこで、コンポーネントのインストールを行ったところ、

パッケージ  dcluse.dpk というものが作成されましたが、
この後どうすればよいのか?

最終的には、パレットの設定?等でコントロールがでてくるのかと思うのですが。

また、THTTPとはどれなのでしょう?WebDispacherではないですよねw。


株投資家  2004-09-24 03:18:47  No: 10999

serversコンポーネントの組み込みができました。
Mr.XRAYさん指定のHPを見ました。(やっと方法が理解できた)


株投資家  2004-09-24 03:41:55  No: 11000

Mr.XRAYさんのサンプルを実行しました。
エラー:range  未定義の識別子
とでてしまいますが・・・。
何か他にも組み込みが必要なのでしょうか。

pD:Rangeの定義を行わず、直接QeryTable.add()の中にいれると無事に実行できました。

さてと、どの方法でいくか再度考えて見ます。


kkk  2004-09-24 17:34:22  No: 11001

P&FのChatt表示ですか。これもTChartをつかって私も表示できるように作ってあります。最初大変かもしれませんががんばってください。
THTTPは、FastNetタグ内のNMHTTPです(Ver7には無い?)。


株投資家  2004-09-28 07:14:30  No: 11002

とりあえず、下記のMLリストで
タグ付テキストが取得できるようになりました。(スピードも速い)
今後の課題は、このテキストからテーブルデータを取り出すことです。

「[Delphi-ML:66515] Re: ホームページ上の文字データを取得する方法
Susumu KAWAMURA <susumuk@fa.mbn.or.jp>
Thu, 11 Apr 2002 15:01:16 +0900」


kkk  2004-09-28 18:46:56  No: 11003

その後は、http://forum.nifty.com/fdelphi/samples/index.htmが
参考になるかも?


株投資家  2004-09-30 16:45:58  No: 11004

タグ付テキストが取得できるようになりましたので、
とりあえず、解決したものとします。
アドバイスありがとうございました。


※返信する前に利用規約をご確認ください。

※Google reCAPTCHA認証からCloudflare Turnstile認証へ変更しました。






  このエントリーをはてなブックマークに追加