Web サービス データのインポート: JMP ® 14 の新しい HTTP リクエスト (US 2018 231)
レベル: 中級
ブライアン・ブーン氏、SAS、JMP 主任ソフトウェア開発者
政府および民間団体は、RESTful サービスを介してインターネット経由でデータを利用できるようにすることが増えています。 JMP 14 には、と呼ばれる新機能があります。 HTTPリクエスト、JSL を通じて利用可能であり、これらの RESTful サービスにアクセスできるようになります。 このペーパーでは、RESTful サービスとは何かについて説明し、その使用方法に関するいくつかの例を示しますHTTPリクエスト新しいデータを JMP に取り込みます。
レストとは何ですか
REST (Representational state transfer) は、インターネット上のコンピュータ システム間の相互運用性を提供する方法です。 RESTful サービスは、このパラダイムを利用する Web ベースのサービスです。 RESTful API は、HTTP リクエストを使用して得る、役職、置くと消去RESTful サービスと対話するためのデータ。
HTTP プロトコルは、クライアントがサーバーにリソースに対して実行してほしいアクションを示す一連の要求 HTTP メソッドを定義します。 彼らです:
得る
|
リソースをリクエストする
|
頭
|
リソースメタデータのみを要求する
|
役職
|
リソースの受け入れリクエスト
|
置く
|
リソースの保存または作成のリクエスト
|
消去
|
リソースの削除リクエスト
|
パッチ
|
リソースの状態変更のリクエスト
|
新しい用語、おなじみのアクティビティ
これはまったく新しい概念のように思えるかもしれませんが、最も一般的な 2 つのリクエスト メソッドについてはすでによく知っています。得ると役職。
得る
得る二つの人格を持っています。
最初の個性はただ得る-リソースを指定します。 つまり、目的は単に Web リソースにアクセスすることです。 これは図 1 で確認できます。 ここでは、ブラウザが Web ページにアクセスしています。
図1。 「得るWeb リソースの場合」
2つ目は得る-クエリ文字列と呼ばれるものとともに、リソースにアクセスします。 クエリ文字列は、Web リソースによって定義されたキーと値のペアのセットであり、サーバーにフィルタリングまたは変更を要求するためにクライアントによって使用されます。得るこれらのパラメータを使用してリクエストを実行します。 これは図 2 で確認できます。 ここではブラウザがサーバーに変更を要求しています。得る以下を使用してリクエストします:
役職
役職一方、 はより複雑です。 あ役職サーバーにリソースの変更または作成を要求します。 あ役職通常、HTML フォームが含まれており、このフォームには、文字データのキー/値ペアやファイルのキー/値ペアのコレクションが含まれています。 図 3 は、ユーザーを Amazon にサインインする例です。 ここでのキーと値のペアは次のとおりです。
Eメール
|
あなたのメールアドレスでサインインしてください
|
パスワード
|
あなたのパスワード
|

図3. 「役職フォームデータをWebリソースに変換」
使用する理由
HTTP プロトコルを使用すると、情報スーパーハイウェイを次のように考えることができます。道路標識も設置され、橋も架けられました。」この標準により、新しいデータ管理会社の設立が可能になりました。 さらに、HTTP 標準の採用により、既存の企業によく見られる情報のサイロ化が解消されました。 これらの企業には次のようなものがあります。
Text-Processing.com (感情データ)
|
ジェンキンス
|
ジラ
|
ハブ
|
オフィス365
|
グーグル
|
ドロップボックス
|
ワンドライブ
|
AWS (アマゾン ウェブ サービス)
|
米国国勢調査局
|
NASA
|
パブケム
|
ニューヨーク・タイムズ
|
フィットビット
|
ヤフー
|
ビットコイン
|
マーベルコミックス
|
SAS
|
オープンAQ
|
JMP
|
それの使い方
JSON
JSON (JavaScript Object Notation) は軽量のデータ交換形式です。 これは、JavaScript プログラミング言語のサブセットに基づいています。 JSON は言語に依存しないテキスト形式ですが、ほとんどのプログラマーにとってすでに馴染みのある概念が使用されています。
JSON は 2 つの構造に基づいて構築されています。
- 名前と値のペアのコレクション。 (辞書、ハッシュテーブル、連想配列など)
- 順序付けられた値のリスト。 (配列、ベクトル、リストなど)
新しい用語、おなじみのアクティビティ (再び)
JSL
JSL は、JMP が関与する場合に選択されるスクリプト言語です。 JSON は新しい用語かもしれませんが、JSL は JSON に必要な 2 つのデータ構造をサポートします。
リスト
リストは、次のようなアイテムを保管するコンテナです。
- 数字
- 変数
- 文字列
- 式 (代入や関数呼び出しなど)
- 行列
- 入れ子になったリスト
連想配列
- アン連想配列一意のキーを一意でなくてもよい値にマップします。 連想配列は、ディクショナリ、マップ、ハッシュ マップ、またはハッシュ テーブルとも呼ばれます。
JSL には、JSON 処理に固有の 2 つの関数も含まれています。
JSONを解析する
- JSON データの構造に基づいて、JSON テキストを連想配列またはリストに変換します。
JSON 式として
これらの関数を使用すると、スクリプト作成者は JSL コンテナと JSON の間でシームレスに変換できます。
HTTPリクエスト
HTTPリクエストJMP 14 の新機能です。 もともと、このテクノロジーは、JMP と JMP Public の間の対話を処理するために作成されました。 JMP Public にデータを公開する以外にも応用できることがすぐにわかり、このテクノロジーは次のように JSL で表面化しました。 HTTPリクエスト。
HTTP リクエストの入門書
HTTPリクエストhttp と https の両方のプロトコルをシームレスにサポートし、cURL に期待される動作の多くをカプセル化します。
「cURL は、データを転送するためにコマンド ラインまたはスクリプトで使用されます。 また、自動車、テレビ、ルーター、プリンター、オーディオ機器、携帯電話、タブレット、セットトップ ボックス、メディア プレーヤーでも使用されており、毎日何十億もの人間に影響を与える何千ものソフトウェア アプリケーションのインターネット転送バックボーンとなっています。」
さらに重要なことは、次のように考えることができます。 HTTPリクエストWeb リソースを JSL にバインドする接着剤として。 あれは、 HTTPリクエストWeb リソースと通信し、スクリプト作成者が JSL で応答を処理できるようにします。 JSL の複雑さは作成者によって制御されます。
Web リソースとの対話中に使用する最も一般的な HTTP メソッドは次のとおりです。
GET アクションでの HTTP リクエストの使用
あ得るおそらくアクションが最も一般的ですHTTPリクエストアクション。 このアクションは、データを JMP に取り込むことができる読み取り専用アクションです。
よくあるメッセージHTTPリクエスト:

図4. 「 HTTPリクエスト得る」
HTTPリクエスト得るアクションには多くの場合、 "クエリ文字列"パラメータを Web リソースに送信します。 図 5 では、 HTTPリクエストとともに"クエリ文字列" 。 JSL では、 "クエリ文字列"です連想配列キーを文字値またはリスト文字値の。 図 5 のスクリプトを実行すると、URL は次のように自動的に展開されます。
http://quotes.rest/qod.json?category=inspire
図5. 「 HTTPリクエスト得るを使って 'クエリ文字列' 」
POST アクションでの HTTP リクエストの使用
HTTPリクエスト役職多くの場合、アクションはより複雑になります。
よくあるメッセージHTTPリクエスト:
- "方法"
- 「URL」
- "形状"
- 「JSON」
- "ファイル"
- 「ブロブ」
- "送信"
図 6 は、 HTTPリクエスト「形状"データ。 JSLでは、 "形状"データには 2 つの属性を含めることができます。 "田畑"および/または「ファイル」 。 二人ともJSLです連想配列キーを文字値またはリスト文字値の。 の場合、 「ファイル」 、文字値、またはリストの文字値は、「」に追加するファイル名です。形状"。

図6. 「 HTTPリクエスト役職を使って形状」
図 7 は、 HTTPリクエスト「 JSON」データ。 JSLでは、 「JSON」どちらかになります連想配列またはJSON形式の文字データ。 JSON 式としてで使用する明確に定義された JSON オブジェクトを作成しますHTTPリクエスト。 JSON データがリクエストの本文として送信されます。
図7。 「 HTTPリクエスト役職'を使用してJSON」 」
図 8 は、 HTTPリクエスト「ファイル"データ。 JSLでは、 "ファイル"リクエストの本文として送信するファイル名です。
図8。 「 HTTPリクエスト役職'を使用してファイル' 」
最後のアクションHTTPリクエスト「ブロブ」データ。 JSLでは、 「ブロブ」リクエストの本文として送信するバイナリ BLOB データです。 これは、リクエストの一部としてファイルを送信する前に、ファイルをディスクに書き込む必要がないことを意味します。
の得るaction は最も簡単なリクエストですが、役職が最も複雑です。 間の相互作用HTTPリクエストWeb リソースは常にサーバーによって定義されます。 HTTP プロトコルは明確に定義された標準ですが、データ (およびデータ構造) は Web リソースごとに定義されます。 つまり、One Drive への API は、同様の機能を実行しますが、Dropbox とは異なります。
差出人に戻る
からのデータHTTPリクエスト「送信" message は、Web リソースに応じて、文字データ、バイナリ BLOB データ、または空のいずれかになります。 チェック中 "空いています」返されたデータに関するデータ調査は、最も粗いレベルのデータ調査です (なしを除く)。 ただし、きめ細かいレベルの調査が必要な場合は、「」を使用できます。文字列です」文字データを確認します。
さらに細かいレベルの調査を行うには、次を使用できます。 「MIMEタイプを取得」 。 一般的な MIME タイプは次の場所にあります。 MIME タイプの不完全なリストこの論文の参考セクションの記事を参照してください。
最後に、必要に応じて、次のメッセージを使用して Web リソースから低レベルの HTTP ステータス コードを調査できます。
「情報がある」
|
100-199
|
「成功しました」
|
200-299
|
「リダイレクトあり」
|
300-399
|
「クライアントエラーがあります」
|
400-499
|
「サーバーエラーが発生しました」
|
500-599
|
「エラーがあります」
|
クライアントエラーまたはサーバーエラーがある
|
「ステータスを取得」
|
HTTPステータスコード
|
HTTP ステータス コードの説明は、ステータスコードの定義この論文の参考セクションの記事を参照してください。
どこで使用するか
それでもHTTPリクエストは、任意の Web リソースからの文字データまたはバイナリ BLOB データを使用できます。ここでは、RESTful サービスからの文字データ、つまり JSON データに焦点を当てます。
ディス・イズ・スウィート
REST を使用する HTTP プロトコル標準に基づいて設立された新しいデータ管理会社の 1 つが PubChem です。 PubChem は、国立衛生研究所 (NIH) のオープン化学データ ソースとして 2004 年に設立されました。 大学、製薬会社、政府機関、化学ベンダーなどの機関からの何百ものデータ ソースを使用して、PubChem レコードが毎月更新されます。 これは、公的に入手可能な化学情報源の最大のコレクションです。
PubChem は、データ クエリを物質、化合物、アッセイなどに分類します。そこから、膨大な数の特性、説明、用量、その他の関心のある特性を取得できます。
私はそれをM&M成分と読みました。
図9。 「プレーンM&Mの材料」
私は、Plain M&M's の成分の JMP データ テーブルを作成して、そこに何が含まれているかを確認する JSL スクリプトを作成しました。 成分に合成着色料が多く含まれているのは当然のことでした。
JMP の部分データ テーブル表現は次のようになります。
図10。 「パーシャルプレーンM&M成分データ表」
JSL スクリプトを実行すると、 HTTPリクエスト物質または化合物のイメージ、および PubChem の RESTful サービスによって提供されるその他のプロパティを取得するために使用されます。
図11。 「PubChem データを使用した部分プレーン M&M 成分データ テーブル」
対象となる RESTful サービス URL は次のとおりです。
( [名前]は図 9 および 10 にある物質または化合物の名前です。)
乳糖のような化合物の画像データを取得するには、 HTTPリクエスト次のようになります:
図12。 「得る- PubChem からのラクトースの画像を作成します」

図13。 「
得る-PubChem からラクトースの画像を作成して表示します」
Lactose リクエストは、化合物に PubChem のエンドポイントを使用します。 ここではさらに 2 つの概念が使用されています。 1つ目はURIをエンコードする。 URI エンコーディング (パーセント エンコーディングとも呼ばれる) は、RESTful URL に ASCII 文字のみが含まれることを保証します (幸いにも Lactose には含まれています)。 二つ目のコンセプトは、 「MIMEタイプを取得」 。 この PubChem エンドポイントからの戻り値は、バイナリ BLOB データ (PNG 画像) です。 の「MIMEタイプを取得」 PNG が見つからない場合、このエンドポイントは文字データを返すため、新しいイメージで使用する前に、BLOB が実際に PNG であることを確認します。
JSON データ内の乳糖の完全なレコードを取得するには、 HTTPリクエスト次のようになります:

図14。 「得る- PubChem から乳糖の完全な記録を作成します」
PubChem によって定義されたエンドポイントは、 /JSON接尾辞は、RESTful サービスが JSON データを返す必要があることを示しているため、MIME タイプを確認します。 "データ"必要ありません。 ただし、JSON を処理する必要があります。 返された「」を処理するには、[少なくとも] 2 つの方法があります。データ" 。 1つ目は、使用することです「JSONからデータテーブルへ」 。 これは、JMP データテーブルを"データ" 。 長方形または表形式のデータの場合、これはうまく (そして速く) 機能します。 ただし、すべての RESTful サービスが表形式のデータを返すわけではありません (PubChem は表形式のデータを返しません)。 返されたデータを処理する 2 番目の方法は、 「JSONを解析」 。 これにより JSL が作成されます連想配列。 これは、JSON を解析する必要がないことを意味します。 ただし、返されたデータがどのように構成されているかを知っておく必要があります。 つまり、それがキーと値のペアなのか、それともキーと値のペアなのかを知る必要があります。 JMP ログ内の生の JSON をキャプチャし、任意の JSON エディターを使用してその構造を調べることができるため、これは思っているほど難しくありません。
Lactose の JSON データの部分表示は次のようになります。
図15。 「PubChem からの部分的な乳糖 JSON データ」
このエディターは、生の JSON と対応する JSON オブジェクトを並べて表示します。 データを調べるときは、JSON の {..} を JSL と考えてください。連想配列。 同様に、[..] に遭遇した場合は JSL を考えてください。リスト。
この手法を使用すると、図 14 に示す完全なレコード スクリプトを変更し、それを使用して乳糖の特性に関する JMP データ テーブルを作成できます。
図16。 「得る- PubChem から乳糖の完全な記録を取得し、「小道具」データテーブル」
この例では、 JSONを解析する生の JSON を PubChem から JSL に変換するには連想配列。 JSON データ構造を調査した結果、Lactose JSON 内の「props」データのみが対象であることがわかりました。 これで、使い慣れた JSL を使用できるようになります。連想配列JSL を取得するためのナビゲーションリスト「PC_Compounds」にあります。 リストの最初の項目だけが必要です (ほとんどの「小道具」繰り返されます)
「小道具」データはJSLです連想配列だから私たちは使うことができますJSON 式として翻訳すること「小道具」 JSON に戻して使用しますJSON からデータテーブルへ。 結果を図 17 に示します。
図17。 「部分乳糖物性データテーブル」
覚えて、 HTTPリクエストは、Web リソースを JSL にバインドする単なる接着剤です。 データを JSL に取り込んだら、ニーズに応じて単純または複雑に使用できます。
驚くべきこと
2014 年、マーベル コミックスは、ユーザーが 70 年分のコミック情報にアクセスできる RESTful サービスを作成しました。 Marvel Comic API はスクリプターの想像力によってのみ制限されるため、当然のことながら、キーを登録して、それをタップして、何が見つかるかを確認する必要がありました。 私は、マーベル:APIマーベル ユニバースを駆け巡るさまざまな列を使用する JSL 関数。
私はデッドプールのファンなので、このデータ テーブルを作成する最初のクエリを思いつきました。
図18。 「デッドプールのデータテーブルの一部。」
これにより、マーベル・コミック・ユニバースにおける 4 つの異なるデッドプール・キャラクターの仮面が明らかになりました。 最初のキャラクターの正体に興味があり、シリーズ作成したクリックイベントハンドラ。 クリックの起点を考えると、マーベル:APIこの関数は、戻り値がデッドプールが MCU のどこと交差するかを示す、Marvel への新しいクエリを生成できます。 結果を 50 行に制限しました。しかし、いくつかの興味深い結果を発見することができました。 「」について簡単な分布分析を行ってみました。タイトル"と「開始年」デッドプールの人気がいつ上がって下がったのか(そして再び上がったとき)を確認するためだけに。

図19。 「部分的なデッドプール配布」。
図 19 は、2007 年にデッドプールが次のようなさまざまなマーベル コミック タイトルにクロスオーバーしたことを示しています。
- アベンジャーズ: ザ・イニシアチブ (2007-2010)
- ケーブル&デッドプール
- シビル・ウォー:X-MENユニバース。
デッドプールへの関心は2007年以降再び低下したが、ライアン・レイノルズが『X-MEN オリジンズ:ウルヴァリン』(2009年)で初めてデッドプールのキャラクターを演じた後は再び盛り上がり、2011年にピークに達した。
2012 年から 2015 年にかけて、マーベル・コミック・ユニバースはマーベル・リブート版『デッドプール・キルズ・ザ・マーベル・ユニバース』で爆発します。
最後に、2016 年から 2018 年に関しては驚くことではありません。 映画が世に出たのはそのときだった。
『デッドプール 2』のピーターは、マーベル コミック API について「広告を見て面白そうだと思った」と最高に要約しています。
使用される表記規則
RESTful サービスという用語は、Web リソースが REST ベースである場合に使用されます。
Web リソースという用語は、一般的な Web アクセスを意味する場合に使用される一般的な用語です。
HTTPアクションは、太字の
ボタン/ダイアログ コントロールは「引用して太字」
ハイパーリンクは、下線付き
JSL オブジェクトと関数は次のとおりです。斜体
JSL変数/列/メッセージ名は「引用符と斜体」
参考文献
ホーク、サンドロ (2011、12 月 16 日)休みから取得したhttps://www.w3.org/2001/sw/wiki/REST
W3.orgメソッドの定義から取得したhttps://www.w3.org/プロトコル/rfc2616/rfc2616-sec9.html
W3.orgステータスコードの定義取得したhttps://www.w3.org/プロトコル/rfc2616/rfc2616-sec10.html
Mozilla.org (2018 年 5 月 13 日) HTTPリクエストメソッドから取得したhttps://developer.mozilla.org/en-US/docs/Web/HTTP/Methods
JSON.org (2017、12 月) JSON の紹介から取得したhttps://www.json.org
JMP.com (2018年7月12日)リストから取得したhttps://www.jmp.com/support/help/14/lists.shtml
JMP.com (2018年7月12日)連想配列の操作から取得したhttps://www.jmp.com/support/help/14/work-with-associative-arrays.shtml
URL を使用してデータを転送するための CURL コマンド ライン ツールおよびライブラリから取得したhttps://curl.haxx.se/
W3.org (2015 年 1 月 22 日)ウェブのセキュリティを確保するから取得したhttps://www.w3.org/2001/tag/doc/web-https
W3.org (2014 年 6 月 11 日) HTTP - ハイパーテキスト転送プロトコルから取得したhttps://www.w3.org/プロトコル/
Mozilla.org (2018 年 7 月 3 日) MIME タイプの不完全なリストから取得したhttps://developer.mozilla.org/en-US/docs/Web/HTTP/Basics_of_HTTP/MIME_types/Complete_list_of_MIME_types
PubChem.ncbi.nlm.nih.govパブケムについてから取得したhttps://pubchemdocs.ncbi.nlm.nih.gov/
MMs.com材料から取得したhttp://www.mms.com/us/nutrition
W3Schools.com HTML URL エンコーディングのリファレンスから取得したhttps://www.w3schools.com/tags/ref_urlencode.asp
開発者.marvel.com開発者ポータルから取得したhttps://developer.marvel.com/