Skip to content

cgreening/MyWaitrose

Folders and files

NameName
Last commit message
Last commit date

Latest commit

 

History

13 Commits
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 

Repository files navigation

MyWaitrose

Hacking around with watirose

Getting started

npm install mywaitrose

Typical use case would be to login:

await waitroseAPI.login(<USERNAME>, <PASSWORD>);

Then set the delivery postcode (this is required before you try and add anything to your basket)

await waitroseAPI.setPostcode(postcode);

You can now search for products:

const products = waitroseAPI.searchForProduct('Bananas');

Add products to your basket:

const newBasket = await waitroseAPI.addToBasket(products[0].id);
console.log(`You now have ${newBasket.numberOfItems} items in your basket`);
newBasket.products.forEach(product => console.log(product.id, product.name, product.quantity));

Get the estimated cost of your basket

const newTolleySummary = await waitroseAPI.getTrolleySummary();
console.log(`Estimated cost of trolley ${newTolleySummary.estimatedCost}`);

And list the contents of your basket

const itemsInBasket = await waitroseAPI.getItemsInBasket();
console.log(`You have ${itemsInBasket.numberOfItems} items in your basket`);
itemsInBasket.products.forEach(product => console.log(product.name));

Complete example:

import WaitroseAPI from 'mywaitrose';

async function addToBasket(username, password, postcode, searchTerm) {
  const waitroseAPI = new WaitroseAPI();
  await waitroseAPI.login(username, password);
  console.log('Logged in');
  // need to set the postcode before we can add stuff to the basket ?
  await waitroseAPI.setPostcode(postcode);
  console.log('Set Password');
  // see what's in our basket
  const itemsInBasket = await waitroseAPI.getItemsInBasket();
  console.log(`You have ${itemsInBasket.numberOfItems} items in your basket`);
  itemsInBasket.products.forEach(product => console.log(product.id, product.name));
  // get the trolley cost
  const trolleySummary = await waitroseAPI.getTrolleySummary();
  console.log(`Estimated cost of trolley ${trolleySummary.estimatedCost}`);

  // seach for a product
  const products = await waitroseAPI.searchForProduct(searchTerm);
  console.log(`Found ${products.length} matches for "${searchTerm}"`);
  products.forEach(product => console.log(product.id, product.name));

  // add the first product we found
  const newBasket = await waitroseAPI.addToBasket(products[0].id);
  console.log(`You now have ${newBasket.numberOfItems} items in your basket`);
  newBasket.products.forEach(product => console.log(product.id, product.name, product.quantity));

  const newTolleySummary = await waitroseAPI.getTrolleySummary();
  console.log(`Estimated cost of trolley ${newTolleySummary.estimatedCost}`);
}

main(<YOUR USERNAME>, <YOUR PASSWORD>, <YOUR POSTCODE> <SEARCH TERM FOR PRODUCT TO ADD TO BASKET>);

Development

Setup

Clone the repo and run:

npm install

Running sample code in development

npm run dev USERNAME PASSWORD "POSTCODE" "PRODUCT SEARCH TERM"

This will run the code in a loop waiting for changes to the code. Pass your waitrose username, password, delivery postcode and the product you want to search for.

npm start USERNAME PASSWORD "POSTCODE" "PRODUCT SEARCH TERM"

This will run the code once - pass the same arguments as above.

Building

Build the javascript with:

npm run lint
npm test
npm run compile

About

Hacking around with watirose

Resources

License

Stars

Watchers

Forks

Packages

No packages published