接続の確立
CData Cmdlets ユーザーは、データモジュールをインストールし、接続プロパティを設定してスクリプトを開始できます。このセクションでは、CSV インポートおよびエクスポートcmdlet などのネイティブPowerShell cmdlet でMarketo Cmdlets を使用する例を示します。
インストールおよび接続
PSGet がある場合は、PowerShell Gallery から次のコマンドを使ってcmdlet をインストールできます。CData サイトからセットアップを取得することもできます。
Install-Module MarketoCmdlets
プロファイルに以下を追加すると、次のセッションでcmdlet がロードされます。
Import-Module MarketoCmdlets;
Connect-Marketo cmdlet を使って、別のcmdlet に渡すことができる接続オブジェクトを作成します。
$conn = -Connect-Marketo -Schema 'REST' -RESTEndpoint 'https://MyMarketoUrl/rest' -OAuthClientId 'MyOAuthClientId' -OAuthClientSecret 'MyOAuthClientSecret'
Marketo への接続
Marketo は2つのAPI を提供しています。REST およびSOAP です。使用するAPI を指定するには、 Schema プロパティをREST またはSOAP のいずれかに設定します。
REST API
REST API は、OAuth 認証を使用してユーザーのアクセスを検証します。REST API 経由の Marketo へのアクセスを設定するには:- カスタムサービスを作成します。
- 適切なOAuth 認証情報を取得します。
- 接続変数を設定します。
カスタムサービスの作成
この手順では、REST API 権限を持つ新しいロールを作成し、そのロールを既存または新規のユーザーに割り当て、新しいサービスを作成します。これは管理者権限を持つユーザーによって実行される必要があります。- Marketo アプリケーションの[管理]エリアに移動します。
- [セキュリティ]セクションに移動します。
- ユーザ& ロールをクリックします。
- API アクセス用の新しいロールを作成します。
- ロールタブを選択します。
- 新規ロールをクリックします。
- [ロール名]を指定し、ロールの権限を選択します。REST API に固有の[API へのアクセス]権限を指定します。
- API アクセスを実行するユーザーを割り当てるか、新規作成します。
- ユーザタブを選択します。
- 作成したロールを新規ユーザーに割り当てるには、新規ユーザの招待をクリックします。
- 新しいユーザーの情報を入力し、先ほど作成した、REST API に接続可能なロールを割り当てます。API 専用ユーザーとして指定するには、API のみオプションを選択します。
- 新しいサービスを作成します。
- 管理 -> 統合に移動して、LaunchPoint オプションをクリックします。
- 新規サービスをクリックします。
- サービスタイプをカスタムに指定します。
- サービスの[表示名]および[詳細]を入力します。
- 作成したユーザーをサービスに割り当てます。
Marketo は、Marketo への接続および認証ために設計された新しいREST API サービスを作成します。 また、REST API へのユーザーのアクセスを検証するために必要なOAuth ベースの認証情報も生成します。
OAuth 資格情報を取得
新しいサービスのOAuth 資格情報を取得して記録するには、Marketo [管理]エリアに戻り、 LaunchPoint オプションに移動します。
作成したサービスの詳細の表示リンクをクリックします。Marketo は、認証資格情報を表示するウィンドウを開きます。 これらの資格情報は、OAuthClientId およびOAuthClientSecret の値を提示します。
接続変数の設定
以下の接続変数を設定したら、REST API 経由での接続準備は完了です。- Schema:REST。
- OAuthClientId:カスタムサービスに紐付けられたOAuth クライアントID。
- OAuthClientSecret:カスタムサービスに紐付けられたOAuth クライアントシークレット。
- RESTEndpoint:管理エリアにある、REST Web サービスエンドポイントのURL。 REST API の統合 -> ウェブ サービスセクションに移動して、このURL を見つけます。 Identity Endpoint は空白のままにします。
SOAP API
以下の接続変数を設定したら、SOAP API 経由での接続準備は完了です。- Schema:SOAP。
- UserId:Marketo の[管理]SOAP API パネルの統合セクションにあるクライアントアクセスID。
- EncryptionKey:Marketo Web サイトの[管理]ページで生成される、Marketo SOAP API 暗号化キー。
- SOAPEndpoint:Marketo Web サイトの[管理]ページにある、SOAP Web サービスエンドポイントのURL。
データの取得
Select-Marketo cmdlet はデータを取得するためのネイティブなPowerShell インターフェースを提供します。
$results = Select-Marketo -Connection $conn -Table "Leads" -Columns @("Id, Email") -Where "Email='sample@email.com'"Invoke-Marketo cmdlet はSQL インターフェースを提供します。このcmdlet を使うと、Query パラメータを介してSQL クエリを実行できます。
cmdlet 出力のパイプ処理
cmdlet は行オブジェクトをパイプラインに一度に一行ずつ返します。以下は、結果をCSV ファイルにエクスポートします。
Select-Marketo -Connection $conn -Table Leads -Where "Email = 'sample@email.com'" | Select -Property * -ExcludeProperty Connection,Table,Columns | Export-Csv -Path c:\myLeadsData.csv -NoTypeInformation
Select-Marketo からの結果をSelect-Object cmdlet にパイプして、Export-CSV cmdlet にパイプする前にいくつかのプロパティを実行していることがわかるでしょう。これをする理由は、CData Cmdlets は接続、テーブル、およびカラムの情報を結果セットの各行オブジェクトに追加しますが、必ずしもその情報がCSV ファイルに必要ではないからです。
ただし、これによってcmdlet の出力を別のcmdlet にパイプすることが容易になります。以下に、結果セットをJSON に変換する例を示します。
PS C:\> $conn = -Connect-Marketo -Schema 'REST' -RESTEndpoint 'https://MyMarketoUrl/rest' -OAuthClientId 'MyOAuthClientId' -OAuthClientSecret 'MyOAuthClientSecret' PS C:\> $row = Select-Marketo -Connection $conn -Table "Leads" -Columns (Id, Email) -Where "Email = 'sample@email.com'" | select -first 1 PS C:\> $row | ConvertTo-Json { "Connection": { }, "Table": "Leads", "Columns": [ ], "Id": "MyId", "Email": "MyEmail" }
データの削除
以下は、抽出条件に合うあらゆるレコードを削除します。
Select-Marketo -Connection $conn -Table Leads -Where "Email = 'sample@email.com'" | Remove-Marketo
データの変更
cmdlet はデータクレンジング同様、データの変換を容易にします。次の例は、レコードがすでに存在するかどうか、挿入する前に更新が必要かどうかをチェックしてから、CSV ファイルのデータをMarketo にロードします。
Import-Csv -Path C:\MyLeadsUpdates.csv | %{ $record = Select-Marketo -Connection $conn -Table Leads -Where ("Id = `'"+$_.Id+"`'") if($record){ Update-Marketo -Connection $conn -Table Leads -Columns @("Id","Email") -Values @($_.Id, $_.Email) -Where "Id = `'$_.Id`'" }else{ Add-Marketo -Connection $conn -Table Leads -Columns @("Id","Email") -Values @($_.Id, $_.Email) } }