ラベル JSON の投稿を表示しています。 すべての投稿を表示
ラベル JSON の投稿を表示しています。 すべての投稿を表示

2014年8月21日木曜日

FileMaker WEBビューア経由でJSONデータにアクセス!(3)



FileMaker WEBビューア経由でJSONデータにアクセス!(2) :
http://qbxxdp.blogspot.jp/2014/08/filemaker-webjson2.html
から改良。

修正!
・OS X , iOS でJSONのキーが日本語の場合に対応。
・値がTEXTでない場合、[object Object] を出力しないように変更。
・JSONのキーに対する変数名を取得するように変更。
・Winは、クリップボード経由を追加。


検証:
FileMaker Pro 13
FileMaker Go 13
Mac OS X 10.9
Windows 7|Windows 8

○|Mac OS X 10.9
○|FileMaker Go 13
○|Windows 7|Windows 8 (クリップボード経由)

スクリプト:JsonAnalyzer
Web ビューアの設定 [オブジェクト名: "WEB1"; 処理: リセット]
スクリプト一時停止/続行 [間隔(秒): 0]
変数を設定 [$JSON; 値:Substitute ( JSON::JSON ; ["¶" ; ""] ; [Char ( 10 ) ; ""]  ; [Char ( 13 ) ; ""]  )]
変数を設定 [$OS; 値:Get ( システムプラットフォーム )]
変数を設定 [$HTML; 値:" ....."]
Web ビューアの設定 [オブジェクト名: "WEB1"; URL: "data:text/html;charset=utf-8," & $HTML]

$HTMLの中身     

「スクリプト:fmpJsonAnalyzer」 に変更を加え、JSONのキーと値をFileMakerのそれぞれのフィールドに取得できるように変更。

スクリプト:fmpJsonAnalyzer
変数を設定 [$fmKeys; 値:Substitute ( $fmKeys ; "{RTN}" ; ¶ )]
フィールド設定 [JSON::Key; $fmKeys]
変数を設定 [$MAX; 値:ValueCount ( $fmKeys )]
変数を設定 [$n; 値:1]
Loop
Exit Loop If [$n>$MAX]
変数を設定 [$fmKey; 値:GetValue ( $fmKeys ; $n )]
変数を設定 [$Values; 値:$Values  &If ( IsEmpty ( $Values ) ; "" ; ¶ ) & Evaluate ( $fmkey )]
変数を設定 [$n; 値:$n+1]
End Loop
フィールド設定 [JSON::Value; $Values]
フィールドへ移動 []



Windows専用スクリプト
スクリプト:JsonAnalyzer_clipboard
#For Windows Only
レイアウト切り替え [「JSON」 (JSON)]
フィールド設定 [SYSTEM::gClipboard; ""]
Web ビューアの設定 [オブジェクト名: "WEB1"; 処理: リセット]
スクリプト一時停止/続行 [間隔(秒): 0]
変数を設定 [$JSON; 値:Substitute ( JSON::JSON ; ["¶" ; ""] ; [Char ( 10 ) ; ""]  ; [Char ( 13 ) ; ""]  )]
変数を設定 [$OS; 値:Get ( システムプラットフォーム )]
変数を設定 [$HTML; 値:"....."]
#"data:text/html;charset=utf-8,
Web ビューアの設定 [オブジェクト名: "WEB1"; URL: "data:text/html;charset=utf-8," & $HTML]
変数を設定 [$n; 値:0]
Loop
スクリプト一時停止/続行 [間隔(秒): .5]
貼り付け [選択; SYSTEM::gClipboard]
Exit Loop If [ not IsEmpty ( SYSTEM::gClipboard )]
Exit Loop If [$n>10]
変数を設定 [$n; 値:$n+1]
End Loop
フィールドへ移動 []
If [$n>10]
カスタムダイアログを表示 ["!"; "DATA取得失敗"]
現在のスクリプト終了 []
End If
変数を設定 [$DATA; 値:SYSTEM::gClipboard]
#
変数を設定 [$DATA; 値:Substitute ( $DATA ; "\";$" ; "\"" & ¶ & "$")]
変数を設定 [$MAX; 値:ValueCount ( $DATA )]
変数を設定 [$n; 値:1]
Loop
Exit Loop If [$n>$MAX]
変数を設定 [$er; 値:Evaluate ( "Let ([" &  GetValue ( $DATA ; $n )  & "]; 0 )" )]
変数を設定 [$n; 値:$n+1]
End Loop
#
変数を設定 [$fmKeys; 値:Evaluate ( $fmKeys )]
フィールド設定 [JSON::Key; $fmKeys]
変数を設定 [$MAX; 値:ValueCount ( $fmKeys )]
変数を設定 [$n; 値:1]
Loop
Exit Loop If [$n>$MAX]
変数を設定 [$fmKey; 値:GetValue ( $fmKeys ; $n )]
変数を設定 [$Values; 値:$Values  &If ( IsEmpty ( $Values ) ; "" ; ¶ ) & Evaluate ( $fmkey )]
変数を設定 [$n; 値:$n+1]
End Loop
フィールド設定 [JSON::Value; $Values]
フィールドへ移動 []

$HTMLの中



8万文字のJSONデータでも取得できます。
OS X、iOS に比べると処理が遅いです。




2014年8月20日水曜日

FileMaker WEBビューア経由でJSONデータにアクセス!(2)

例えば、こんなJSONデータがあって、

「"2014-08-17T01:10:00+09:00"」このデータを

フィールド設定 [JSON::Result; $start.dateTime]
こんな感じで取得できたらイイですよね!
それができるんです!
しかも! プラグインなし! FileMakerの標準機能だけで!
※標準機能だけ と言いつつ、WEBビューア+JavaScriptは、使用します。


追記:2014/08/20
修正!
・OS X , iOS でJSONのキーが日本語の場合に対応。
・値がTEXTでない場合、[object Object] を出力しないように変更。
・JSONのキーに対する変数名を取得するように変更。
・Winは、クリップボード経由を追加。
FileMaker WEBビューア経由でJSONデータにアクセス!(3) : http://qbxxdp.blogspot.jp/2014/08/filemaker-webjson3.html



検証:
FileMaker Pro 13
FileMaker Go 13
Mac OS X 10.9
Windows 7|Windows 8

○|Mac OS X 10.9
○|FileMaker Go 13
△|Windows 7|Windows 8

「OS X」と「iOS:FileMaker Go 13」は、イイ感じです。
Winは、不安定です。

レイアウトに「WEB1」と言う名前でWEBビューアを設置。


スクリプト:JsonAnalyzer
Web ビューアの設定 [オブジェクト名: "WEB1"; 処理: リセット]
スクリプト一時停止/続行 [間隔(秒): 0]
変数を設定 [$JSON; 値:Substitute ( JSON::JSON ; ["¶" ; ""] ; [Char ( 10 ) ; ""]  ; [Char ( 13 ) ; ""]  )]
変数を設定 [$OS; 値:Get ( システムプラットフォーム )]
変数を設定 [$HTML; 値:" ....."]
Web ビューアの設定 [オブジェクト名: "WEB1"; URL: "data:text/html;charset=utf-8," & $HTML]

「$HTML」の中身


JavaScriptでJSONのキーをFileMakerの変数名にして
location.href = fmp://$/..... で渡すデータを作成します。
&$start.dateTime=2014-08-17T01:10:00+09:00&$start.timeZone=Asia/Tokyo.....
入れ子になっている場合は、ドット「.」でつなぎます。


(location.href = 'fmp://$/JSON?script=fmpJsonAnalyzer'+FMDATA; で受ける側。)
スクリプト:fmpJsonAnalyzer

フィールド設定 [JSON::Result;
$kind
& & $etag
& & $id
& & $status
& & $htmlLink
& & $created
& & $updated
& & $summary
& & $description
& & $location
& & $creator
& & $creator.email
& & $creator.displayName
& & $creator.self
& & $organizer
& & $organizer.email
& & $organizer.displayName
& & $organizer.self
& & $start
& & $start.dateTime
& & $start.timeZone
& & $end
& & $end.dateTime
& & $end.timeZone
& & $iCalUID
& & $sequence
& & $reminders
& & $reminders.useDefault
]
フィールドへ移動 []
スクリプト一時停止/続行 [制限時間なし] ※テストでGoogleカレンダーのEventを取得。テストなのでひとつのフィールドへ設定。


OS Xの場合、綺麗に取得できました!※テスト時は、「"kind: "& $kind」としていたので「Result」の値が異なります。
iOS FileMaker Go 13 でもバッチリです!



Windowsは、少し残念。
"htmlLink"の値が取得出来ていません。値に「=」があるのが問題のようです。
「%3D」に置換してみたりしましたが、無理。解決策は、また今度。



Windowsの場合は、まだまだ残念な事があります。
JSONのデータが多いと動作しません。

テスト
Googleカレンダーの「日本の祝日」データを取得してみました。


(location.href = 'fmp://$/JSON?script=fmpJsonAnalyzer'+FMDATA; で受ける側。)
スクリプト:fmpJsonAnalyzer

変数を設定で「$feed.entry.1.title.$t」こんな名前($が先頭以外にある)を設定するとエラーになりますが、取得時は、エラーになりません。

フィールド設定 [JSON::Result;
$feed.entry.1.title.$t
 & ¶ & $feed.entry.2.title.$t
 & ¶ & $feed.entry.3.title.$t
 & ¶ & $feed.entry.4.title.$t
 & ¶ & $feed.entry.5.title.$t
 & ¶ & $feed.entry.6.title.$t
 & ¶ & $feed.entry.7.title.$t
 & ¶ & $feed.entry.8.title.$t
 & ¶ & $feed.entry.9.title.$t
 & ¶ & $feed.entry.10.title.$t
 & ¶ & $feed.entry.11.title.$t
 & ¶ & $feed.entry.12.title.$t
 & ¶ & $feed.entry.13.title.$t
 & ¶ & $feed.entry.14.title.$t
 & ¶ & $feed.entry.15.title.$t
 & ¶ & $feed.entry.16.title.$t
 & ¶ & $feed.entry.17.title.$t
 & ¶ & $feed.entry.18.title.$t
 & ¶ & $feed.entry.19.title.$t
]
フィールドへ移動 []
スクリプト一時停止/続行 [制限時間なし] ※テストでGoogleカレンダーのEventを取得。テストなのでひとつのフィールドへ設定。

JSONデータ



OS Xの場合、取得OK!
iOS FileMaker Go 13 OK!



Windowsは、残念動きません。
色々試してみましたが、現在は、無理。
Windows の場合は、プラグイン:ScriptMakerPS を使うとカンタンです。

2014年8月2日土曜日

FileMaker WEBビューア経由でJSONデータにアクセス!

検証:
FileMaker Go 13 OK
Win8|FMP13 OK

残念ながら、Windows|FileMakerPro 13 では、動作せず。
Windows 8|FileMaker Pro 13 で動作OK!(2014/08/06追記)
以下を追加。
<meta http-equiv=\"X-UA-Compatible\" content=\"IE=8 ; IE=9 ; IE=10\" />

JSONをFileMakerの関数だけで扱うのは、厄介です。
JavaScriptの JSON.parse を利用してWEBビューア経由だと JSON の扱いがラクになります。
FileMaker Pro 13.0v3(v2?)から「fmp://$/」が使えるのでWEBビューアからのデータの受取がよりしやすくなりました。

JSONデータ


スクリプト:
Web ビューアの設定 [オブジェクト名: "WEB1"; 処理: リセット]
スクリプト一時停止/続行 [間隔(秒): 0]
変数を設定 [$JSON; 値:Substitute ( SYSTEM::gResult_JSON ; ["¶" ; ""] ; [Char ( 10 ) ; ""] ; [Char ( 13 ) ; ""] )]
変数を設定 [$JS; 値:*****
Web ビューアの設定 [オブジェクト名: "WEB1"; URL: $JS]

値:*****


受信スクリプト
スクリプト:fmpSetToken
フィールド設定 [targetGoogleAccount::refreshToken; $refresh_token]
フィールド設定 [targetGoogleAccount::accessToken; $access_token]


データ量が多い場合、速度の心配がありますが、検証は、また後日...。

FileMaker WEBビューア経由でJSONデータにアクセス!(2) :
http://qbxxdp.blogspot.jp/2014/08/filemaker-webjson2.html