{"id":13484473,"url":"https://github.com/feedjira/feedjira","last_synced_at":"2026-10-19T09:10:24.564Z","repository":{"id":482788,"uuid":"108536","full_name":"feedjira/feedjira","owner":"feedjira","description":"A feed parsing library","archived":false,"fork":false,"pushed_at":"2026-09-14T16:29:27.000Z","size":4135,"stargazers_count":2100,"open_issues_count":19,"forks_count":366,"subscribers_count":32,"default_branch":"main","last_synced_at":"2026-10-16T16:10:48.586Z","etag":null,"topics":["feed-parsing","parser","rss","rss-parser"],"latest_commit_sha":null,"homepage":"","language":"Ruby","has_issues":true,"has_wiki":null,"has_pages":null,"mirror_url":null,"source_name":null,"license":"other","status":null,"scm":"git","pull_requests_enabled":true,"icon_url":"https://github.com/feedjira.png","metadata":{"files":{"readme":"README.md","changelog":"CHANGELOG.md","contributing":null,"funding":null,"license":"LICENSE","code_of_conduct":"CODE_OF_CONDUCT.md","threat_model":null,"audit":null,"citation":null,"codeowners":null,"security":null,"support":null,"governance":null,"roadmap":null,"authors":null,"dei":null,"publiccode":null,"codemeta":null,"zenodo":null,"notice":null,"maintainers":null,"copyright":null,"agents":null,"claude":null,"gemini":null,"cursor":null,"copilot":".github/copilot-instructions.md","dco":null,"cla":null,"disclosure":null}},"created_at":"2009-01-16T04:02:30.000Z","updated_at":"2026-10-13T15:29:05.000Z","dependencies_parsed_at":"2026-09-15T01:32:24.213Z","dependency_job_id":null,"html_url":"https://github.com/feedjira/feedjira","commit_stats":{"total_commits":622,"total_committers":95,"mean_commits":"6.5473684210526315","dds":0.7877813504823151,"last_synced_commit":"f93ec3a5fc76fb4baa168ed29051a1af17625e0f"},"previous_names":["pauldix/feedzirra"],"tags_count":50,"template":false,"template_full_name":null,"purl":"pkg:github/feedjira/feedjira","repository_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/feedjira%2Ffeedjira","tags_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/feedjira%2Ffeedjira/tags","releases_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/feedjira%2Ffeedjira/releases","manifests_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/feedjira%2Ffeedjira/manifests","owner_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners/feedjira","download_url":"https://codeload.github.com/feedjira/feedjira/tar.gz/refs/heads/main","sbom_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/feedjira%2Ffeedjira/sbom","scorecard":{"id":395626,"data":{"date":"2025-08-11","repo":{"name":"github.com/feedjira/feedjira","commit":"40a1c90e802d618c4d03d826bf1f114b69265e5b"},"scorecard":{"version":"v5.2.1-40-gf6ed084d","commit":"f6ed084d17c9236477efd66e5b258b9d4cc7b389"},"score":4.8,"checks":[{"name":"Packaging","score":-1,"reason":"packaging workflow not detected","details":["Warn: no GitHub/GitLab publishing workflow detected."],"documentation":{"short":"Determines if the project is published as a package that others can easily download, install, easily update, and uninstall.","url":"https://github.com/ossf/scorecard/blob/f6ed084d17c9236477efd66e5b258b9d4cc7b389/docs/checks.md#packaging"}},{"name":"Code-Review","score":5,"reason":"Found 4/7 approved changesets -- score normalized to 5","details":null,"documentation":{"short":"Determines if the project requires human code review before pull requests (aka merge requests) are merged.","url":"https://github.com/ossf/scorecard/blob/f6ed084d17c9236477efd66e5b258b9d4cc7b389/docs/checks.md#code-review"}},{"name":"Dangerous-Workflow","score":10,"reason":"no dangerous workflow patterns detected","details":null,"documentation":{"short":"Determines if the project's GitHub Action workflows avoid dangerous patterns.","url":"https://github.com/ossf/scorecard/blob/f6ed084d17c9236477efd66e5b258b9d4cc7b389/docs/checks.md#dangerous-workflow"}},{"name":"Token-Permissions","score":0,"reason":"detected GitHub workflow tokens with excessive permissions","details":["Warn: no topLevel permission defined: .github/workflows/ruby.yml:1","Info: no jobLevel write permissions found"],"documentation":{"short":"Determines if the project's workflows follow the principle of least privilege.","url":"https://github.com/ossf/scorecard/blob/f6ed084d17c9236477efd66e5b258b9d4cc7b389/docs/checks.md#token-permissions"}},{"name":"Maintained","score":5,"reason":"6 commit(s) and 0 issue activity found in the last 90 days -- score normalized to 5","details":null,"documentation":{"short":"Determines if the project is \"actively maintained\".","url":"https://github.com/ossf/scorecard/blob/f6ed084d17c9236477efd66e5b258b9d4cc7b389/docs/checks.md#maintained"}},{"name":"Binary-Artifacts","score":10,"reason":"no binaries found in the repo","details":null,"documentation":{"short":"Determines if the project has generated executable (binary) artifacts in the source repository.","url":"https://github.com/ossf/scorecard/blob/f6ed084d17c9236477efd66e5b258b9d4cc7b389/docs/checks.md#binary-artifacts"}},{"name":"Pinned-Dependencies","score":0,"reason":"dependency not pinned by hash detected -- score normalized to 0","details":["Warn: GitHub-owned GitHubAction not pinned by hash: .github/workflows/ruby.yml:29: update your workflow using https://app.stepsecurity.io/secureworkflow/feedjira/feedjira/ruby.yml/main?enable=pin","Warn: third-party GitHubAction not pinned by hash: .github/workflows/ruby.yml:32: update your workflow using https://app.stepsecurity.io/secureworkflow/feedjira/feedjira/ruby.yml/main?enable=pin","Info:   0 out of   1 GitHub-owned GitHubAction dependencies pinned","Info:   0 out of   1 third-party GitHubAction dependencies pinned"],"documentation":{"short":"Determines if the project has declared and pinned the dependencies of its build process.","url":"https://github.com/ossf/scorecard/blob/f6ed084d17c9236477efd66e5b258b9d4cc7b389/docs/checks.md#pinned-dependencies"}},{"name":"CII-Best-Practices","score":0,"reason":"no effort to earn an OpenSSF best practices badge detected","details":null,"documentation":{"short":"Determines if the project has an OpenSSF (formerly CII) Best Practices Badge.","url":"https://github.com/ossf/scorecard/blob/f6ed084d17c9236477efd66e5b258b9d4cc7b389/docs/checks.md#cii-best-practices"}},{"name":"Security-Policy","score":0,"reason":"security policy file not detected","details":["Warn: no security policy file detected","Warn: no security file to analyze","Warn: no security file to analyze","Warn: no security file to analyze"],"documentation":{"short":"Determines if the project has published a security policy.","url":"https://github.com/ossf/scorecard/blob/f6ed084d17c9236477efd66e5b258b9d4cc7b389/docs/checks.md#security-policy"}},{"name":"Vulnerabilities","score":10,"reason":"0 existing vulnerabilities detected","details":null,"documentation":{"short":"Determines if the project has open, known unfixed vulnerabilities.","url":"https://github.com/ossf/scorecard/blob/f6ed084d17c9236477efd66e5b258b9d4cc7b389/docs/checks.md#vulnerabilities"}},{"name":"License","score":9,"reason":"license file detected","details":["Info: project has a license file: LICENSE:0","Warn: project license file does not contain an FSF or OSI license."],"documentation":{"short":"Determines if the project has defined a license.","url":"https://github.com/ossf/scorecard/blob/f6ed084d17c9236477efd66e5b258b9d4cc7b389/docs/checks.md#license"}},{"name":"Fuzzing","score":0,"reason":"project is not fuzzed","details":["Warn: no fuzzer integrations found"],"documentation":{"short":"Determines if the project uses fuzzing.","url":"https://github.com/ossf/scorecard/blob/f6ed084d17c9236477efd66e5b258b9d4cc7b389/docs/checks.md#fuzzing"}},{"name":"Signed-Releases","score":-1,"reason":"no releases found","details":null,"documentation":{"short":"Determines if the project cryptographically signs release artifacts.","url":"https://github.com/ossf/scorecard/blob/f6ed084d17c9236477efd66e5b258b9d4cc7b389/docs/checks.md#signed-releases"}},{"name":"Branch-Protection","score":-1,"reason":"internal error: error during branchesHandler.setup: internal error: githubv4.Query: Resource not accessible by integration","details":null,"documentation":{"short":"Determines if the default and release branches are protected with GitHub's branch protection settings.","url":"https://github.com/ossf/scorecard/blob/f6ed084d17c9236477efd66e5b258b9d4cc7b389/docs/checks.md#branch-protection"}},{"name":"SAST","score":0,"reason":"SAST tool is not run on all commits -- score normalized to 0","details":["Warn: 0 commits out of 30 are checked with a SAST tool"],"documentation":{"short":"Determines if the project uses static code analysis.","url":"https://github.com/ossf/scorecard/blob/f6ed084d17c9236477efd66e5b258b9d4cc7b389/docs/checks.md#sast"}}]},"last_synced_at":"2025-08-18T18:56:13.487Z","repository_id":482788,"created_at":"2025-08-18T18:56:13.488Z","updated_at":"2025-08-18T18:56:13.488Z"},"host":{"name":"GitHub","url":"https://github.com","kind":"github","repositories_count":344872684,"owners_count":38352879,"icon_url":"https://github.com/github.png","version":null,"created_at":"2022-05-30T11:31:42.601Z","updated_at":"2026-10-03T21:59:58.778Z","status":"online","status_checked_at":"2026-10-19T02:00:06.414Z","response_time":53,"last_error":null,"robots_txt_status":"success","robots_txt_updated_at":"2025-07-24T06:49:26.215Z","robots_txt_url":"https://github.com/robots.txt","online":true,"can_crawl_api":true,"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":["feed-parsing","parser","rss","rss-parser"],"created_at":"2024-07-31T17:01:24.941Z","updated_at":"2026-10-19T09:10:24.245Z","avatar_url":"https://github.com/feedjira.png","language":"Ruby","funding_links":[],"categories":["Ruby","RSS"],"sub_categories":[],"readme":"# Feedjira\n\n[![Build Status][actions-badge]][actions] [![Code Climate][code-climate-badge]][code-climate]\n\n[actions-badge]: https://github.com/feedjira/feedjira/actions/workflows/ruby.yml/badge.svg?branch=main\n[actions]: https://github.com/feedjira/feedjira/actions?query=branch%3Amain\n[code-climate-badge]: https://codeclimate.com/github/feedjira/feedjira/badges/gpa.svg\n[code-climate]: https://codeclimate.com/github/feedjira/feedjira\n[gitter-badge]: https://badges.gitter.im/feedjira/feedjira.svg\n\nFeedjira is a Ruby library designed to parse feeds.\n\n## Installation\n\nAdd this line to your application's Gemfile:\n\n```ruby\ngem \"feedjira\"\n```\n\n## Parsing\n\nAn example of parsing a feed with Feedjira:\n\n```ruby\nxml = HTTParty.get(url).body\nfeed = Feedjira.parse(xml)\nfeed.entries.first.title\n# =\u003e \"Announcing version 3.0\"\n```\n\n## Specifying parser\n\nIf you have the XML and just want to provide a parser class for one parse, you\ncan specify that using `parse` with the parser option:\n\n```ruby\nFeedjira.parse(xml, parser: MyAwesomeParser)\n```\n\n## Adding attributes to all feeds types / all entries types\n\n```ruby\n# Add the generator attribute to all feed types\nFeedjira::Feed.add_common_feed_element(\"generator\")\nxml = HTTParty.get(\"http://www.pauldix.net/atom.xml\").body\nFeedjira.parse(xml).generator\n# =\u003e \"TypePad\"\n```\n\n## Adding attributes to only one class\n\nIf you want to add attributes for only one class you simply have to declare them\nin the class\n\n```ruby\n# Add some GeoRss information\nclass Feedjira::Parser::RSSEntry\n  element \"georss:elevation\", as: :elevation\nend\n\n# Fetch a feed containing GeoRss info and print them\nurl = \"https://earthquake.usgs.gov/earthquakes/feed/v1.0/summary/significant_week.atom\"\nxml = HTTParty.get(url).body\nFeedjira.parse(xml).entries.each do |entry|\n  puts \"Elevation: #{entry.elevation}\"\nend\n```\n\n## Configuration\n\n### Parsers\n\n#### Adding a custom parser\n\nYou can insert your own parser at the front of the available parser list by:\n\n```ruby\nFeedjira.configure do |config|\n  config.parsers.unshift(MyAwesomeParser)\nend\n```\n\nNow when you call `Feedjira.parse`, `MyAwesomeParser` will be the first one to\nget a chance to parse the feed.\n\n#### Explicitly set all available parsers\n\nFeedjira can be configured to use a specific set of parsers and in a specific order:\n\n```ruby\nFeedjira.configure do |config|\n  config.parsers = [\n    Feedjira::Parser::ITunesRSS,\n    MyAwesomeParser,\n    Feedjira::Parser::RSS\n  ]\nend\n```\n\n#### Stripping whitespace from XML\n\nFeedjira can be configured to strip all whitespace but defaults to lstrip only:\n\n```ruby\nFeedjira.configure do |config|\n  config.strip_whitespace = true\nend\n```\n\n## Contributing\n\nBug reports and pull requests are welcome on GitHub at\nhttps://github.com/feedjira/feedjira. This project is intended to be a safe,\nwelcoming space for collaboration, and contributors are expected to adhere to\nthe [Contributor Covenant](http://contributor-covenant.org) code of conduct.\n\n## Projects that use Feedjira\n\nFeedjira is used in some awesome projects around the web - from RSS readers to\nadd-ons and everything in between. Here are some of them:\n\n* [Feedbin][]: Feedbin bills itself as a fast, simple RSS reader that delivers a\n  great reading experience. It's a paid RSS reader that integrates with mobile\n  apps and it even has a fully featured API!\n\n* [Stringer][]: Stringer is a self-hosted, anti-social RSS reader. It's an\n  open-source project that's easy to deploy to any host, there's even a\n  one-click button to deploy on Heroku.\n\n* [BlogFeeder][]: BlogFeeder is a paid Shopify App that makes it easy for you to\n  import any external blog into your Shopify store. It helps improve your\n  store's SEO and keeps your blogs in sync, plus a lot more.\n\n* [Feedbunch][]: Feedbunch is an open source feed reader built to fill the hole\n  left by Google Reader. It aims to support all features of Google Reader and\n  actually improve on others.\n\n* [The Old Reader][old]: The Old Reader advertises as the ultimate social RSS\n  reader. It's free to start and also has a paid premium version. There's an API\n  and it integrates with many different mobile apps.\n\n* [Solve for All][solve]: Solve for All combines search engine and feed parsing\n  while protecting your privacy. It's even extendable by the community!\n  \n* [Feedi API][feedi]: Feedi simplifies how you handle RSS, Atom, or JSON feeds. You can add and keep track of your favourite           feed data with a simple and clean REST API. All entries are enriched by Machine Learning and Semantic engines.\n\n* [Breaker][breaker]: The social podcast app\n\n* [Huginn][huginn]: Huginn is a system for building agents that perform automated tasks for you online.\n\n[Feedbin]: https://feedbin.com/\n[Stringer]: https://github.com/swanson/stringer\n[BlogFeeder]: https://apps.shopify.com/blogfeeder\n[Feedbunch]: https://github.com/amatriain/feedbunch\n[old]: http://theoldreader.com/\n[solve]: https://solveforall.com/\n[feedi]: https://github.com/davidesantangelo/feedi\n[breaker]: https://breaker.audio\n[huginn]: https://github.com/huginn/huginn\n\nNote: to get your project on this list, simply [send an email](mailto:feedjira@gmail.com)\nwith your project's details.\n","project_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Ffeedjira%2Ffeedjira","html_url":"https://awesome.ecosyste.ms/projects/github.com%2Ffeedjira%2Ffeedjira","lists_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Ffeedjira%2Ffeedjira/lists"}