REST API を使用した JSON データの読み取り
問題
一部の Web サイトでは、休みデータを読み取るための API であり、多くの場合、応答は JSON 形式のテキストです。 それをどのように JMP に取り込むのでしょうか。
解決
を使用した例を次に示します。 meetup.com REST API . これは、Web ページ読み取りのデフォルトである一般的な「GET」メソッドを使用するため、比較的単純です。 より複雑なメッセージは、別のアプローチを必要とする「POST」メソッドを使用します。 GET 要求では、入力が URL 自体に追加されます。
my key = load text file("meetupkey.txt"); // I stored my key in a text file<BR />event id = "246678392"; // the meetup id at the end of the event's URL<BR /><BR />url = "https://api.meetup.com/2/rsvps?key=" || my key || "&event_id=" || event id;
s = load text file( url ); // s contains the JSON result as a big string<BR /><BR />// We could store that in a file and then open the file, but here's a shortcut.<BR />// The Open() function can read data directly from a blob -- you just have to tell it the file type
b = char to blob(s);
dt = open(b, "JSON");<BR />// JMP interprets the JSON structured tree into a flat data table, with surprisingly good results.
議論
データを読み取った後、クリーンアップを行い、次のような便利な列を作成することがよくあります。
dt << New Column("reply time", formula(:results.mtime/1000 + 01Jan1970), format("ddmonyyyy"));
dt << New Column("count", formula(if(:results.response=="yes", :results.guests + 1, 0)));
これをスクリプトに含めると、必要に応じてデータを簡単に更新できます。 今、私はいくつかの探査を行う準備ができています..
Re: REST API で JSON データを読むこれがチュートリアルビデオに変わる可能性はありますか?
Re: REST API で JSON データを読む素晴らしい。
JMP スクリプト セクションに [具体的な] 例をさらに投稿する予定です。
-ブライアン
Re: REST API で JSON データを読むこんにちはブライアン、
どうもありがとう。フォームを正常に送受信できるので、これをスクリプトに組み込んでみます。
乾杯、
ハワード
Re: REST API で JSON データを読む
ハワードさん、
通常、「POST」HTTP メソッドを使用する場合は、フォーム データを「投稿」します。
「POST」、「PUT」、「GET」などを解釈して特定のことを暗示できるため、正確なメソッドは Web サービスの RestAPI によって定義されます。 (このような: https://www.w3schools.com/tags/ref_httpmethods.asp )
(例のように)HTTPリクエストを使用すると、クエリ文字列がURLの一部になります(次のように:
" http://httpbin.org/post?key1=value1&key2=value2 ")
あなたの例では、データを POST する場合は、次のようにします。
url = "http://httpbin.org/post";
request = New HTTP Request(
URL( url ),
Method( "Post" ),
Form(
Fields([[
"key1" => "value1", "key2" => "value2"
]])
)
);
json = request << Send();
jsl_json = Parse JSON( json );
Write( jsl_json );
クエリ文字列はフォームに置き換えられます。
Form には Fields と Files の 2 つの項目があり、どちらも連想配列です。
または、次のようにコードを構成することもできます。
url = "http://httpbin.org/post";
my_fields = [=>];
for(i = 1, i <= 2, i++,
my_fields["key" || Char(i)] = "value" || Char(i);
);
request = New HTTP Request(
URL( url ),
Method( "Post" ),
Form(
Fields(my_fields)
)
);
json = request << Send();
jsl_json = Parse JSON( json );
Write( jsl_json );
フォームのキーと値のペアをどのように作成するかによって異なります。
-ブライアン
Re: REST API で JSON データを読むJSON 形式の表形式データを使用して POST リクエストを送信しようとしています。次のコードは、GET 要求と同様に、入力を引数として POST 要求をエコーします。
url = "http://httpbin.org/post";
request = New HTTP Request(
URL( url ),
Method( "Post" ),
Query String(
[[
"key1" => "value1", "key2" => "value2"
]]
)
);
json = request << Send();
jsl_json = Parse JSON( json );
Write( jsl_json );
しかし、JSON形式のデータでPOSTしたい。Mac OSX ターミナルから行う方法は次のとおりです。
curl -d '{"table1":[{"id": 1,"value1": 10,"value2": 11},{"id": 2,"value1": 20,"value2": 21}],"table2":[{"id": 3,"value1": 30,"value2": 31},{"id": 4,"value1": 40,"value2": 41}]}' -H "Content-Type: application/json" -X POST http://httpbin.org/post
「クエリ文字列」を置き換える必要があると思われますが、何を置き換えるかについてドキュメントが明確ではありません。任意のガイダンスをいただければ幸いです。
よろしくお願いします!
ハワード
Re: REST API で JSON データを読むいいね!
これは私が使用したコードよりも簡単ですここ. JMP 13では、次のように簡単にすることができます
Open( "http://api.open-notify.org/iss-now.json?r=" || Char( Random Integer( 1, 1e6 ) ), "JSON" );
International Space Station positionInternational Space Station position国際宇宙ステーションの位置
乱数のトリックに注意してください。URL は毎回異なるように見えるため、データの古くて古いキャッシュ コピーを取得することはありません。 最後の ?r= は、r という名前のパラメーターを開始します。 この Web サイトには何も必要ありません。 "?time=3:00&place=space" のような名前付きパラメーターがある場合は、サイトが無視する独自のパラメーター名を追加できます。 "?time=3:00&place=space&r=" (ここに乱数を追加)。
JMP 12 では、JSON 文字列 "{\!"iss_position\!" を取得します。 {\!"緯度\!": \!"-41.6934\!", \!"経度\!": \!"-140.2738\!"}, \!"タイムスタンプ\!": 1518704338, \!"メッセージ\!": \!"成功\!"}"