.. _quickstart: 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 0711719247159 15 11 10 5030917077418 20 11 16 Actually this request is an instance of the :class:`Request ` class. We'll talk about it later. For now, let's see what we've got in our response:: >>> print response.xml 88BD9517-A73C-78E0-04DB-AC5ADE1D63F6 The response sent by the server is just an instance of the :class:`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 :class:`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) .. todo:: Add example for "accept_all_orders" .. todo:: Add the section using query_orders to check the order was created successfully -------------------- 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 :class:`Request ` and :class:`Response ` share the same interface.