{"id":16746542,"url":"https://github.com/openfoodfacts/openfoodfacts-ruby","last_synced_at":"2025-04-30T21:37:14.561Z","repository":{"id":27696686,"uuid":"31183395","full_name":"openfoodfacts/openfoodfacts-ruby","owner":"openfoodfacts","description":"💎 Open Food Facts Ruby API Wrapper","archived":false,"fork":false,"pushed_at":"2024-09-04T14:38:34.000Z","size":317,"stargazers_count":41,"open_issues_count":3,"forks_count":12,"subscribers_count":7,"default_branch":"main","last_synced_at":"2025-04-27T00:02:39.308Z","etag":null,"topics":["api-wrapper","food","hacktoberfest","openfoodfacts","ruby"],"latest_commit_sha":null,"homepage":"https://rubygems.org/gems/openfoodfacts","language":"Ruby","has_issues":true,"has_wiki":null,"has_pages":null,"mirror_url":null,"source_name":null,"license":"mit","status":null,"scm":"git","pull_requests_enabled":true,"icon_url":"https://github.com/openfoodfacts.png","metadata":{"funding":{"patreon":null,"ko_fi":null,"tidelift":null,"community_bridge":null,"liberapay":null,"issuehunt":null,"otechie":null,"lfx_crowdfunding":null,"open_collective":"openfoodfacts-server","github":"openfoodfacts","custom":"https://donate.openfoodfacts.org"},"files":{"readme":"README.md","changelog":"CHANGELOG.md","contributing":null,"funding":".github/FUNDING.yml","license":"LICENSE.txt","code_of_conduct":null,"threat_model":null,"audit":null,"citation":null,"codeowners":".github/CODEOWNERS","security":null,"support":null,"governance":null,"roadmap":null,"authors":null,"dei":null,"publiccode":null,"codemeta":null}},"created_at":"2015-02-22T22:16:37.000Z","updated_at":"2025-03-01T01:14:16.000Z","dependencies_parsed_at":"2023-11-11T05:03:01.729Z","dependency_job_id":"0ab2f1d8-c4a3-479d-89d4-8f5240ee2592","html_url":"https://github.com/openfoodfacts/openfoodfacts-ruby","commit_stats":{"total_commits":226,"total_committers":9,"mean_commits":25.11111111111111,"dds":0.5176991150442478,"last_synced_commit":"b676e4529661f4919f598dd438b6cae8e9a9f52e"},"previous_names":[],"tags_count":8,"template":false,"template_full_name":null,"repository_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/openfoodfacts%2Fopenfoodfacts-ruby","tags_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/openfoodfacts%2Fopenfoodfacts-ruby/tags","releases_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/openfoodfacts%2Fopenfoodfacts-ruby/releases","manifests_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/openfoodfacts%2Fopenfoodfacts-ruby/manifests","owner_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners/openfoodfacts","download_url":"https://codeload.github.com/openfoodfacts/openfoodfacts-ruby/tar.gz/refs/heads/main","host":{"name":"GitHub","url":"https://github.com","kind":"github","repositories_count":251786964,"owners_count":21643797,"icon_url":"https://github.com/github.png","version":null,"created_at":"2022-05-30T11:31:42.601Z","updated_at":"2022-07-04T15:15:14.044Z","host_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub","repositories_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories","repository_names_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repository_names","owners_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners"}},"keywords":["api-wrapper","food","hacktoberfest","openfoodfacts","ruby"],"created_at":"2024-10-13T02:06:44.572Z","updated_at":"2025-04-30T21:37:14.535Z","avatar_url":"https://github.com/openfoodfacts.png","language":"Ruby","funding_links":["https://opencollective.com/openfoodfacts-server","https://github.com/sponsors/openfoodfacts","https://donate.openfoodfacts.org"],"categories":[],"sub_categories":[],"readme":"# Open Food Facts Ruby SDK\n\n[![Gem Version](https://badge.fury.io/rb/openfoodfacts.svg)](https://badge.fury.io/rb/openfoodfacts)\n[![Build Status](https://github.com/openfoodfacts/openfoodfacts-ruby/actions/workflows/ruby.yml/badge.svg)](https://github.com/openfoodfacts/openfoodfacts-ruby/actions/workflows/ruby.yml)\n[![RuboCop](https://github.com/openfoodfacts/openfoodfacts-ruby/actions/workflows/rubocop-analysis.yml/badge.svg)](https://github.com/openfoodfacts/openfoodfacts-ruby/actions/workflows/rubocop-analysis.yml)\n[![Documentation](https://inch-ci.org/github/openfoodfacts/openfoodfacts-ruby.svg?branch=master)](https://inch-ci.org/github/openfoodfacts/openfoodfacts-ruby)\n\n- API Wrapper for [Open Food Facts](https://openfoodfacts.org/), the open database about food.\n- We have a similar package for cosmetics: https://github.com/openfoodfacts/openbeautyfacts-ruby\n- Note: This package needs updates for the newest APIs.\n- Please see on https://wiki.openfoodfacts.org/API/Ruby how to join the community to help\n\n## Installation\n\nAdd this line to your application's Gemfile:\n\n```ruby\ngem 'openfoodfacts'\n```\n\nAnd then execute:\n\n    $ bundle\n\nOr install it yourself as:\n\n    $ gem install openfoodfacts\n\n## Models\n\nAll data is available for World, French, UK and US version for now. You should update the gem page URLs mapping for others.\n\n- Additive\n- Brand\n- Category\n- City\n- Contributor\n- Country\n- EntryDate\n- Faq\n- IngredientThatMayBeFromPalmOil\n- Label\n- LastEditDate\n- Language\n- Locale\n- ManufacturingPlace\n- Mission\n- NumberOfIngredients\n- NutritionGrade\n- Origin\n- PackagerCode\n- Packaging\n- Press\n- Product\n- ProductState\n- PurchasePlace\n- Store\n- Trace\n- User\n\n## Usage\n\n```ruby\nrequire 'openfoodfacts'\n\n# Browse a product\n\ncode = \"3029330003533\"\nproduct = Openfoodfacts::Product.get(code, locale: 'fr')\n\nproduct.product_name\n# =\u003e \"Crousti Moelleux Complet\"\n\nproduct.nutriments.to_hash\n# =\u003e {\"sodium\"=\u003e\"0.44\", \"sugars\"=\u003e6.5, \"fat_unit\"=\u003e\"g\", \"carbohydrates_unit\"=\u003e\"g\", \"proteins_unit\"=\u003e\"g\", \"nutrition-score-fr_100g\"=\u003e-2, \"fat\"=\u003e2.5, \"proteins_serving\"=\u003e12.8, \"sodium_serving\"=\u003e0.535, \"salt\"=\u003e1.1176, \"proteins\"=\u003e10.5, \"nutrition-score-uk_serving\"=\u003e-2, \"nutrition-score-fr\"=\u003e-2, \"fat_serving\"=\u003e3.04, \"sugars_unit\"=\u003e\"g\", \"sugars_100g\"=\u003e\"6.5\", \"sodium_unit\"=\u003e\"g\", \"saturated-fat_unit\"=\u003e\"g\", \"saturated-fat_serving\"=\u003e0.608, \"sodium_100g\"=\u003e0.44, \"fiber_unit\"=\u003e\"g\", \"energy\"=\u003e1067, \"energy_unit\"=\u003e\"kJ\", \"sugars_serving\"=\u003e7.9, \"carbohydrates_100g\"=\u003e44, \"nutrition-score-uk\"=\u003e-2, \"proteins_100g\"=\u003e10.5, \"fiber_serving\"=\u003e7.29, \"carbohydrates_serving\"=\u003e53.5, \"nutrition-score-fr_serving\"=\u003e-2, \"energy_serving\"=\u003e1300, \"fat_100g\"=\u003e\"2.5\", \"saturated-fat_100g\"=\u003e\"0.5\", \"nutrition-score-uk_100g\"=\u003e-2, \"fiber\"=\u003e6, \"salt_serving\"=\u003e1.36, \"salt_100g\"=\u003e\"1.1176\", \"carbohydrates\"=\u003e44, \"fiber_100g\"=\u003e6, \"energy_100g\"=\u003e1067, \"saturated-fat\"=\u003e0.5}\n\n# Update product\n\nuser = Openfoodfacts::User.login(\"USERNAME\", \"PASSWORD\")\nif user\n    product.brands = \"Jacquet\"\n    product.update\n    # true\nend\n\n# Search products\n\nproducts = Openfoodfacts::Product.search(\"Chocolate\", locale: 'world', page_size: 3)\n# =\u003e [#\u003cOpenfoodfacts::Product _id=\"3045140105502\" code=\"3045140105502\" id=\"3045140105502\" image_small_url=\"https://en.openfoodfacts.org/images/products/304/514/010/5502/front.7.100.jpg\" lc=\"en\" product_name=\"Milka au lait du Pays Alpin\"\u003e, #\u003cOpenfoodfacts::Product _id=\"3046920028363\" code=\"3046920028363\" id=\"3046920028363\" image_small_url=\"https://en.openfoodfacts.org/images/products/304/692/002/8363/front.5.100.jpg\" lc=\"en\" product_name=\"Tableta de chocolate negro \\\"Lindt Excellence\\\" 85% cacao\"\u003e, #\u003cOpenfoodfacts::Product _id=\"3046920029759\" code=\"3046920029759\" id=\"3046920029759\" image_small_url=\"https://en.openfoodfacts.org/images/products/304/692/002/9759/front.9.100.jpg\" lc=\"en\" product_name=\"Tableta de chocolate negro \\\"Lindt Excellence\\\" 90% cacao\"\u003e]\n\n# You might need to fetch full product data from results\n\nproducts.first.fetch\n\n# By product state\n\nproduct_states = Openfoodfacts::ProductState.all\nproduct_states.last.products\n\n# Config\n\nOpenfoodfacts::Locale.all\n# =\u003e [\"ad\", \"ad-es\", \"ad-fr\", \"ad-pt\", \"ae\", \"al\", \"am\", \"ar\", \"at\", \"au\", \"ax\", \"az\", \"bd\", \"be\", \"be-de\", \"be-fr\", \"bf\", \"bg\", \"bi\", \"bi-rn\", \"bn\", \"br\", \"by\", \"by-be\", \"bz\", \"ca\", \"ca-fr\", \"cg\", \"ch\", \"ch-fr\", \"ch-it\", \"ci\", \"cl\", \"cn\", \"co\", \"cr\", \"cu\", \"cy\", \"cy-tr\", \"cz\", \"de\", \"dk\", \"do\", \"dz\", \"dz-fr\", \"ec\", \"eg\", \"es\", \"es-ca\", \"es-eu\", \"es-gl\", \"fi\", \"fi-sv\", \"fr\", \"ga\", \"gf\", \"gn\", \"gp\", \"gr\", \"hk\", \"hr\", \"hu\", \"id\", \"ie\", \"ie-ga\", \"il\", \"il-ar\", \"il-ru\", \"in\", \"iq\", \"iq-ku\", \"ir\", \"is\", \"it\", \"jp\", \"ke\", \"ke-sw\", \"kh\", \"kr\", \"kw\", \"kz\", \"kz-kk\", \"lb\", \"lk\", \"lk-ta\", \"lu\", \"lu-de\", \"lu-lb\", \"lv\", \"ma\", \"ma-es\", \"ma-fr\", \"mc\", \"md\", \"mf\", \"ml\", \"mn\", \"mo\", \"mo-zh\", \"mq\", \"mr\", \"mt\", \"mt-mt\", \"mu\", \"mx\", \"my\", \"nc\", \"nl\", \"no\", \"nz\", \"nz-mi\", \"pa\", \"pe\", \"pf\", \"ph\", \"ph-tl\", \"pl\", \"pm\", \"pt\", \"qa\", \"re\", \"ro\", \"rs\", \"ru\", \"sa\", \"se\", \"sg\", \"sg-ms\", \"sg-ta\", \"sg-zh\", \"si\", \"sk\", \"sn\", \"sy\", \"th\", \"tn\", \"tr\", \"tw\", \"tz\", \"tz-sw\", \"ua\", \"uk\", \"us\", \"ve\", \"vn\", \"vu\", \"vu-bi\", \"world\", \"ye\", \"yt\", \"za\", \"za-af\", \"za-nr\", \"za-ss\", \"za-st\", \"za-tn\", \"za-ts\", \"za-ve\", \"za-xh\", \"za-zu\"]\n```\n\n## Development\n\nAfter checking out the repo, run `bin/setup` to install dependencies. Then, run `bin/console` for an interactive prompt that will allow you to experiment.\n\nTo install this gem onto your local machine, run `bundle exec rake install`. To release a new version, update the version number in `version.rb`, and then run `bundle exec rake release` to create a git tag for the version, push git commits and tags, and push the `.gem` file to [rubygems.org](https://rubygems.org).\n\n## Contributing\n\n1. Fork it ( https://github.com/openfoodfacts/openfoodfacts-ruby/fork )\n2. Create your feature branch (`git checkout -b my-new-feature`)\n3. Commit your changes (`git commit -am 'Add some feature'`)\n4. Push to the branch (`git push origin my-new-feature`)\n5. Create a new Pull Request\n\n\n\n## Third party applications\nIf you use this SDK, feel free to open a PR to add your application in this list.\n\n## Authors\n\n","project_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fopenfoodfacts%2Fopenfoodfacts-ruby","html_url":"https://awesome.ecosyste.ms/projects/github.com%2Fopenfoodfacts%2Fopenfoodfacts-ruby","lists_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fopenfoodfacts%2Fopenfoodfacts-ruby/lists"}