2015年5月1日金曜日

Pythonでセールスフォース

Pythonでセールスフォースの取引先レコードを追加してみた

curlでBulkApiを叩いてやってたら大変面倒で発狂しそうになったのでPythonでいけないかやってみた。

ライブラリのインストールと修正(しなくても良い環境の人が圧倒的かな)

Pythonなんだから、MAC-OSか、Linuxなどでの例を書きたいところだが、敢えてWindowsでやってみた(Unix系は簡単なんで)
Pythonバージョンは3.4.3

Python Salesforceでググってさきに見つかったsimple-salesforce 0.67.0をつかってみる。
ここからtar.gzをダウンロード
ダウンロードしたフォルダを解凍し、「simple_salesforce-0.67.0」フォルダ下でコマンドプロンプトを開き(URLバーに「cmd /f:on」と入力すればそのフォルダをカレントとしてコマンドプロンプトが開きます。-Win10な人はエクスプローラの左上メニューにズバリコマンドプロンプトがあります)

> path=%path%;c:\usr\local\python
> python setup.py build
> python setup.py install

1行目はご自身の環境に合わせて変更してください(コントロールパネルのシステム設定で変更している人は不要ですね)。

次に、ちょっとソースをいじるのでダウンロードフォルダの「simple_salesforce」をpythonインストールディレクトリの「lib\site-packages\」下へ移動する。


私の環境では、Windows環境でも、c:\usr\local\python\ にPythonがセットアップされているので、c:\usr\local\python\lib\下へ移動した。

もとのpython\lib\site-packages\simple_salesforce-0.67.0-py3.4.egg を使えないようにリネーム(これは中身は単なるZIPですが、さきほど移動してきたフォルダソースを使うようにしたいのでこうした)。

オリジナルのソースではPartnerWSDLのみしか対応できないようハードコードされているので、
simple_salesforce\api.pyを編集し以下の部分を書き換える

      self.sf_version = kwargs.get('version', '29.0')
   self.sandbox = kwargs.get('sandbox', False)
   self.proxies = kwargs.get('proxies')
   self.wsdl_type = kwargs.get('wsdl', 'partner') # or 'enterprise'  <----行追加
            :
       # Pass along the username/password to our login helper
       self.session_id, self.sf_instance = SalesforceLogin(
           username=username,
           password=password,
           security_token=security_token,
           sandbox=self.sandbox,
           sf_version=self.sf_version,
           proxies=self.proxies,         <-------- 修正
           wsdl=self.wsdl)               <-------- 行追加
                               ※ 2か所

simple_salesforce\login.pyを編集し以下の部分を書き換える
def SalesforceLogin(**kwargs):の宣言内
   :
    username = kwargs['username']
    password = kwargs['password']
    wsdl = kwargs['wsdl']                <----------- 行追加

   :
    soap_url = soap_url.format(domain=domain, sf_version=sf_version)

    if wsdl != 'partner':              <----------- 行追加
      soap_url = soap_url.replace('Soap/u/', 'Soap/c/')  <--- 行追加
    
    username = escape(username)
    password = escape(password)
   :
   :
        login_soap_request_body = """<?xml version="1.0" encoding="utf-8" ?>
        <env:Envelope
                xmlns:xsd="http://www.w3.org/2001/XMLSchema"
                xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
                xmlns:env="http://schemas.xmlsoap.org/soap/envelope/">
            <env:Body>
                <n1:login xmlns:n1="urn:{wsdl}.soap.sforce.com">      <--- 修正
                    <n1:username>{username}</n1:username>
                    <n1:password>{password}{token}</n1:password>
                </n1:login>
            </env:Body>
        </env:Envelope>""".format(wsdl=wsdl, username=username, password=password, token=security_token) <--- 修正
    ※ 2か所

これで準備は整った。
ということで、

pythonでアクセス

(先ずは上は無視してここからやってもできると思います)

接続して、取引先レコードを1件Insertして、クエリー(一覧)してみた。

C:\>python
Python 3.4.3 (v3.4.3:9b73f1c3e601, Feb 24 2015, 22:43:06) [MSC v.1600 32 bit (In
tel)] on win32
Type "help", "copyright", "credits" or "license" for more information.
>>> from simple_salesforce import Salesforcefrom simple_salesforce import Salesforce
>>> sf = Salesforce(username='youraccount(email)', password='xxxxx', security_token='', wsdl='enterprise')
>>> sf.Account.create({'Name': 'ほげふがカンパニー'})
OrderedDict([('id', '001100000102TYXAA2'), ('success', True), ('errors', [])])
>>>
>>>sf.query('SELECT Id, Name FROM Account')
→結果がつらつらと表示される
SalesforceへWebブラウザでもログインし、「取引先」一覧も確認してみてください。反映されています。

標準オブジェクト名と使用メソッドについては、Salesforceサイトの「SOAP API開発者ガイド」を参照


うーん、簡単だ!これは楽です。


2015.6.18追記
Gistに取引先レコード登録スクリプトを置きました。適当に改変して使ってください。
https://gist.github.com/sutezo/f9a8cb8834b08bc0d624



0 件のコメント: