LoginSignup
0
1

More than 1 year has passed since last update.

プリザンターAPIを用いてCSVファイルの自動取込をする

Last updated at Posted at 2023-01-16

はじめに

プリザンターAPIを用いて、ローカルに保存しているCSVファイルを全ファイル自動で取り込みます。万が一のためエラーが起きたら、レコードとしてログを表示させます。

ソースコード


#関数mainの呼び出し
main

#メイン処理
function main () {

#実行時点の年月日
$ToDay = Get-Date -UFormat "%Y%m%d"
    
    #SCVファイルの格納場所
    $fromPath = 'C:\OutputData\' + $ToDay

    #SCVファイルの取込場所
    $toPath = 'http://{サーバー名}/api/items/{サイトID}/upsert'

    #APIキー
    $apiKey = 'a0415…'

    #フォルダ内のCSVファイルを絞り込み
    $csvFiles = Get-ChildItem $fromPath -Filter *.Csv

    #行番号の初期値設定
    $number = 1

    #それぞれのCSVファイルごとの処理
    foreach ($csvFile in $csvFiles) {

        #ファイルが変わるごとに行番号を初期化
        $number = 1

        #1つのCSVファイルを読み込む
        $products = Import-Csv ($fromPath + '\' + $csvFile)

        #CSVファイルの中身を処理
        foreach ($product in $products) {

            #行をカウント
            $number = $number + 1

            #自動取込する情報を取得
            $serialnumber = $product.serialnumber
            $date = $product.'Config取得日付(最新)'
            $imagePath = $product.Configイメージパス

            #JSONの中身
            $jsonData = @{
                "ApiVersion"      = 1.1
                "ApiKey"          = $apiKey
                "Keys"            = @("ClassB", "DateA", "DescriptionA")
                "ClassHash"       = @{
                    "ClassB" = $serialnumber
                }
                "DateHash"        = @{
                    "DateA" = $date
                }
                "DescriptionHash" = @{
                    "DescriptionA" = $imagePath
                }
            }

            #テキスト形式に変換
            $json = $jsonData | ConvertTo-Json

            try {

                #WEBページにリクエストを送る処理
                $responseData = Invoke-WebRequest -Uri $toPath -ContentType "application/json" -Method 'Post' -Body $json
        
            }
            catch {

                #CSVを取り込む際のエラー通知処理
                Write-Output 'CSV取り込み処理でエラーが発生しました'
        
                #エラー情報を取得
                $errorInfo = $csvFile.Name + ', ' + $number + ', ' + $serialnumber
        
                #関数errorの呼び出し
                error $apiKey $errorInfo
        
            }

        }
    }
}

#エラー発生時に呼び出される関数
function error ($apiKey, $errorInfo) {

    #エラーログの取込場所
    $toPath1 = 'http://{サーバー名}/api/items/{サイトID}/upsert'

    #JSONの中身
    $jsonData1 = @{
        "ApiVersion"      = 1.1
        "ApiKey"          = $apiKey
        "Keys"            = @("DescriptionA")
        "DescriptionHash" = @{
            "DescriptionA" = $errorInfo
        }
    }

    #テキスト形式に変換
    $json1 = $jsonData1 | ConvertTo-Json

    #プリザンターで表示時に文字化けしないようにUTF-8にエンコーディング
    $convertBody = [System.Text.Encoding]::UTF8.GetBytes($json1)

    #WEBページにアクセスし応答を代入
    $responseData = Invoke-RestMethod -Uri $toPath1 -ContentType "application/json" -Method POST -Body $convertBody

}

工夫

プリザンターでは、リクエストを送る際文字列が文字化けしてしまうようでした。そのため、文字化けを防ぐため下記のソースでUTF-8にエンコーディングしました。ここはサンプルもなかったため、少々苦労しました。参考になれば幸いです。


    #プリザンターで表示時に文字化けしないようにUTF-8にエンコーディング
    $convertBody = [System.Text.Encoding]::UTF8.GetBytes($json1)
    #WEBページにアクセスし応答を代入
    $responseData = Invoke-RestMethod -Uri $toPath1 -ContentType "application/json" -Method POST -Body $convertBody

0
1
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
0
1