2015-12-27

FuelSDK-Python触ってみた

ExactTarget(Marketing Cloud)のpythonのSDKであるFuelSDK-Pythonを触ってみたのでメモっておきます。pythonのバージョンは2.7.xを使用してください。

インストールと設定

pipでインストールします。
$ pip install FuelSDK

次にAppCenterでAPI用のアプリケーションを作成して、ClientIDとClientSecretを取得します。アプリケーションの作成方法及びアプリケーションクレデンシャルの取得方法は過去記事を参照してください。

アプリケーションクレデンシャルの設定になりますが、以下の3つの設定方法があります。

設定ファイルに予め書いておく方法

FuelSDK用のディレクトリ及び設定ファイルを作成します。
$ mkdir ~/.fuelsdk
$ vim ~/.fuelsdk/config.python

設定ファイルには以下のURLに記載されている内容をコピペしてClientIDとClientSecretを取得した内容に書き換えてください。

https://github.com/salesforce-marketingcloud/FuelSDK-Python/blob/master/FuelSDK/config.python.template

こんな感じになります↓

[Web Services]
 appsignature: none
 clientid: {client_id}
 clientsecret: {client_secret}
 defaultwsdl: https://webservice.exacttarget.com/etframework.wsdl
 authenticationurl: https://auth.exacttargetapis.com/v1/requestToken?legacy=1
 wsdl_file_local_loc: /tmp/ExactTargetWSDL.s6.xml

コード上で明示的に設定する方法

FuelSDK.ET_Clientをインスタンス化するときに以下のようにパラメータを設定します。
params = {}
params['clientid'] = '{client_id}'
params['clientsecret'] = '{client_secret}'

client = FuelSDK.ET_Client(params=params)

環境変数で設定する方法

herokuとかだとこの方法ですかね。
$ export FUELSDK_CLIENT_ID={client_id}
$ export FUELSDK_CLIENT_SECRET={client_secret}

DataExtensionのレコード抽出

import FuelSDK
import ET_Client

customer_key = '{Input your DataExtension CustomerKey}'

client = FuelSDK.ET_Client()

row = ET_Client.ET_DataExtension_Row()
row.auth_stub = client
row.CustomerKey = customer_key
row.props = ['field1', 'field2']
row.search_filter = {'Property' : 'field1', 'SimpleOperator' : 'equals', 'Value' : 'hoge'}
#row.search_filter = {'Property' : 'field1', 'SimpleOperator' : 'IN', 'Value' : ['hoge', 'fuga']}
response = row.get()
print(response.results)

ちなみにDataExtensionのdescribeはprops省略OKですが、レコード抽出はprops必須です。また、search_filterでオペレータにINを使う場合は配列を指定できますが、この配列は必ず2つ以上の要素を含むようにしてください。要素が1つだけの場合はequalsを使うようにしないとエラーになっちゃいます。

DataExtensionのdescribe

DataExtensionの全カラムを取得したいときのサンプルはこんな感じ。
customer_key = '{Input your DataExtension CustomerKey}'

client = FuelSDK.ET_Client()
de_column = ET_Client.ET_DataExtension_Column()
de_column.auth_stub = client
de_column.props = ["Name", "CustomerKey"]
de_column.search_filter = {'Property' : 'DataExtension.CustomerKey','SimpleOperator' : 'equals','Value' : customer_key}
response = de_column.get()
print(response.results)

ropsのところは取得したいカラムの情報を入力することになりますが、省略すると各カラムの全パラメータを取得できます。

DataExtensionレコードの作成

customer_key = '{Input your DataExtension CustomerKey}'

client = FuelSDK.ET_Client()

row= ET_Client.ET_DataExtension_Row()
row.CustomerKey = customer_key
row.auth_stub = client

row.props = {
    'field1' : 'hoge',
    'field2' : 'fuga',
}

postResponse = row.post()
print(postResponse.results)

上記ではpropsに入れる属性値として単一のディクショナリをセットしていますが、リスト+ディクショナリの形で複数レコードを登録することも可能です。

Subscriberの抽出

client = FuelSDK.ET_Client()

getSub = ET_Client.ET_Subscriber()
getSub.auth_stub = client
response = getSub.get()
print(response.results)

全DataExtensionの取得

de = ET_Client.ET_DataExtension()
de.auth_stub = client
de.props = ["Name", "CustomerKey", "ObjectID"]
response = de.get()
print(response.results)

SOAPメッセージのデバッグしたいとき

ET_Clientのコンストラクタのパラメータでdebug=TrueをセットすればOK。
client = FuelSDK.ET_Client(debug=True)
このエントリーをはてなブックマークに追加