2016-09-07 5 views
0

私は、製品をPrestashopに追加するためのスクリプトをPythonで作成しようとしています。prestapytは新製品をアップロードできません

私はprestapytライブラリを使用しています。私はファイルを読むことができます、私は新しいファイルのためのテンプレートを得ることができますが、私は新しいファイルをアップロードすることはできません。これは私が持っているものです。

def addNewProduct(prestashop): 
    blank_product = prestashop.get('products', options={'schema': 'blank'}); 
    pprint(blank_product) 
    blank_product.update({'active': '1', 
       'additional_shipping_cost': '', 
       'advanced_stock_management': '', 
       'description': {'language': {'attrs': {'id': '2'}, 'value': 'DESCRIPTION!!!'}}, 
       'description_short': {'language': {'attrs': {'id': '2'}, 
                'value': 'SHORT DESCRIPTION!!!'}}, 
       'id': '23', 
       'id_category_default': '2', 
       'name': {'language': {'attrs': {'id': '2'}, 'value': 'NAME'}}, 
       'new': '1', 
       'price': '23', 
       'reference': 'MYREF', 
       'show_price': '1', 
       'width': ''}) 
     prestashop.add('products', blank_product) 

このスクリップを実行するとどこ

from prestapyt import PrestaShopWebServiceError 
from prestapyt import PrestaShopWebService 
from prestapyt import PrestaShopWebServiceDict 

DEBUG = 'true' 
PS_SHOP_PATH = MYPATH 
PS_WS_AUTH_KEY = MYKEY 

prestashop = PrestaShopWebServiceDict(PS_SHOP_PATH, PS_WS_AUTH_KEY, DEBUG) 
myproducts = prestashop.search('products'); 
addNewProduct(prestashop) 

私は、次を得る:

Execute url: MYPATH/api/products/method: POST Response code: 400

Response headers:

{'status': '400', 'psws-version': '1.6.1.6', 'x-powered-by': 'PrestaShop Webservice', 'transfer-encoding': 'chunked', 'set-cookie': 'PrestaShop-a0d2999cb4d9d838ea9bbca3cf8a7a22=gv2rmNYce013aHwM2TQ7718d8sl%2BCmTtT1hO7pqS6ItiGKUPTa%2FGUwpTprJh9pihDKJbQNq4DKb0N6SYqC5nxBM4Q%2F1AFCrubceV8yPEcMo%3D000079; expires=Tue, 27-Sep-2016 21:15:16 GMT; Max-Age=1728000; path=MYPATH; domain=SOMETHING; httponly', 'access-time': '1473282916', 'connection': 'close', 'execution-time': '0.008', 'date': 'Wed, 07 Sep 2016 21:15:16 GMT', 'server': 'Apache', 'content-type': 'text/xml;charset=utf-8'}

Response body:

'PrestaShop error: 400 Bad Request. Internal error. To see this error please display the PHP errors.'

どれideia?

ありがとうございます!

UPDATE:私はあなたが提案し何を追加し、これは私が得るものです :

Traceback (most recent call last): 
File "Script.py", line 24, in <module> 
prestashop.edit('products', 1, address_data) 

File "build/bdist.macosx-10.11-intel/egg/prestapyt/prestapyt.py", line 363, in edit 
File "SAME", line 516, 
in edit_with_url File "SAME", line 374, 
in edit_with_url File "SAME", line 196, 
in _execute File "SAME", line 127, 
in _check_status_code 

prestapyt.prestapyt.PrestaShopWebServiceError: 'PrestaShop error: 400 Bad Request. Internal error. To see this error please display the PHP errors.' 

をそして、それはここに壊れる:

address_data = prestashop.get('products', 1) 
address_data['active'] = '0' 
prestashop.edit('products', 1, address_data) -> THIS LINE 

任意の新しいアイデア?ありがとうございました!

+0

*このエラーを表示するには、PHPエラーを表示してください。* config/define.inc.phpに変更( '_ PS_MODE_DEV_'、true); –

+0

PrestaShopバックオフィスで 'CGI mode for PHP'を有効にしてください。 @SergiiPのような定義も変更してください。 – sarcom

+0

待ちます。私のラップトップでこれをPythonスクリプトとして実行しています。 PHPのようなものではありません。私はまだサーバー上でそれを行うべきですか? – Carollour

答えて

0

blank_product.update(...)の代わりにblank_product['product'].update(...)を使用します。ブランクのスキーマ構造は、{product: {...}}です。

edit()機能を使用するときは、製品IDを指定する必要はありませんが、address_dataフィールド(少なくとも現在のバージョン)から収集されます。しかし、再びフィールドをこのように編集する必要があります。address_data['product]['active'] = '0'

関連する問題