SyntaxHighlighter

2012年4月23日月曜日

FileMakerでヤマト運輸「お届け予定日検索」

FileMakerでヤマト運輸「お届け予定日検索」

FIleMakerでヤマト運輸の「お届け予定日検索」を実行し「発送締切日」を自動取得します。
Windowsのみ
動作確認
FileMaker Pro 11(9移行なら使えると思います。)

料金・お届け予定日検索(宅急便)|ヤマト運輸 : http://date.kuronekoyamato.co.jp/date/Main

上記ページを表示し、JavaScriptで入力&クリックを行なった場合、
FileMakerの「GetLayoutObjectAttribute ( "WEB1" ; "content")」では、HTMLのソースが取得出来ない!
一旦、Dataスキームで
以下のHTMLを用意して「POST」してもHTMLのソースは取れない!

DATA:text/html,
<form name=form method=post action=http://date.kuronekoyamato.co.jp/date/Takkyubin >
<input type =text name=ACTID value=J_RKTKJS0010>
.....
</form>

で、

formをJavaScriptで記述すれば、「お届け予定日検索」をした結果のHTMLのソースが取得出来ます!








JavaScriptの記述、
FileMakerのスクリプト中に記述する場合、「"」や「改行」の処理がややこしくなるので、フィールドを使います。

フィールド:JavaScript(繰り返し1)
値:

javascript:
function x(form,name,value){
var input = document.createElement( 'input' );
input.setAttribute( 'type' , 'hidden' );
input.setAttribute( 'name' , name );
input.setAttribute( 'value' , value );
form.appendChild( input );
}

フィールド:JavaScript[2](繰り返し2)
値:

javascript:
var form = document.createElement( 'form' );
document.body.appendChild( form );
x(form,'ACTID','J_RKTKJS0010');
x(form,'PARA_STA','7760035');
x(form,'PARA_END','9070000');
x(form,'PARA_YEAR','2012');
x(form,'PARA_MONTH','5');
x(form,'PARA_DAY','3');
x(form,'PARA_SEARCH_KBN','PARA_CARRY_SEARCH');
x(form,'BTN_EXEC_SLEVEL','SEND');

フィールド:JavaScript[3](繰り返し3)
値:

javascript:
form.setAttribute( 'action' , 'http://date.kuronekoyamato.co.jp/date/Takkyubin' );
form.setAttribute( 'method' , 'post' );
form.submit();

※文字数制限があるようでいっぺんには送れないので3分割。

スクリプトは、こんな感じ


Web ビューアの設定 [オブジェクト名: "WEB1"; URL: "about:blank"]
スクリプト一時停止/続行 [間隔(秒): 0]
Web ビューアの設定 [オブジェクト名: "WEB1"; URL: JSMaker::JavaScript]
スクリプト一時停止/続行 [間隔(秒): 0]
Web ビューアの設定 [オブジェクト名: "WEB1"; URL: JSMaker::JavaScript[2]]
スクリプト一時停止/続行 [間隔(秒): 0]
Web ビューアの設定 [オブジェクト名: "WEB1"; URL: JSMaker::JavaScript[3]]

スクリプト一時停止/続行 [間隔(秒): 0]
スクリプト実行 [「_GET_content」]
スクリプト実行 [「_GET発送締切日」]
フィールドへ移動 []




こうやってヤマトにPOSTした場合は、「GetLayoutObjectAttribute ( "WEB1" ; "content")」で結果のHTMLソースが取得できます。

スクリプト実行 [「_GET_content」]の中:

変数を設定 [$n; 値:0]
Loop
変数を設定 [$Result; 値:GetLayoutObjectAttribute ( "WEB1" ; "content")]
Exit Loop If [PatternCount ( $Result ; "</html>" ) or $n>10]
スクリプト一時停止/続行 [間隔(秒): 1]
変数を設定 [$n; 値:$n+1]
End Loop
フィールド設定 [JSMaker::Result; $Result]


スクリプト実行 [「_GET発送締切日」]の中:

変数を設定 [$Source; 値:JSMaker::Result]
変数を設定 [$max; 値:ValueCount ( $Source )]
変数を設定 [$n; 値:1]
Loop
変数を設定 [$Raw; 値:Trim(GetValue ( $Source ; $n ))]
If [$Raw = "<h3 class=\"typeB first-item\">お届け予定日</h3>"]
変数を設定 [$hit; 値:1]
End If
If [$hit=1]
変数を設定 [$Result; 値:$Result & $Raw]
If [$Raw = "</table>"]
Exit Loop If [1]
End If
End If
変数を設定 [$n; 値:$n+1]
Exit Loop If [$n>$max]
End Loop
変数を設定 [$Result; 値:Substitute ( $Result ;  ["<strong>" ; "¶"]; ["</strong>" ; "¶"] )]
変数を設定 [$DAY; 値:GetValue ( $Result ; 2 )]
変数を設定 [$DAY[2]; 値:GetValue ( $Result ; 4 )]
フィールド設定 [JSMaker::Result; "発送締切日:" & $DAY & ¶ &  "発送締切日(午前中お届け):" & $DAY[2]]


これで「お届け日指定」があった場合も逆算がカンタン!?

実際の「楽天RMS運用支援SYSTEM(借名)」の場合は、プラグインを使う予定。で、「楽天RMS」から「お届け希望日」を取得して、ほぼ自動化したいな!






0 件のコメント:

コメントを投稿