hide's memo
13 2月, 2022

ServiceNowのデータをcurlで取得

[English]

ServiceNowのIncidentを curlで取得するサンプル

1. userid, passwordを使うパターン

#!/bin/sh

MY_INSTANCE="**** your instance ****"
CLIENT_ID="**** your instance ****"
CLIENT_SECRET="**** your instance ****"
USER="** your userid **"
PASSWD="*** your password ***" # !!warning. you might need to escape it.

#----------------------------------------------
# Get Access token from Id,Passwd
#----------------------------------------------
RESULT=`curl -X POST https://$MY_INSTANCE.service-now.com/oauth_token.do -H "Content-type: application/x-www-form-urlencoded" -d "grant_type=password" -d "client_id=$CLIENT_ID" -d "client_secret=$CLIENT_SECRET" -d "username=$USER" -d "password=$PASSWD"`

ACCESS=`echo $RESULT | awk 'BEGIN{FS="access_token\":"}{print $2}' | awk 'BEGIN{FS=","}{print $1}'| sed -s 's/\"//g'`


#----------------------------------------------
#Get Incident with using Access token
#----------------------------------------------
curl -s "https://$MY_INSTANCE.service-now.com/api/now/table/incident?sysparam_query=&sysparam_view=&sysparam_fields=sys_id%2Cshort_description" -H "Authorization: Bearer $ACCESS" -H "Content-Type: application/json"

 

 

2. refresh token を使うパターン

#!/bin/sh

MY_INSTANCE="**** your instance ****"
CLIENT_ID="**** your instance ****"
CLIENT_SECRET="***** your instance ****"
REFRESH_TOKEN="****your refresh token ****"

#----------------------------------------------
# Get Access token from Refresh token.
#----------------------------------------------
RESULT=`curl -X POST https://$MY_INSTANCE.service-now.com/oauth_token.do -d "grant_type=refresh_token" -d "scope=useraccount" -d "client_id=$CLIENT_ID" -d "client_secret=$CLIENT_SECRET" -d "refresh_token=$REFRESH_TOKEN"`
ACCESS=`echo $RESULT | awk 'BEGIN{FS="access_token\":"}{print $2}' | awk 'BEGIN{FS=","}{print $1}'| sed -s 's/\"//g'`

#----------------------------------------------
#Get Incident with using Access token.
#----------------------------------------------
curl -s "https://$MY_INSTANCE.service-now.com/api/now/table/incident?sysparam_query=&sysparam_view=&sysparam_fields=sys_id%2Cshort_description" -H "Authorization: Bearer $ACCESS" -H "Content-Type: application/json"

3. リフレッシュトークンを取得する方法

OAuth2.0 Authorization code flow を使って リフレッシュトークンを取得する方法は以下を参照。

Servicenowでリフレッシュトークンを取得する

13 2月, 2022

csvファイルをjson に変換してパイプライン変数に格納 (Azure Data Factory)

[English]

BLOBストレージ上のcsvファイルをパイプライン変数に格納する例。

csvファイルの内容をjsonにしてWeb Accessアクティビティに使用したい場合。

本来は、Copyアクティビティを使って変換するが、Copyアクティビティではできないような細かな処理を行いたい場合に、無理やり文字列操作で実現する。

この処理の場合、改行コードなどJSONでエスケープしなければならない文字列を全て自前でエスケープする必要がある。

1.BLOBストレージ上のCSVファイル


"name01","value01"
"name02","value02"
 

2.変換後のjson

{
     "records" : [
          { "id" : "name01", "info" : "value01"},
          { "id" : "name02", "info" : "value02"}
     ]
}

 

3. パイプライン

3.1. パイプライン変数

BUFFER_V1_1   String
BUFFER_V1_2   String
BUFFER_V1_3   String

3.2. パイプライン構成

3.3. Lookup1 (参照)

  • SRC …. json ファイルを指定

  • 「先頭行のみ」のチェックをはずす

 

3.4. ForEach1 (繰り返し)

  • 順次にチェック

  • 項目:
    @activity('Lookup1').output.value

 

3.5. Set V1 (変数の設定)

  • 変数:BUFFER_V1_1

  • 項目:
    @concat(variable('BUFFER_V1_2'), '{"id":"', ESCAPE(item().Prop_0), '","info":"', ESCAPE(item().Prop_1),'"}')


ここで、上記 ESCAPE()の部分は実際には以下の記述になる。

uriComponentToString(replace(replace(replace(replace(replace(urlComponent(coalesce( *** , ”)),’%5C’,’%5C%5C’), ‘%22′,’%5C%22’), ‘%0D’,’%5Cr’), ‘%0A’, ‘%5Cn’), ‘%09’, ‘%5Ct’))

replace(**, ‘%5C’,’%5C%5C) ….. “\”を”\\”に置換

replace(**, ‘%22’,’%5C%22) ….. “”” を “\””に置換

replace(‘**’, ‘%0D’,’%5Cr’) …. \rを “\r”に置換

replace(‘**’, ‘%0A’,’%5Cn’) …. \nを “\n”に置換

replace(‘**’, ‘%09′,’%5Ct’) ….. \t を “\t”日間

3.6. Set V2 (変数の設定)

  • 変数:BUFFER_V1_2
  • 項目:
    @concat(variable('BUFFER_V1_1'), ',')

 

3.7. Set V3 (変数の設定)

  • 変数:BUFFER_V1_3
  • 項目:
    @concat(variable('BUFFER_V1_3'), '{ "records" [', variable('BUFFER_V1_1'),'}')

 

 

以上で、上記パイプラインが終わったあとに、変数 BUFFER_V1_31には、返還後のjson文字列が入っている。

 

 

■関連記事

csvをjsonにCopy アクティビティを使って変換 (Azure Data Factory)

13 2月, 2022

jsonファイルをパイプライン変数に格納

[English]

BLOBストレージ上のjsonファイルをパイプライン変数に格納する例。

jsonファイルの内容を少し変えて(キー名等を変えて)Web Accessアクティビティに使用したい場合。

本来は、Copyアクティビティを使って変換するが、Copyアクティビティではできないような細かな処理を行いたい場合に、無理やり文字列操作で実現する。

この処理の場合、改行コードなどJSONでエスケープしなければならない文字列を全て自前でエスケープする必要がある。

1.BLOBストレージ上のjsonファイル

{
     "datarecords" : [
          {  "name" : "name01",  "value" : " value01" },
          {  "name" : "name02",  "value" :  "value02" }
    ]
}

2.変換後のjson

{
     "records" : [
          { 
              "attr" : { "rid" : "name01"},
                "id" : "name01",
"info" : "value01"
          }, {
"attr" : { "rid" : "name01"},
               "id" : "name02",
"info" : "value02"
          } ] }

 

3. パイプライン

3.1. パイプライン変数

BUFFER_V1_1   String
BUFFER_V1_2   String
BUFFER_V1_3   String

3.2. パイプライン構成

3.3. Lookup1 (参照)

  • SRC …. json ファイルを指定

  • 「先頭行のみ」のチェックをはずす

 

3.4. ForEach1 (繰り返し)

  • 順次にチェック

  • 項目:
    @activity('Lookup1').output.value[0].datarecords

 

3.5. Set V1 (変数の設定)

  • 変数:BUFFER_V1_1

  • 項目:
    @concat(variable('BUFFER_V1_2'), '{ "attr":{ "rid": "', ESCAPE(item().name), '"}, "id":"', ESCAPE(item().name), '","info":"', ESCAPE(item().value),'"}')

ここで、上記 ESCAPE()の部分は実際には以下の記述になる。

uriComponentToString(replace(replace(replace(replace(replace(urlComponent(coalesce( *** , ”)),’%5C’,’%5C%5C’), ‘%22′,’%5C%22’), ‘%0D’,’%5Cr’), ‘%0A’, ‘%5Cn’), ‘%09’, ‘%5Ct’))

replace(**, ‘%5C’,’%5C%5C) ….. “\”を”\\”に置換

replace(**, ‘%22’,’%5C%22) ….. “”” を “\””に置換

replace(‘**’, ‘%0D’,’%5Cr’) …. \rを “\r”に置換

replace(‘**’, ‘%0A’,’%5Cn’) …. \nを “\n”に置換

replace(‘**’, ‘%09′,’%5Ct’) ….. \t を “\t”日間

 

3.6. Set V2 (変数の設定)

  • 変数:BUFFER_V1_2
  • 項目:
    @concat(variable('BUFFER_V1_1'), ',')

 

3.7. Set V3 (変数の設定)

  • 変数:BUFFER_V1_3
  • 項目:
    @concat(variable('BUFFER_V1_3'), '{ "records" [', variable('BUFFER_V1_1'),'}')

 

 

以上で、上記パイプラインが終わったあとに、変数 BUFFER_V1_31には、返還後のjson文字列が入っている。