Skip to content

valgeirb/vinbudin

Repository files navigation

vinbudin

vinbudin

npm version npm downloads License

An NPM package to fetch product data from Vínbúðin.

Features

  • ⚡ Fetch categorized product data from www.vinbudin.is
  • 🏷️ Fully typed API
  • ✅ Fully validated product data

Setup

# pnpm
pnpm add -D vinbudin

# npm
npm i -D vinbudin

# yarn
yarn add -D vinbudin

Warning

This package is native ESM and does not provide a CommonJS export. If your project uses CommonJS, you will have to convert to ESM. Please don't open issues for questions regarding CommonJS / ESM.

Why?

Vínbúðin does not provide an open API. This package can be used to analyse their product data or create something else from it.

Basic Usage

import { getProducts } from 'vinbudin'

getProducts().then((products) => {
  // Handle the data
  console.log(products)
})

// You can also provide an options object to only get specific data
getProducts({
  beer: true,
  bubbly: true,
}).then((products) => {
  // Handle the data
  console.log(products)
})

Example response

{
  productId: 28304,
  productName: 'Ölverk Sóði Þorrabjór',
  productBottledVolume: 330,
  productAlchoholVolume: 7,
  productPrice: 642,
  productFoodCategories: '',
  productCategory: {
    name: 'beer',
    id: [ '60', '61', '62' ],
    taste: true,
    sweet: false,
    subCategories: null
  },
  productSubCategory: null,
  productCountryOfOrigin: 'ísland',
  productSpecialReserve: false,
  productOrganic: false,
  productContainerType: 'DS.',
  productPlaceOfOrigin: '',
  productDistrictOfOrigin: '',
  productWine: '',
  productInventory: 0,
  productYear: '',
  productDateOnMarket: '2024-01-11T00:00:00',
  productIsTemporaryOnSale: false,
  productIsGift: false,
  productIsInThema: false,
  productIsAvailableInStores: true,
  productIsSpecialOrder: false,
  productStoreSelected: null,
  productTasteGroup: '61BE',
  productTasteGroup2: 'BPALE',
  productTasteGroup2Description: null,
  productPackagingClosing: '',
  productPackagingContainer: 'ALDOS',
  productSpecialMarking: [],
  productSeasonCode: 'ÞORRI',
  minimumQuantity: 0,
  useMinimumQuantityAsUnit: false,
  isSpecialOrderAndOutOfStock: false,
  productSearchGrape: '',
  productProducer: 'Einfalt ehf.',
  productShortDescription: 'Ölverk Sóði Þorrabjór',
  productBackupInventory: 0,
  productPackagingWeight: 6.68,
  productCarbonFootprint: 31.93,
  supplierId: null,
  productAvailableUnits: '24',
  productSaleStatus: '-2',
  productImageUrl: 'https://www.vinbudin.is/Portaldata/1/Resources/vorumyndir/original/28304_r.jpg'
}

Note

This package is designed to be used in a server-side environment. Due to restrictions imposed by browsers regarding cross-origin requests (CORS), attempting to use this package in a client-side (browser) environment may result in errors related to CORS policies.

Methods

getProducts(products) -> promise

Gets products from www.vinbudin.is

  • products (Object) is an options object that you can optionally pass in if you want some subset of the data.

It looks like this:

{
  beer: true,
  red: true,
  white: true,
  rose: true,
  bubbly: true,
  fortified: true,
  ciderfruitandblends: true,
  sakeandmead: true,
  strong: true,
  aromatised: true,
}

Working with client-side environments

While this package is intended for use in server-side environments, such as Node.js applications, there are workarounds available for integrating it into client-side environments.

Both Nuxt and Next.js support API routes as an example:

Example using Nuxt API routes

// server/api/vinbudin.ts
import { getProducts } from 'vinbudin'

export default defineEventHandler(async () => {
  return await getProducts({ beer: true });
})

// Component
<script setup lang="ts">
const { data } = await useFetch('/api/vinbudin')
</script>