質問をすることでしか得られない、回答やアドバイスがある。

15分調べてもわからないことは、質問しよう!

新規登録して質問してみよう
ただいま回答率
85.48%
Windows 10

Windows 10は、マイクロソフト社がリリースしたOSです。Modern UIを標準画面にした8.1から、10では再びデスクトップ主体に戻され、UIも変更されています。PCやスマホ、タブレットなど様々なデバイスに幅広く対応していることが特徴です。

terminal

Terminalは、Apple社のmacOSに標準で付属しているUNIX端末エミュレータ。UNIXコマンドによってMacの操作および設定を行うことができます。

MacOS(OSX)

MacOSとは、Appleの開発していたGUI(グラフィカルユーザーインターフェース)を採用したオペレーションシステム(OS)です。Macintoshと共に、市場に出てGUIの普及に大きく貢献しました。

PowerShell

Windows PowerShellはコマンドラインインターフェースであり、システム管理を含むWindowsタスク自動化のためのスクリプト言語です。

Q&A

解決済

2回答

3763閲覧

【PowerShell】curlコマンドのパラメータ指定について

reraNine

総合スコア124

Windows 10

Windows 10は、マイクロソフト社がリリースしたOSです。Modern UIを標準画面にした8.1から、10では再びデスクトップ主体に戻され、UIも変更されています。PCやスマホ、タブレットなど様々なデバイスに幅広く対応していることが特徴です。

terminal

Terminalは、Apple社のmacOSに標準で付属しているUNIX端末エミュレータ。UNIXコマンドによってMacの操作および設定を行うことができます。

MacOS(OSX)

MacOSとは、Appleの開発していたGUI(グラフィカルユーザーインターフェース)を採用したオペレーションシステム(OS)です。Macintoshと共に、市場に出てGUIの普及に大きく貢献しました。

PowerShell

Windows PowerShellはコマンドラインインターフェースであり、システム管理を含むWindowsタスク自動化のためのスクリプト言語です。

0グッド

0クリップ

投稿2019/04/22 03:08

編集2019/04/24 08:11

お世話になっております。

APIチュートリアルに記載されているcurlコマンド(MAC)を
PowerShellにて実施できないか調査中です。
https://api-docs.sprinklr.com/#intro

以下のコマンドは一時拝借させていただいているMACにて実行し、結果が取得出来る事を確認済です。

terminal

1curl --location --request POST "https://api2.sprinklr.com/api/v1/reports/query" \ 2 --header "key: API_KEY" \ 3 --header "Authorization: Bearer API_TOKEN" \ 4 --header "Content-Type: application/json" \ 5 --data "{ 6 \"startTime\":1545000000000, 7 \"endTime\":1555600000000, 8 \"timeZone\":\"UTC\", 9 \"page\":0, 10 \"pageSize\":20, 11 \"reportingEngine\":\"PAID\", 12 \"report\":\"DAILY_AD_STAT\", 13 \"groupBys\":[ 14 { 15 \"heading\":\"adChannel\", 16 \"dimensionName\":\"adChannel\", 17 \"groupType\":\"FIELD\", 18 \"details\":{} 19 }, 20 { 21 \"heading\":\"DAY_OF_WEEK\", 22 \"dimensionName\":\"DAY_OF_WEEK\", 23 \"groupType\":\"FIELD\", 24 \"details\":{} 25 } 26 ], 27 \"projections\":[ 28 { 29 \"heading\":\"impressions\", 30 \"measurementName\":\"impressions\", 31 \"aggregateFunction\":\"SUM\" 32 }, 33 { 34 \"heading\":\"spent\", 35 \"measurementName\":\"spent\", 36 \"aggregateFunction\":\"SUM\" 37 }, 38 { 39 \"heading\":\"Post_Comment\", 40 \"measurementName\":\"actionsReportable.actionTypeValueMap.comment\", 41 \"aggregateFunction\":\"SUM\" 42 }, 43 { 44 \"heading\":\"Post_Like\", 45 \"measurementName\":\"actionsReportable.actionTypeValueMap.post_like\", 46 \"aggregateFunction\":\"SUM\" 47 }, 48 { 49 \"heading\":\"post_engagement\", 50 \"measurementName\":\"post_engagement\", 51 \"aggregateFunction\":\"SUM\" 52 } 53 ] 54} 55"

拝借したPCを返却し、WindowsOSのみでの運用を考えておりますので、以下PowerShellのcurlコマンドを作成しました。

PowerShell

1$l_ADHash = @{'key'='API_KEY'; 'Authorization'='Bearer API_TOKEN'; 'Content-Type'='application/json';} 2$l_ADReportProjections = @( 3 @{ 4 "heading" ="impressions"; 5 "measurementName" ="impressions"; 6 "aggregateFunction" ="SUM"; 7 }, 8 @{ 9 "heading" ="spent"; 10 "measurementName" ="spent"; 11 "aggregateFunction" ="SUM"; 12 }, 13 @{ 14 "heading" ="Post_Comment"; 15 "measurementName" ="actionsReportable.actionTypeValueMap.comment"; 16 "aggregateFunction" ="SUM"; 17 }, 18 @{ 19 "heading" ="Post_Like"; 20 "measurementName" ="actionsReportable.actionTypeValueMap.post_like"; 21 "aggregateFunction" ="SUM"; 22 }, 23 @{ 24 "heading" ="post_engagement"; 25 "measurementName" ="post_engagement"; 26 "aggregateFunction" ="SUM"; 27 } 28) 29$l_ADReportGroupBys = @( 30 @{ 31 'heading' ='adChannel'; 32 'dimensionName' ='adChannel'; 33 'groupType' ='FIELD'; 34 }, 35 @{ 36 'heading' ='DAY_OF_WEEK'; 37 'dimensionName' ='DAY_OF_WEEK'; 38 'groupType' ='FIELD'; 39 } 40) 41$l_ADReportBody = @{ 42 'reportingEngine' = 'PAID'; 43 'report' = 'DAILY_AD_STAT'; 44 'startTime' = 1545000000000; 45 'endTime' = 1555600000000; 46 'page' = 0; 47 'pageSize' = 20; 48 'timeZone' = 'UTC'; 49 'projections' = $l_ADReportProjections; 50 'groupBys' = $l_ADReportGroupBys; 51} 52curl -Method Post "https://api2.sprinklr.com/api/v1/reports/query" -Headers $l_ADHash -Body $l_ADReportBody 53###以下エラー 54curl : Developer Inactive 55発生場所 行:1 文字:1 56+ curl -Method Post "https://api2.sprinklr.com/api/v1/reports/query" -H ... 57+ ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ 58 + CategoryInfo : InvalidOperation: (System.Net.HttpWebRequest:HttpWebRequest) [Invoke-WebRequest]、WebException 59 + FullyQualifiedErrorId : WebCmdletWebResponseException,Microsoft.PowerShell.Commands.InvokeWebRequestCommand 60###

必要なデータは記載しきれたはずなのですが、、

curl : Developer Inactive
こちらはどの様なエラーなのでしょうか、、、
内側に
https://www.weblio.jp/content/Invalid+Operation+Exception
InvalidOperationException クラス
オブジェクトの現在の状態に対して無効なメソッド呼び出しが行われた場合にスローされる例外。
が存在している以上書き方の問題なのかなと考察しております。

1行目、terminal 2行目 powershell

\"projections\":[~~~~~] 'projections' = @(~~~~~)

備考 powershell -Bodyの中身

Name Value ---- ----- projections {System.Collections.Hashtable, System.Collections.Hashtable, System.Collections.Hashtable, System.Collections.Hashtable...} groupBys {System.Collections.Hashtable, System.Collections.Hashtable} timeZone UTC report DAILY_AD_STAT reportingEngine PAID page 0 pageSize 20 startTime 1545000000000 endTime 1555600000000

[]と()又は{}の括りが違うから、、、なのでしょうか。
丸投げな質問となりますが、ご助力お願いできればと思います。
何卒よろしくお願い致します。

追記:try{}catch{}の結果

powershell

1$_.Exception.Message 2リモート サーバーがエラーを返しました: (434) 3$_.Exception.Response.StatusCode.Value__ 4434 5$_.Exception.Response.StatusDescription 6

追記:解決
ご回答いただきました方法から、
bodyオプションの文字列をjson化し、比較しましたが違いは見られず。
curl実施時に
-Body $l_ADReportBody | ConvertTo-json でjson化した文字列を渡す
又は

PowerShell

1#json化 2$l_ADReportBody | ConvertTo-Json | Out-File hoge.json 3#jsonから取得 4$l_BodyJson = Get-Content .\hoge.json -Encoding UTF8

でjson化したファイル文字そのものを変数に詰めてパラメータ指定する事で解決しました。
ご回答ありがとうございました。また機会がありましたら是非よろしくお願い致します。

気になる質問をクリップする

クリップした質問は、後からいつでもMYページで確認できます。

またクリップした質問に回答があった際、通知やメールを受け取ることができます。

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

guest

回答2

0

ベストアンサー

この API は、使ったことがないのですが...

ざっと眺めて比較してみた感じでは、PowerShell の方には、 groupBysdetails キーがありませんね。

APIのドキュメントは、ログインユーザーしか参照できないようなので、必須/省略可能等が不明なのですが、必須キーワードであれば、省略するとエラーになると思います。

まずは、作成したオブジェクトを JSON としてファイルに書き出してみて、APIが要求する正しいフォーマットになっているか確認してみてください。

そして、作成したファイルを使用して、

curl -v -H "Content-type: application/json" -H "key: API_KEY" -H "Authorization: Bearer API_TOKEN" -X POST -d @json-data-file.json https://api2.sprinklr.com/api/v1/reports/query

のように curl コマンドを実行したら どうなるでしょうか?

また、 macOS で実行して値が取得できたコマンドから --data 部分の JSON データを例えば mac-json-data.json の名前でファイルに保存して、 -d @mac-json-data.json と指定して、 同様に上記 curl コマンドで実行するとどうなりますか?

macOSで実行したデータでうまく行った場合は、PowerShell から書き出した JSON ファイルと中身を比較して異なっている部分を特定して修正してください。

投稿2019/04/22 05:50

CHERRY

総合スコア25171

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

reraNine

2019/04/22 08:47

ご回答ありがとうございます。 対応内容はここに記載すると長くなる為、質問文を編集し、追記させていただきます。 jsonファイルの活用法は発想に全くありませんでした。こういった使い道もあるのですね!
guest

0

まずはtry{}catch{}できちんとエラーハンドリングしてみましょう。

Powershell

1try { 2 curl -Method Post "https://api2.sprinklr.com/api/v1/reports/query" -Headers $l_ADHash -Body $l_ADReportBody 3} catch { 4 # HTTPステータスコード 5 $_.Exception.Message 6 $_.Exception.Response.StatusCode.Value__ 7 $_.Exception.Response.StatusDescription 8}

投稿2019/04/22 04:52

Y.H.

総合スコア7914

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

reraNine

2019/04/22 05:14

ご回答ありがとうございます。 catchの結果を質問文に追記させていただきました。434...? https://api-docs.sprinklr.com/#intro 上記リンク最初に記載されているError Code一覧に該当の番号が無い事から、 向こう側の予期せぬこちら側の責任下が原因である、、という事でしょうか。
guest

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

15分調べてもわからないことは
teratailで質問しよう!

ただいまの回答率
85.48%

質問をまとめることで
思考を整理して素早く解決

テンプレート機能で
簡単に質問をまとめる

質問する

関連した質問