喫茶XRAYトップページ

[▲前のスレッド]

[3026] Web APIのXML-RPCで郵便番号検索返信 削除
2010/2/4 (木) 22:02:44 Mr.XRAY
XML-RPCサービスについて
http://hpcgi1.nifty.com/MADIA/DelphiBBS/wwwlng.cgi?print+201002/10020002.txt

というのがあったので,やってみました.
RESTでのテストはやったことがありますが,いい経験だと思ったのですが,
XML-RPCってあまり使われていないようです.
全体の2割程度ではないかという記事がありました.

レスしようとして,発言者の名前を見たら「超初心者」
何だ! ステハンかよ.
レスは止めました.くどいようですがステハンは嫌いです.
まあいいか,勉強になったから.

http://mrxray.on.coocan.jp/Delphi/plSamples/920_WebAPI_XML-RPC.htm



[3027] Re:Web APIのXML-RPCで郵便番号検索返信 削除
2010/2/5 (金) 11:47:17 TS
▼ Mr.XRAYさん

流石ですね、こちらの他のIndyの記事を見て少しは違いが分かって
実行時まではエラーが出ない様にしたのですが。
ちなみに10行より少し多いです。

Delphi2010のユニコードの性だと思いますが、実行時にエラーが出て
テストを中止してたところです、色々勉強になります。
 

[3028] Re2:Web APIのXML-RPCで郵便番号検索返信 削除
2010/2/5 (金) 14:16:17 Mr.XRAY
▼ TSさん

相変わらずIndyには悩まされますね.

Webアプリもいつかはやらなければならないとは思っているのですが.
いえ,今回のようなのではなく,ブラウザ表示ですね.

今,TSさんのレスを読んでいて,ふと思ったのですが,

>レスは止めました.くどいようですがステハンは嫌いです.

いつだったか,Halbowさんとのメールのやり取りで,Halbowさんが
「たとえステハンの質問であっても,ネット上の掲示板は
他の方も見ているから,そういう方も考えればレスは大切です」
と書いてきたのを思い出しました.

考え直してみます.

今後のアプリ開発ではユニコード化は避けられないと思います.
Delphi2009以降をお持ちでなかったら失礼!! (笑)


[3029] Re2:Web APIのXML-RPCで郵便番号検索返信 削除
2010/2/5 (金) 14:23:19 Mr.XRAY
▼ TSさん

> Delphi2010のユニコードの性だと思いますが、実行時にエラーが出て
> テストを中止してたところです、色々勉強になります。


これは,例のスレッドでリンクのあるファイルのことですね.
私もダウンロードしてEXEだけは実行してみました.
各国のWeb APIサービスのリストがあるんですね.

こんなのいらないからと,サンプルを作成したんです.
ひな形のxmlファイルが欲しかったのが本音?

あわてて作成したものですから,エラーの際の処理が全くしていません
でした.後で,ひそかに追加するつもりです (^^;


[3030] Re2:Web APIのXML-RPCで郵便番号検索返信 削除
2010/2/5 (金) 14:52:17 Mr.XRAY
▼ TSさん

例のスレッドにTSのindy関係のカキコがあったんですね.
最近,ちゃんと読んでいないのがバレバレでした.

一応レスしておいたのですが,ハズしていたらゴメンナサイ.
あくまでも小生の経験です.


[3031] Re3:Web APIのXML-RPCで郵便番号検索返信 削除
2010/2/5 (金) 16:54:15 TS
▼ Mr.XRAYさん

 LibXmlParserのコンポーネントが使われており、Delphi2010に
対応とあったのですが、みるとStringが全てAnsiStringになって
ますね。

[3032] Re4:Web APIのXML-RPCで郵便番号検索返信 削除
2010/2/5 (金) 20:30:05 TS
▼ Mr.XRAYさん

opml.pasの下記のResult部分をコメントにすると正常に起動し
コンボックスにリストが現れる様です。
下記のコードに異常はなくARFC822Stringにも
'Thu,27 Jul 2002 01:35:52 GMT'の文字が入るにもかかわらず
ここでエラーになります。

function RFC822ToDateTime(ARFC822String: string): TDateTime;
begin
   with TIdDateTimeStamp.Create(nil) do
   try
    SetFromRFC822(ARFC822String);
    //Result := AsTDateTime ;
   finally
    Free;
   end;
end;

>  LibXmlParserのコンポーネントが使われており、Delphi2010に
> 対応とあったのですが、みるとStringが全てAnsiStringになって
> ますね。


実際に使用されているのは
FUNCTION  ConvertWs   (Source: AnsiString; PackWs: BOOLEAN) : AnsiString;          // Convert WS to spaces #x20
だけの様です。



[3035] Re5:Web APIのXML-RPCで郵便番号検索返信 削除
2010/2/7 (日) 17:51:28 Mr.XRAY
▼ TSさん

>LibXmlParserのコンポーネントが使われており、Delphi2010に
>対応とあったのですが、みるとStringが全てAnsiStringになって
>ますね。


LibXmlParser,ここのですね,
http://www.destructor.de/xmlparser/doc/delphi-installation.htm

う〜ん.

>'Thu,27 Jul 2002 01:35:52 GMT'の文字が入るにもかかわらず

なんなんでしょう.
確認は,... (^^;)
既に,例のひな形のxmlを残して,削除してしまいました.


[3036] LibXmlParserのバグか返信 削除
2010/2/7 (日) 18:04:30 Mr.XRAY
▼ TSさん

> SetFromRFC822(ARFC822String);

ここんなんですが,今こんなページを見つけました.
参考になるでしょうか.なんかバグがあるみたいです.

プレイヤーズビレッジ開発日誌
XML Parser
http://www.playersvillage.com/blog/2009/05/xml_parser.php

>独自のUtf8ToAnsi関数を使ってるので、消して標準の方を使うようにしてあげよう。
>Utf8ToAnsi関数を消すなりリネームするなりしてください。



[3042] Re:Indyのバグかも返信 削除
2010/2/7 (日) 22:53:15 TS
▼ Mr.XRAYさん

参考になるホームページを教えていただきありがとうございます。
応答して返ってくるXMLの漢字の部分が文字化けする状態です。
Delphi2010でしか試していません、上記のホームページの指摘事項の
問題では無いみたいです、暇をみて調査中です。

以下もopml.pasで使用されているソースですが、
Delphi7で使用している。Indy10.0.52では正常に'2002/07/27 1:35:52'
が表示されますが、Delphi2010のIndyではエラーとなります。

エラー箇所はIdDateTimeStampの
procedure ValidateTimeStamp(const ATimeStamp: TIdDateTimeStamp);
 IdGlobal.ToDo;
の部分です。
これをコメントアウトすると'2003/08/28 1:35:52'が返ってきます。
年月日が1プラスされたものです。
これって一体何なんでしょうか。

uses
  各種,
  ,IdBaseComponent, IdComponent, IdTCPConnection,IdTCPClient,IdDateTimeStamp, IdHTTP;

//プログラム内のコード
function RFC822ToDateTime(ARFC822String: string): TDateTime;
begin
   with TIdDateTimeStamp.Create(nil) do
   try
    SetFromRFC822(ARFC822String);
    Result := AsTDateTime ;
   finally
    Free;
   end;
end;

//てすと用
procedure TForm1.BitBtn1Click(Sender: TObject);
var
  d1:TDateTime;
  st1:string;
begin
  //Edit1.text='Thu,27 Jul 2002 01:35:52 GMT';
  d1:=RFC822ToDateTime(Edit1.text);
  //Edit2.text=2002/07/27 1:35:52
  Edit2.text:=DateTimeToStr(d1);
end;


[3043] Re2:Indyのバグかも返信 削除
2010/2/7 (日) 23:59:10 Mr.XRAY
▼ TSさん

> Delphi2010でしか試していません、上記のホームページの指摘事項の
> 問題では無いみたいです、暇をみて調査中です。


そうでしたか.残念!!

> 以下もopml.pasで使用されているソースですが、
> Delphi7で使用している。Indy10.0.52では正常に'2002/07/27 1:35:52'
> が表示されますが、Delphi2010のIndyではエラーとなります。


とすると,文字コードページ関係なのかな?

> これをコメントアウトすると'2003/08/28 1:35:52'が返ってきます。
> 年月日が1プラスされたものです。
> これって一体何なんでしょうか。


ますます分かりません.
またソースをダウンロードしてやってみないことには... (^^;
何とも.スミマセンね.役に立たなくて.
TSさんの格闘を祈るばかりです.ハイ.

ん? 日付って,エンコード何でしたっけ?


[3044] Re3:Indyのバグかも返信 削除
2010/2/8 (月) 08:42:57 TS
▼ Mr.XRAYさん
>ん? 日付って,エンコード何でしたっけ?
話が文字化けとは違ってコード内のIndyの日付関数の事です。

> またソースをダウンロードしてやってみないことには... (^^;
前回のコードはIndyの関数の1つで'Thu,27 Jul 2002 01:35:52 GMT'
をセットすればプロパティのAsDateTime(TDateTime)で'2002/07/27 1:35:52'
が得られると言う物です。

Edit2個、ボタン1個あとコードをコピペすればテストできます、
ダウンロードは不要ですので、エラーになるかならないかだけ
できれば結果を教えて下さい。

日付が1プラスになるのも初期値が0セットと関数にあるのに
最初1がセットされ、それに正常な値がプラスされる為の様です。

最新のIndy10とIndy10.0.52とはこの部分のコードがまるで違います。

あまりに大胆なエラーなので(必ずエラーになる様に書いてある)
他の方のIndyはどうなのか結果が知りたいです。

[3045] Re4:Indyのバグかも返信 削除
2010/2/8 (月) 10:55:47 Mr.XRAY
▼ TSさん

> あまりに大胆なエラーなので(必ずエラーになる様に書いてある)
> 他の方のIndyはどうなのか結果が知りたいです。


では,テスト結果のみです.
(1) 新規プロジェクトに以下を配置
    TButton 1個
    TEdit 2個
    TIdHTTP 1個
(2) オブジェクトインスペクタで
    Edit1のTextプロパティにThu,27 Jul 2002 01:35:52 GMTをセット
(4) テストコードは以下

// usesにIdDateTimeStampを追加
//
function RFC822ToDateTime(ARFC822String: string): TDateTime;
begin
   with TIdDateTimeStamp.Create(nil) do
   try
    //RFC 準拠の日付および時刻の値からTIdDateTimeStampの日付および時刻を取得
    SetFromRFC822(ARFC822String);
    Result := AsTDateTime ;
   finally
    Free;
   end;
end;

procedure TForm1.Button1Click(Sender: TObject);
var
  d1 : TDateTime;
  st1 : string;
begin
  //Indtyバージョン確認用
  Panel1.Caption := IdHTTP1.Version;

  //Edit1.text='Thu,27 Jul 2002 01:35:52 GMT';
  d1 := RFC822ToDateTime(Trim(Edit1.text));
  //Edit2.text=2002/07/27 1:35:52
  Edit2.text := DateTimeToStr(d1);
end;

全てWindows XP(SP3)

Delphi6(UP2) Pro Indy 10.2.3
   To do item undone.

Delphi7 Pro Indy 9.00.10
   Edit2.Textの値が1899/12/30となる

Delphi2007-R2 Pro Indy 10.1.5
   To do item undone.

Delphi2009(UP3) Pro Indy 10.5.7
  ValidateTimeStamp() function in IdDateTimeStamp.pas is not implemented yet.
「IdDateTimeStamp.pas is not implemented yet.」とは
一体どういう意味なんでしょう?

Delphi2010(UP5) Pro Indy 10.5.5(Delphi2010のデフォルトバージョン)
   To do item undone.

さて.



[3050] Re5:Indyのバグかも返信 削除
2010/2/8 (月) 22:20:51 TS
▼ Mr.XRAYさん

詳しいテストありがとうございます。

Indy10.0.52以外では全滅と言う事の様ですね。

これほど放置されていると言う事はこの関数は使うなと言う事
なんでしょうかね、でもこうゆう時ソースコードがあるっていいですね。

とりあえず、自分の都合の良い様に書き換えて使えます。

今Delphi2010に完全に移行すべくぼちぼちやってますが
コードの無い物は今まで使わずにいたので助かります。

いくらコードがあっても対応待ちのコンポーネントもありますが。
 

[3052] Re6:Indyのバグかも返信 削除
2010/2/9 (火) 00:27:59 Mr.XRAY
▼ TSさん

> これほど放置されていると言う事はこの関数は使うなと言う事

おそらくそうでしょう.
だって,

>「IdDateTimeStamp.pas is not implemented yet.」

ですもん(笑)


[▼次のスレッド]
INCM/CMT
Cyclamen v3.82