{"id":37618354,"url":"https://github.com/harel/metatron","last_synced_at":"2026-01-16T10:34:53.763Z","repository":{"id":55398871,"uuid":"119518278","full_name":"harel/metatron","owner":"harel","description":"A Python 3.x HTML Meta tag parser, with emphasis on OpenGraph and complex meta tag schemes","archived":false,"fork":false,"pushed_at":"2021-01-02T23:36:06.000Z","size":19,"stargazers_count":5,"open_issues_count":0,"forks_count":1,"subscribers_count":2,"default_branch":"master","last_synced_at":"2025-09-24T23:51:34.086Z","etag":null,"topics":["meta-tags","opengraph","parser","python","python3","twitter-card"],"latest_commit_sha":null,"homepage":"","language":"Python","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/harel.png","metadata":{"files":{"readme":"README.rst","changelog":null,"contributing":null,"funding":null,"license":"LICENSE.txt","code_of_conduct":null,"threat_model":null,"audit":null,"citation":null,"codeowners":null,"security":null,"support":null}},"created_at":"2018-01-30T10:07:55.000Z","updated_at":"2022-11-02T12:37:54.000Z","dependencies_parsed_at":"2022-08-14T23:20:59.054Z","dependency_job_id":null,"html_url":"https://github.com/harel/metatron","commit_stats":null,"previous_names":[],"tags_count":2,"template":false,"template_full_name":null,"purl":"pkg:github/harel/metatron","repository_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/harel%2Fmetatron","tags_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/harel%2Fmetatron/tags","releases_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/harel%2Fmetatron/releases","manifests_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/harel%2Fmetatron/manifests","owner_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners/harel","download_url":"https://codeload.github.com/harel/metatron/tar.gz/refs/heads/master","sbom_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/harel%2Fmetatron/sbom","scorecard":{"id":455729,"data":{"date":"2025-08-11","repo":{"name":"github.com/harel/metatron","commit":"e8d82aa3e000c0682d215396112900ede54a96d6"},"scorecard":{"version":"v5.2.1-40-gf6ed084d","commit":"f6ed084d17c9236477efd66e5b258b9d4cc7b389"},"score":2.4,"checks":[{"name":"Maintained","score":0,"reason":"0 commit(s) and 0 issue activity found in the last 90 days -- score normalized to 0","details":null,"documentation":{"short":"Determines if the project is \"actively maintained\".","url":"https://github.com/ossf/scorecard/blob/f6ed084d17c9236477efd66e5b258b9d4cc7b389/docs/checks.md#maintained"}},{"name":"Pinned-Dependencies","score":-1,"reason":"no dependencies found","details":null,"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":"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":0,"reason":"Found 0/21 approved changesets -- score normalized to 0","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":-1,"reason":"no workflows found","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":"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":"Token-Permissions","score":-1,"reason":"No tokens found","details":null,"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":"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":"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":"License","score":10,"reason":"license file detected","details":["Info: project has a license file: LICENSE.txt:0","Info: FSF or OSI recognized license: MIT License: LICENSE.txt:0"],"documentation":{"short":"Determines if the project has defined a license.","url":"https://github.com/ossf/scorecard/blob/f6ed084d17c9236477efd66e5b258b9d4cc7b389/docs/checks.md#license"}},{"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":0,"reason":"branch protection not enabled on development/release branches","details":["Warn: branch protection not enabled for branch 'master'"],"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":"Vulnerabilities","score":5,"reason":"5 existing vulnerabilities detected","details":["Warn: Project is vulnerable to: PYSEC-2014-14 / GHSA-652x-xj99-gmcc","Warn: Project is vulnerable to: GHSA-9hjg-9r4m-mvj7","Warn: Project is vulnerable to: GHSA-9wx4-h78v-vm56","Warn: Project is vulnerable to: PYSEC-2014-13 / GHSA-cfj3-7x9c-4p3h","Warn: Project is vulnerable to: PYSEC-2018-28 / GHSA-x84v-xcm2-53pg"],"documentation":{"short":"Determines if the project has open, known unfixed vulnerabilities.","url":"https://github.com/ossf/scorecard/blob/f6ed084d17c9236477efd66e5b258b9d4cc7b389/docs/checks.md#vulnerabilities"}},{"name":"SAST","score":0,"reason":"SAST tool is not run on all commits -- score normalized to 0","details":["Warn: 0 commits out of 4 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-19T09:34:46.260Z","repository_id":55398871,"created_at":"2025-08-19T09:34:46.260Z","updated_at":"2025-08-19T09:34:46.260Z"},"host":{"name":"GitHub","url":"https://github.com","kind":"github","repositories_count":286080680,"owners_count":28478050,"icon_url":"https://github.com/github.png","version":null,"created_at":"2022-05-30T11:31:42.601Z","updated_at":"2026-01-16T06:30:42.265Z","status":"ssl_error","status_checked_at":"2026-01-16T06:30:16.248Z","response_time":107,"last_error":"SSL_read: unexpected eof while reading","robots_txt_status":"success","robots_txt_updated_at":"2025-07-24T06:49:26.215Z","robots_txt_url":"https://github.com/robots.txt","online":false,"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":["meta-tags","opengraph","parser","python","python3","twitter-card"],"created_at":"2026-01-16T10:34:53.649Z","updated_at":"2026-01-16T10:34:53.740Z","avatar_url":"https://github.com/harel.png","language":"Python","funding_links":[],"categories":[],"sub_categories":[],"readme":".. image:: https://badge.fury.io/py/metatron.svg\n    :target: https://badge.fury.io/py/metatron\n\nMetatron\n========\n\nHTML Meta tag parser, with emphasis on OpenGraph/Twitter Cards, and\ncomplex (and custom) meta tag schemes. Supports Python 3.x and up.\nThe Metatron object extends dict, and all the meta tag data is set within it.\n\n\nInstallation\n------------\nYou know the drill:\n\n::\n\n    pip install metatron\n\n\nStraight to an example\n----------------------\n\nSimple meta tag collector\n^^^^^^^^^^^^^^^^^^^^^^^^^\n\nThis example collects top level meta tags without a schema:\n\n::\n\n    \u003e mt = Metatron(url='https://www.bbc.co.uk')\n    \u003e mt.traverse()\n\n    {\n        'x-country': 'gb',\n        'x-audience': 'Domestic',\n        'CPS_AUDIENCE': 'Domestic',\n        'CPS_CHANGEQUEUEID': '115204091',\n        'theme-color': 'bb1919',\n        'msapplication-TileColor': '#bb1919'\n    }\n\n    \u003e mt['x-country']\n    \u003e 'gb'\n\nCollect structures OpenGraph meta tags\n^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^\n\n::\n\n    \u003e mt = Metatron(url='https://www.bbc.co.uk', schemas=['og'])\n    \u003e mt.traverse()\n\n    {\n        'og': {\n            'title': 'Home - BBC News',\n            'description': 'Visit BBC News for up-to-the-minute news....',\n            'site_name': 'BBC News',\n            'locale': 'en_GB',\n            'article': {\n                'author': 'https://www.facebook.com/bbcnews',\n                'section': 'Home'\n            },\n            'url': 'http://www.bbc.co.uk/news',\n            'image': '//m.files.bbci.co.uk/modules/bbc-morph-news-waf-page-meta/2.1.0/bbc_news_logo.png'\n        }\n    }\n\nSupports opengraph arrays (and can receive content as input)\n^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^\n\n::\n\n    \u003e content = \"\"\"\n        \u003cmeta property=\"og:title\" content=\"First title tag\" /\u003e\n        \u003cmeta property=\"og:title\" content=\"Second title tag\" /\u003e\n        \u003cmeta property=\"og:description\" content=\"description tag\" /\u003e\n        \u003cmeta property=\"og:image\" content=\"http://example.com/image.jpg\" /\u003e\n        \u003cmeta property=\"og:image:secure_url\" content=\"https://secure.example.com/image.jpg\" /\u003e\n        \u003cmeta property=\"og:image:type\" content=\"image/jpeg\" /\u003e\n        \u003cmeta property=\"og:image:width\" content=\"400\" /\u003e\n        \u003cmeta property=\"og:image:height\" content=\"300\" /\u003e\n        \u003cmeta property=\"og:image:alt\" content=\"First image description\" /\u003e\n        \u003cmeta property=\"og:image\" content=\"http://example.com/image2.jpg\" /\u003e\n        \u003cmeta property=\"og:image:secure_url\" content=\"https://secure.example.com/image.jpg\" /\u003e\n        \u003cmeta property=\"og:image:type\" content=\"image/jpeg\" /\u003e\n        \u003cmeta property=\"og:image:width\" content=\"500\" /\u003e\n        \u003cmeta property=\"og:image:height\" content=\"600\" /\u003e\n        \u003cmeta property=\"og:image:alt\" content=\"Second image description\" /\u003e\n    \"\"\"\n\n    \u003e mt = Metatron(content=content, schemas=['og'])\n    \u003e mt.traverse()\n\n    {\n        'og': {\n            'description': 'description tag',\n            'image': [\n                {\n                    'alt': 'First image descriptoin',\n                    'height': '300',\n                    'image': 'http://example.com/image.jpg',\n                    'secure_url': 'https://secure.example.com/image.jpg',\n                    'type': 'image/jpeg',\n                    'width': '400'\n                },\n                {\n                    'alt': 'A shiny green apple with a bite taken out',\n                    'height': '600',\n                    'image': 'http://example.com/image2.jpg',\n                    'secure_url': 'https://secure.example.com/ogp.jpg',\n                    'type': 'image/jpeg',\n                    'width': '500'\n                }\n            ],\n            'title': [\n                'First title tag',\n                'Second title tag'\n            ]\n        }\n    }\n\nAdd your own meta tag schema\n^^^^^^^^^^^^^^^^^^^^^^^^^^^^\nYou can provide Metatron with your own meta tag schema spec\n\n::\n\n    \u003e from metatron import add_schema_spec\n    \u003e my_spec = {\n        'name': 'boom',\n        'attribute': 'name',\n        'value': 'value'\n    }\n    \u003e add_schema_spec(my_spec)\n\nYou can then parse tags like:\n\n::\n\n    \u003cmeta name=\"boom:title\" value=\"Boom title\" /\u003e\n    \u003cmeta name=\"boom:description\" value=\"Boom description\" /\u003e\n\nUsing\n\n::\n\n    \u003e mt = Metatron(url='http://example.com', schemas=['boom'])\n    \u003e mt.traverse()\n    \u003e {\n        'boom': {\n            'title': 'Boom title',\n            'description': 'Boom description'\n        }\n    }\n\nNote that the `add_schema_spec` call allows for an additional argument to tag the schema as.\nThis is useful if you have multiple schema definitions with the same name (or no name).\n\nCustom schema - custom tag\n^^^^^^^^^^^^^^^^^^^^^^^^^^\nIt is possible to add a `tag` key to the custom schema spec,\nwhich can then lookup different tags other than `meta`.\nIf not provided, `meta` is used by default.\n\n*Added in 0.4*\n\n::\n\n    \u003e from metatron import add_schema_spec\n    \u003e my_spec = {\n        'tag': 'link',\n        'name': '',\n        'attribute': 'rel',\n        'value': 'href'\n    }\n    \u003e # Register the schema as 'link' to avoid duplicating existing no-name schema\n    \u003e add_schema_spec(my_spec, 'link')\n    \u003e content = \"\"\"\n        \u003cmeta property=\"og:title\" content=\"First title tag\" /\u003e\n        \u003cmeta property=\"og::title\" content=\"Second title tag\" /\u003e\n        \u003cmeta property=\"og:description\" content=\"description tag\" /\u003e\n        \u003cmeta property=\"og:image\" content=\"http://example.com/image.jpg\" /\u003e\n\n        \u003clink rel=\"canonical\" href=\"https://example.com/cannonicallink/\" /\u003e\n    \"\"\"\n    \u003e mt = Metatron(content=content, schemas=['link'])\n    \u003e mt.traverse()\n\n\nCan run from the command line\n^^^^^^^^^^^^^^^^^^^^^^^^^^^^^\n\n::\n\n    $ make run URL=http://bbc.co.uk/news SCHEMA=og\n\n    or\n\n    $ python -m metatron.metatron http://bbc.co.uk/news og\n\n    $ Getting: http://bbc.co.uk/news (schemas: og)\n    {'og': {'description': 'Visit BBC News for up-to-the-minute news, breaking '\n                       'news, video, audio and feature stories. BBC News '\n                       'provides trusted World and UK news as well as local '\n                       'and regional perspectives. Also entertainment, '\n                       'business, science, technology and health news.',\n        'image': '//m.files.bbci.co.uk/modules/bbc-morph-news-waf-page-meta/2.2.1/bbc_news_logo.png',\n        'locale': 'en_GB',\n        'section': 'Home',\n        'site_name': 'BBC News',\n        'title': 'Home - BBC News',\n        'type': 'website',\n        'url': 'http://www.bbc.co.uk/news'}}\n\nDependencies\n^^^^^^^^^^^^\n\n-  requests\n-  beautifulsoup4\n","project_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fharel%2Fmetatron","html_url":"https://awesome.ecosyste.ms/projects/github.com%2Fharel%2Fmetatron","lists_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fharel%2Fmetatron/lists"}