回は果てしない長旅

はい、そういうわけでございまして。
性格分析ワトソン君イジり、今回で3回目になります。

「さるでき.com」に「Personality Insights」の結果を貼り付けるシステム
まずは、仕組み全体の手順のおさらいから行きましょう。

STEP1 さるでき.comで記事を公開する
STEP2 その記事を、IBM Cloud内のPersonality Insightsに投げる
STEP3 Personality Insightsで分析、その結果をさるでき.comで受け取る
STEP4 さるでき.comで結果を表示

ふむふむ、こんな感じでしたね。

前回は、このSTEP2とSTEP3をやるために必要となる、
IBM Cloudの「サービス資格情報」を作成したのでした。

「API KEY」なる秘密の鍵が手に入りましたので、今回はコレを使ってシステムに侵入を試みます。
……ふふーん。なんだかスゴく悪いことをしているような気がしてきましたぜ。クックック。

最初は、概要チュートリアルから

……と、現実逃避も終わったところで、過酷な現実と向かい合いましょう。

ダッシュボードから「Personality Insights 01」をクリックして詳細ページに進み、
サイドバーの「開始」なるリンクを叩くと、『概要チュートリアル』なる読み物が出てきます。

ここがスタートラインかー、ふー。
Webアプリとか全然やってこなかったからなー、サッパリやわー。

でもまあ、そんなことはいつものこと。

当たりそうなところにビシバシ石を投げて、
当たったらそこからアメーバのように侵食していけばいいのです。

よーし。
ではまず、「始める前に」をチェックしましょうか。


サービス・インスタンスに認証するための資格情報をコピーします。
Developer Consoleのpersonality-tutorialプロジェクトで、「資格情報」セクションから「personality_insights」のusername、password、urlの値をコピーします。


「personality-tutorial」と書いてありますが、ワタシの場合「Personality Insights 01」になります。
既に「資格情報」は作っていますので、そこから「username」「password」「url」の値をコピー……

そんな値、ナッシン。
あ、あれ?資格情報の詳細欄には、そんな値はひとつも無いですぜ?

一歩目から真っ逆さまに奈落の底へ。
とりあえず、右往左往とインターネットの世界を調べて回ってみたところ。

『IBM Cloudは、トークンベースのIAM(Identity and Access Management)認証に移行しています。』
https://cloud.ibm.com/apidocs/discovery

という謎のヒントをいただきました。
ヒント自体が既に暗号文なのですが、「サービス資格情報」の『大事な情報』をよーく見てみると……

確かに、「IAM(アイアム)」って書いてありますね。

IAM(アイアム)って、なんだろう?

IBM Cloud内の資料を読んでみると、


Cloud IAMとは?
IBM Cloud Identity and Access Management(IAM) を使用すると、プラットフォーム・サービスに関してユーザーをセキュアに認証でき、また IBM Cloud プラットフォーム全体で一貫してリソースへのアクセスを制御できます。一連の IBM Cloud サービスでは、アクセス制御に Cloud IAM の使用が有効になっています。(資料より)


とのこと。要するに、「非常に便利なセキュリティシステム」という感じらしいです。
なるほど、こちらの方式に現在移行中、ということなのですね。まあ、良いこと……ですな。

ただ問題は、「旧来のアクセス方式」と、この「新しいIAM方式」が混在しているために、どうやら情報が錯綜しているらしい、ということ。
「IAM方式」でアクセスをしたいのですが、この後に出てくる各ステップの「サンプルコード」が、どうやら「旧来方式」なのですね。

先行きがとっても不安DEATH。

JSON(ジェイソン)現る

では、サンプルコードに含まれる認証問題はとりあえず後回しにして、
とりあえずサンプルコード本体を眺めてみましょう。

ふむふむ、コード自体は数行程度の短いもののようですね。少しだけホッとしました。

ステップ1 : プレーン・テキスト入力を送信して、基本JSON出力を受信する
ステップ2 : JSON入力を送信して、詳細なJSON出力を受信する
ステップ3 : JSON入力を送信して、詳細なCSV出力を受信する

各ステップ毎にサンプルコードがあるのですが、厄介そうなのが「JSON(ジェイソン)」というキーワード。


JSONの紹介
JSON(JavaScript Object Notation)は、軽量のデータ交換フォーマットです。人間にとって読み書きが容易で、マシンにとっても簡単にパースや生成を行なえる形式です。JavaScriptプログラミング言語(ECMA-262標準第3版 1999年12月)の一部をベースに作られています。(JSONの紹介より)


「データを受け渡すときのフォーマット」のことだそうです。
かなり複雑な形式のデータもこのJSONフォーマットで記載することができるらしく、データが軽いことも相まってシステム間連携によく使われている模様です。

ふむふむなるほど……でも、ちょっと今回はスルーさせてもらいましょうか。
新情報が多すぎて、既に若干溺れかけていますので……。

ということで、「JSON抜き」のこんな感じでコードを組み立ててみましょう。

ステップX : プレーン・テキスト入力を送信して、詳細なCSV出力を受信する

JSONを避ける形で、STEP1とSTEP3のコードを組み合わせますよ。

旧来方式のサンプルコード(cURL)を読んでみよう

では、まずは「STEP1」のコードから。

ぐえー。もう……今回終わらないんじゃないかしら。

「IAM」「JSON」と来て、次は「cURL(カール)」です。
え?どうしてこれが「cURL」ですって?ほら、一番最初に「curl」って書いてあるでしょう?


cURL
cURL(カール)は、さまざまなプロトコルを用いてデータを転送するライブラリとコマンドラインツールを提供するプロジェクトである。(ウィキペディアより)


サンプルコードは、いずれもこの「cURL」を使って書かれています。
実はこの段階で一度バッキリワタシのココロは折れたのですが、「Macでは標準機能として使えます」という言葉を見つけて、からくも生還しました。

うーん、なんと言えば良いのですかね。
データ転送のためのコマンドツール……と言っても、ちょっとピンと来ませんね。
プログラミング言語、というより、「命令文集」のようなイメージ。

パソコンって、一見すると「ボタン」とか「アイコン」とかをクリックして動かしている雰囲気がありますが、
アレ、ボタンの裏側には「コマンド」と呼ばれる「命令文」がくっついていて、それを呼び出して動いています。

cURLは、その命令文がぎっしり詰まった便利機能ということ……なのでしょう。きっとね。きっとそう。

……そうだと言って。

その観点で、先ほどのサンプルコードを読んでみましょうか。

curl -X POST –user {username}:{password} \
カールでっせ・POSTメソッドを使いまっせ・ユーザー認証しまっせ
–header “Content-Type: text/plain;charset=utf-8” \
ヘッダー情報を追加しまっせ・送るデータはUTF-8のテキストデータでっせ
–data-binary “@{path_to_file}profile.txt” \
ファイルを送りまっせ・「profile.txt」という名前のファイルでっせ
“https://gateway.watsonplatform.net/personality-insights/api/v3/profile?version=2017-10-13”
こちらのURLに向かってデータを送信しまっせ!

……ぜえぜえ……。
こんな感じでしょうかね。

最後の「\(バックスラッシュ)」は、コマンドの「改行」を表していると思われます。

では、次に「STEP3」のコードを。

curl -X POST –user {username}:{password} \
カールでっせ・POSTメソッドを使いまっせ・ユーザー認証しまっせ
–header “Content-Type: application/json” \
ヘッダー情報を追加しまっせ・送るデータはJSON型のデータでっせ
–header “Accept: text/csv” \
ヘッダー情報を追加しまっせ・送り返してもらうデータはCSV型のテキストデータでっせ
–data-binary “@{path_to_file}profile.json” \
ファイルを送りまっせ・「profile.json」という名前のファイルでっせ
–output profile.csv \
受け取るファイルは「profile.csv」という名前のファイルでっせ
“https://gateway.watsonplatform.net/personality-insights/api/v3/profile?version=2017-10-13&consumption_preferences=true&raw_scores=true&csv_headers=true”
こちらのURLに向かってデータを送信しまっせ!

……ぜえぜえ……。
もう何が何やら。

IAM方式のコード(cURL)を作ってみよう

さて、今回はその間を取ったようなことを行いたいので、2つのサンプルコードを組み合わせてみます。

curl -X POST -u “apikey:【ここにAPI KEYを!】” \ (←今回のポイント①!)
–header “Content-Type: text/plain;charset=utf-8” \ (←STEP1から)
–header “Content-Language: ja” \ (←日本語の文章を送るので付けてみました、日本語情報)
–header “Accept: text/csv” \ (←STEP3から)
–data-binary “@/Users/maiway/Desktop/profile.txt” \ (←STEP1から)
–output pi_result.csv \ (←STEP3から)
“https://gateway-tok.watsonplatform.net/personality-insights/api/v3/profile?version=2017-10-13&csv_headers=true” (←今回のポイント②!)

はい!こんな感じ!

ひょー、さすがに頭からモクモクと煙が出てきておりますので、
今回はとりあえずコイツを動かした結果画面をご覧いただきながら終わりましょう。

ちゃんと動きましたよー!

各種ポイントの説明とか、作られたCSVファイルの中身とか、そもそもこの画面何!?とか。

その辺りのについては、次回じっくりとお話ししますね。
ではでは、今回はここまで!おつかれさまでした〜!

0