node-red-contrib-open-food-facts
Version:
A Node-RED node that provides easy integration with the Open Food Facts API. Search for products, retrieve product information, add products, and manage product images.
275 lines (204 loc) • 7.55 kB
Markdown
# Node-RED Open Food Facts
[](https://opensource.org/licenses/MIT)
[](https://github.com/democratize-technology/node-red-contrib-open-food-facts/actions/workflows/ci.yml)
[](https://badge.fury.io/js/node-red-contrib-open-food-facts)
A Node-RED integration for the Open Food Facts API, providing easy access to food product information, nutrition facts, and ingredient details from the world's largest open food database.
## Features
- **Product Lookup**: Retrieve detailed product information by barcode
- **Product Search**: Search for products using various criteria (name, brand, category, etc.)
- **Taxonomy Access**: Access categorized data for additives, allergens, brands, and more
- **Product Management**: Add new products and upload product photos (requires authentication)
- **Insights Access**: Get random insights from Robotoff for product improvement
- **Asynchronous Operations**: All API calls are non-blocking
- **Error Handling**: Comprehensive error handling with custom error types
- **Type Safety**: Built with modern JavaScript features
## Installation
Install using the Node-RED palette manager or via npm:
```bash
npm install node-red-contrib-open-food-facts
```
## Nodes
### Basic Nodes
#### OpenFoodFacts Get Product
Retrieve product information by barcode.
**Inputs**:
- `msg.payload`: Barcode string (if not configured in node)
**Outputs**:
- `msg.payload`: Product object with details like name, brand, ingredients, nutrition facts
#### OpenFoodFacts Search Products
Search for products using various filters.
**Inputs**:
- `msg.payload`: Search parameters object
Example search parameters:
```javascript
{
"search_terms": "chocolate",
"brands": "Nestle",
"categories": "snacks",
"page": 1,
"pageSize": 20
}
```
**Outputs**:
- `msg.payload`: Search results including count, page information, and products array
#### OpenFoodFacts Get Taxonomy
Access categorized data (additives, allergens, brands, etc.).
**Inputs**:
- `msg.payload`: Taxonomy type (e.g., "additives", "allergens", "brands")
**Outputs**:
- `msg.payload`: Taxonomy data object
### Extended Nodes
#### OpenFoodFacts Add Product
Add a new product to the OpenFoodFacts database (requires authentication).
**Configuration**:
- Username and password credentials required
**Inputs**:
- `msg.payload`: Product data object with `code`, `brands` (optional), `labels` (optional)
**Outputs**:
- `msg.payload`: API response
#### OpenFoodFacts Upload Photo
Upload a photo for a product (requires authentication).
**Configuration**:
- Username and password credentials required
**Inputs**:
- `msg.payload`: Object containing:
- `barcode`: Product barcode
- `image`: Image file
- `type`: Object with `field` (front/ingredients/nutrition) and `languageCode`
**Outputs**:
- `msg.payload`: API response
#### OpenFoodFacts Get Additives
Retrieve the additives taxonomy.
**Outputs**:
- `msg.payload`: Additives taxonomy data
#### OpenFoodFacts Get Allergens
Retrieve the allergens taxonomy.
**Outputs**:
- `msg.payload`: Allergens taxonomy data
#### OpenFoodFacts Get Brands
Retrieve the brands taxonomy.
**Outputs**:
- `msg.payload`: Brands taxonomy data
#### OpenFoodFacts Get Random Insight
Get random insights from OpenFoodFacts Robotoff.
**Configuration**:
- `count`: Number of insights to retrieve (default: 1)
- `lang`: Language code for filtering (optional)
**Outputs**:
- `msg.payload`: Random insights from Robotoff
## Example Flows
### Basic Product Lookup
```json
[
{
"id": "inject-barcode",
"type": "inject",
"payload": "3017620422003",
"payloadType": "str",
"topic": "",
"name": "Inject Barcode",
"wires": [["get-product"]]
},
{
"id": "get-product",
"type": "openfoodfacts-get-product",
"name": "",
"wires": [["debug"]]
},
{
"id": "debug",
"type": "debug",
"name": "",
"active": true,
"wires": []
}
]
```
### Search by Category
```json
[
{
"id": "search-inject",
"type": "inject",
"payload": "{\"categories\": \"beverages\", \"page\": 1}",
"payloadType": "json",
"topic": "",
"name": "Search Beverages",
"wires": [["search-products"]]
},
{
"id": "search-products",
"type": "openfoodfacts-search-products",
"name": "",
"wires": [["debug"]]
},
{
"id": "debug",
"type": "debug",
"name": "",
"active": true,
"wires": []
}
]
```
## API Reference
### Product Object Structure
```javascript
{
"code": "3017620422003",
"product_name": "Nutella",
"brands": "Ferrero",
"categories": "Spreads, Sweet spreads, Chocolate spreads",
"ingredients_text": "Sugar, Palm oil, Hazelnuts...",
"nutriments": {
"energy_100g": 2252,
"fat_100g": 30.9,
"carbohydrates_100g": 57.5,
"proteins_100g": 6.3
},
// ... more fields
}
```
### Search Parameters
| Parameter | Type | Description |
|-----------|------|-------------|
| search_terms | string | General search query |
| brands | string | Filter by brand |
| categories | string | Filter by category |
| code | string | Filter by barcode |
| countries | string | Filter by country |
| page | number | Page number (default: 1) |
| pageSize | number | Results per page (default: 20) |
## Error Handling
The nodes emit errors that can be caught using a catch node. Common errors include:
- Product not found
- Invalid barcode format
- Network connectivity issues
- API rate limiting
## Testing
Run the test suite:
```bash
npm test
```
## Automated PR Reviews
This repository uses automated PR reviews powered by Amazon Bedrock and Claude AI via GitHub Actions. When you create a pull request, the workflow will automatically:
- Analyze your code changes
- Provide intelligent feedback and suggestions
- Check for potential issues and improvements
### Setup Requirements
To enable automated PR reviews, repository administrators need to configure the following secrets in Settings → Secrets and variables → Actions → Repository secrets:
- `AWS_ACCESS_KEY_ID`: Your AWS access key with Bedrock permissions
- `AWS_SECRET_ACCESS_KEY`: Your AWS secret access key
The workflow uses Claude 3 Haiku via Amazon Bedrock for fast, intelligent code analysis and provides comprehensive reviews including performance and security feedback.
## Contributing
Contributions are welcome! Please see our [Contributing Guidelines](CONTRIBUTING.md) for details.
## License
This project is licensed under the MIT License - see the [LICENSE](LICENSE) file for details.
## Credits
This node uses the [Open Food Facts](https://world.openfoodfacts.org/) API. Open Food Facts is a collaborative project with contributors from around the world.
## Support
- For issues and feature requests, please use the [GitHub issue tracker](https://github.com/democratize-technology/node-red-contrib-open-food-facts/issues)
- For questions about the Open Food Facts API, visit their [documentation](https://wiki.openfoodfacts.org/API)
## Acknowledgments
- Open Food Facts team for maintaining the amazing food products database
- Node-RED community for the excellent IoT platform