Quickstart¶
This page gives a good introduction in how to get started with fnapy.
Before starting, make sure you have your credentials to connect to the FNAC API.
Create a connection to the FNAC Marketplace API with your credentials:
>>> from fnapy.fnapy_manager import FnapyManager >>> connection = FnapyConnection(credentials)
Create the manager:
>>> from fnapy.connection import FnapyConnection >>> manager = FnapyManager(connection)
Now you should be able to access the different web services.
Update your offers¶
Let’s create some offers in our catalog:
offer_data1 = {'product_reference':'0711719247159',
'offer_reference':'B76A-CD5-153',
'price':15, 'product_state':11, 'quantity':10,
'description': 'New product - 2-3 days shipping, from France'}
offer_data2 = {'product_reference':'5030917077418',
'offer_reference':'B067-F0D-75E',
'price':20, 'product_state':11, 'quantity':16,
'description': 'New product - 2-3 days shipping, from France'}
response = manager.update_offers([offers_data1, offer_data2])
Behind the scene, the manager sent an XML request to the offers_update service. We can have a look at this request with the attribute offers_update_request:
>>> request = manager.offers_update_request
>>> print request.xml
<?xml version='1.0' encoding='utf-8'?>
<offers_update xmlns="http://www.fnac.com/schemas/mp-dialog.xsd" partner_id="XXX" shop_id="XXX" token="XXX">
<offer>
<product_reference type="Ean">0711719247159</product_reference>
<offer_reference type="SellerSku"><![CDATA[B76A-CD5-153]]></offer_reference>
<price>15</price>
<product_state>11</product_state>
<quantity>10</quantity>
<description><![CDATA[New product - 2-3 days shipping, from France]]></description>
</offer>
<offer>
<product_reference type="Ean">5030917077418</product_reference>
<offer_reference type="SellerSku"><![CDATA[B067-F0D-75E]]></offer_reference>
<price>20</price>
<product_state>11</product_state>
<quantity>16</quantity>
<description><![CDATA[New product - 2-3 days shipping, from France]]></description>
</offer>
</offers_update>
Actually this request is an instance of the Request
class.
We’ll talk about it later. For now, let’s see what we’ve got in our response:
>>> print response.xml
<?xml version="1.0" encoding="utf-8"?>
<offers_update_response status="OK" xmlns="http://www.fnac.com/schemas/mp-dialog.xsd">
<batch_id>88BD9517-A73C-78E0-04DB-AC5ADE1D63F6</batch_id>
</offers_update_response>
The response sent by the server is just an instance of the Response
class. We can see that the status of the response is OK and the
batch_id is 88BD9517-A73C-78E0-04DB-AC5ADE1D63F6. This is basically the id
you’ll have to use to get information about the status of your offers.
Get the batch status¶
batch_id = response.dict['offers_update_response']['batch_id']
response = manager.get_batch_status(batch_id)
Note that FnapyManager
stores the last batch_id so if
you want the latest batch_status you can do:
response = manager.get_batch_status()
Query the offers¶
When you’re satisfised with your offers you may want to know if they were actually created and retrieve information about them.
Let’s say you want to know the offers created between 2016-08-25 and 2016-08-31:
from fnapy.utils import Query
dmin = datetime(2016, 8, 25, 0, 0, 0).replace(tzinfo=pytz.utc).isoformat()
dmax = datetime(2016, 8, 31, 0, 0, 0).replace(tzinfo=pytz.utc).isoformat()
date Query('date', type='Created').between(min=dmin, max=dmax)
response = manager.query_offers(date=date)
Query the pricing¶
In order to stay competitive, you have to know the offers created by the other sellers for a list of EANs or at least the current best offer these products. You can get these information with query_pricing:
response = manager.query_pricing(eans=eans)
Delete offers¶
You can delete the offers you created with delete_offers:
response = manager.delete_offers(offer_references)
where offer_references is a list of SKUs.
Query the orders¶
Once customers placed an order on your items in your catalog, you can query these orders.
If you want to retrieve the first 10 created orders, you’ll have to sent this request with:
response = manager.query_orders(results_count=10, paging=1)
Update the orders¶
Orders statuses are following this workflow:
Created > Accepted > ToShip > Shipped > Received
The seller acts only at acceptation and shipping steps.
This is the how we accept the first and refuse the second order for the order_id 003ECCA1YVFBW:
action1 = {"order_detail_id": 1, "action": "Accepted"}
action2 = {"order_detail_id": 2, "action": "Refused"}
actions = [action1, action2]
response = manager.update_orders('003ECCA1YVFBW', "accept_order", actions)
Tracking information¶
It is also possible to include the tracking information in the order (tracking_number and tracking_company):
action = {"order_detail_id": 1, "action": "Shipped",
"tracking_number": "1234", "tracking_company": "Track Inc."}
response = manager.update_orders('003ECCA1YVFBW', "update", [action])
Request and Response¶
Both Request
and Response
share the same
interface.