2016-07-30 6 views
1

私の4Dデータベースには、外部アプリケーションを呼び出してAPIサイトへのHTTPリクエストを行うメソッドがあります。 https://somewhere.com/api/?key=somekey&param=someparam。要求はJSON応答を返します。ただし、外部アプリケーションは呼び出しの成功または失敗を返します。 JSONレスポンスを抽出できません。4D v12データベースでHTTPリクエストを作成するにはどうすればいいですか?

私の4Dデータベースはまだバージョン12であり、まだ最新のバージョンに移行する計画はありません。 HTTPリクエストを作成してJSONレスポンスを取得する方法はありますか?私は組み込みのPHPエンジンを使用してcURL呼び出しを行うことを考えていました。誰か4Dでこれをやったことがありますか?

答えて

2

宮古啓介のOAuthプラグインを使用することをおすすめします。 https://github.com/miyako/4d-plugin-oauth。それには、cURLライブラリとJSON解析ライブラリが付属しています。私はそれを使用して、JSONデータをAPIソースから取得します。彼はプラグインを無効にしているように見えますが、別のコンポーネントへのリンクがあります。

http://sources.4d.com/trac/4d_keisuke/wiki/Plugins/

ARRAY LONGINT($optionNames;0) 
ARRAY TEXT($optionValues;0) 
C_BLOB($inData;$outData) 

$url:="https://api.atsomewhere.com/blahblah" 
$error:=cURL ($url;$optionNames;$optionValues;$inData;$outData) 

If ($error=0) 
    $jsonText:=BLOB to text($outData;UTF8 text without length) 

    $root:=JSON Parse text ($jsonText) 

    JSON GET CHILD NODES ($root;$nodes;$types;$names) 

    $node:=JSON Get child by name ($root;"Success";JSON_CASE_INSENSITIVE) 
    $status:=JSON Get bool ($node) 

    If ($status=1) 
    $ResponseRoot:=JSON Get child by name ($root;"Response";JSON_CASE_INSENSITIVE) 

    $node1:=JSON Get child by name ($ResponseRoot;"SourceId";JSON_CASE_INSENSITIVE) 
    $node2:=JSON Get child by name ($ResponseRoot;"SourceName";JSON_CASE_INSENSITIVE) 

    $output1:=JSON Get text ($node1) 
    $output2:=JSON Get text ($node2) 

End if 

END IF

0

4D v12にはPHPが組み込まれています。 PHP EXECUTEコマンドを使用してPHPファイルを呼び出しました。

C_TEXT($result) 
C_TEXT($param1) 
C_BOOLEAN($isOk) 
$param1:="Tiger" 
//someFunction is a function in index.php. $result will hold the JSON return value. 
//I pass value "Tiger" as parameter 
$isOk:=PHP Execute("C:\\index.php";"someFunction";$result;$param1) 

C:\のindex.phpのは、4DのV12を実行するPHPスクリプトが含まれている4D v12でPHPをcURLのためにネイティブサポートを持っていないので、しかし、私は、のfile_get_contents()

マイ4Dコードは以下の通りであるを使用しました。コードは

<?php 
function someFunction($p1){ 
    $somekey = 'A$ga593^bna,al'; 
    $api_URL = 'https://somewhere.com/api/?key='. $somekey. '&param='.$p1; 
    return file_get_contents($api_URL); 
} 
?> 

です。このアプローチはGET要求に適用されます。しかし、これはすでに私の目的に役立ちます。

関連する問題