{"id":17125307,"url":"https://github.com/astrochun/voxcharta-my-voting-record","last_synced_at":"2026-05-06T18:32:09.704Z","repository":{"id":40449724,"uuid":"323445846","full_name":"astrochun/voxcharta-my-voting-record","owner":"astrochun","description":"A Python tool to extract information from VoxCharta My Voting Records HTML","archived":false,"fork":false,"pushed_at":"2022-05-07T23:35:32.000Z","size":49,"stargazers_count":2,"open_issues_count":0,"forks_count":0,"subscribers_count":1,"default_branch":"main","last_synced_at":"2025-06-01T06:36:38.386Z","etag":null,"topics":["beautifulsoup4","csv","json","pandas","python","voxcharta","webscraping"],"latest_commit_sha":null,"homepage":"","language":"Python","has_issues":true,"has_wiki":null,"has_pages":null,"mirror_url":null,"source_name":null,"license":"gpl-3.0","status":null,"scm":"git","pull_requests_enabled":true,"icon_url":"https://github.com/astrochun.png","metadata":{"files":{"readme":"README.md","changelog":null,"contributing":null,"funding":".github/FUNDING.yml","license":"LICENSE","code_of_conduct":null,"threat_model":null,"audit":null,"citation":null,"codeowners":null,"security":null,"support":null},"funding":{"github":"astrochun"}},"created_at":"2020-12-21T20:55:48.000Z","updated_at":"2022-04-12T21:05:15.000Z","dependencies_parsed_at":"2022-08-09T20:50:41.553Z","dependency_job_id":null,"html_url":"https://github.com/astrochun/voxcharta-my-voting-record","commit_stats":null,"previous_names":[],"tags_count":8,"template":false,"template_full_name":null,"purl":"pkg:github/astrochun/voxcharta-my-voting-record","repository_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/astrochun%2Fvoxcharta-my-voting-record","tags_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/astrochun%2Fvoxcharta-my-voting-record/tags","releases_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/astrochun%2Fvoxcharta-my-voting-record/releases","manifests_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/astrochun%2Fvoxcharta-my-voting-record/manifests","owner_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners/astrochun","download_url":"https://codeload.github.com/astrochun/voxcharta-my-voting-record/tar.gz/refs/heads/main","sbom_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/astrochun%2Fvoxcharta-my-voting-record/sbom","scorecard":{"id":213600,"data":{"date":"2025-08-11","repo":{"name":"github.com/astrochun/voxcharta-my-voting-record","commit":"d94f61bd6ba138f8f4ad94696af26c11c8d83e26"},"scorecard":{"version":"v5.2.1-40-gf6ed084d","commit":"f6ed084d17c9236477efd66e5b258b9d4cc7b389"},"score":3.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":"Code-Review","score":0,"reason":"Found 0/10 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":"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":"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/build.yml:1","Warn: no topLevel permission defined: .github/workflows/create-release.yml:1","Warn: no topLevel permission defined: .github/workflows/linting.yml:1","Warn: no topLevel permission defined: .github/workflows/pypi-publish.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":"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/build.yml:14: update your workflow using https://app.stepsecurity.io/secureworkflow/astrochun/voxcharta-my-voting-record/build.yml/main?enable=pin","Warn: GitHub-owned GitHubAction not pinned by hash: .github/workflows/build.yml:16: update your workflow using https://app.stepsecurity.io/secureworkflow/astrochun/voxcharta-my-voting-record/build.yml/main?enable=pin","Warn: GitHub-owned GitHubAction not pinned by hash: .github/workflows/create-release.yml:16: update your workflow using https://app.stepsecurity.io/secureworkflow/astrochun/voxcharta-my-voting-record/create-release.yml/main?enable=pin","Warn: GitHub-owned GitHubAction not pinned by hash: .github/workflows/create-release.yml:21: update your workflow using https://app.stepsecurity.io/secureworkflow/astrochun/voxcharta-my-voting-record/create-release.yml/main?enable=pin","Warn: GitHub-owned GitHubAction not pinned by hash: .github/workflows/linting.yml:10: update your workflow using https://app.stepsecurity.io/secureworkflow/astrochun/voxcharta-my-voting-record/linting.yml/main?enable=pin","Warn: third-party GitHubAction not pinned by hash: .github/workflows/linting.yml:12: update your workflow using https://app.stepsecurity.io/secureworkflow/astrochun/voxcharta-my-voting-record/linting.yml/main?enable=pin","Warn: third-party GitHubAction not pinned by hash: .github/workflows/linting.yml:19: update your workflow using https://app.stepsecurity.io/secureworkflow/astrochun/voxcharta-my-voting-record/linting.yml/main?enable=pin","Warn: GitHub-owned GitHubAction not pinned by hash: .github/workflows/pypi-publish.yml:20: update your workflow using https://app.stepsecurity.io/secureworkflow/astrochun/voxcharta-my-voting-record/pypi-publish.yml/main?enable=pin","Warn: GitHub-owned GitHubAction not pinned by hash: .github/workflows/pypi-publish.yml:22: update your workflow using https://app.stepsecurity.io/secureworkflow/astrochun/voxcharta-my-voting-record/pypi-publish.yml/main?enable=pin","Warn: third-party GitHubAction not pinned by hash: .github/workflows/pypi-publish.yml:32: update your workflow using https://app.stepsecurity.io/secureworkflow/astrochun/voxcharta-my-voting-record/pypi-publish.yml/main?enable=pin","Warn: third-party GitHubAction not pinned by hash: .github/workflows/pypi-publish.yml:38: update your workflow using https://app.stepsecurity.io/secureworkflow/astrochun/voxcharta-my-voting-record/pypi-publish.yml/main?enable=pin","Warn: pipCommand not pinned by hash: .github/workflows/build.yml:21","Warn: pipCommand not pinned by hash: .github/workflows/pypi-publish.yml:27","Info:   0 out of   7 GitHub-owned GitHubAction dependencies pinned","Info:   0 out of   4 third-party GitHubAction dependencies pinned","Info:   0 out of   2 pipCommand 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":"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":"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":"License","score":10,"reason":"license file detected","details":["Info: project has a license file: LICENSE:0","Info: FSF or OSI recognized license: GNU General Public License v3.0: LICENSE: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 'main'"],"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-17T01:12:07.985Z","repository_id":40449724,"created_at":"2025-08-17T01:12:07.986Z","updated_at":"2025-08-17T01:12:07.986Z"},"host":{"name":"GitHub","url":"https://github.com","kind":"github","repositories_count":273867460,"owners_count":25182423,"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","status":"online","status_checked_at":"2025-09-06T02:00:13.247Z","response_time":2576,"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":["beautifulsoup4","csv","json","pandas","python","voxcharta","webscraping"],"created_at":"2024-10-14T18:44:39.468Z","updated_at":"2026-05-06T18:32:09.646Z","avatar_url":"https://github.com/astrochun.png","language":"Python","funding_links":["https://github.com/sponsors/astrochun"],"categories":[],"sub_categories":[],"readme":"# voxcharta-my-voting-record\n\n[![Python build](https://github.com/astrochun/voxcharta-my-voting-record/actions/workflows/build.yml/badge.svg)](https://github.com/astrochun/voxcharta-my-voting-record/actions/workflows/build.yml)\n[![Linting](https://github.com/astrochun/voxcharta-my-voting-record/actions/workflows/linting.yml/badge.svg)](https://github.com/astrochun/voxcharta-my-voting-record/actions/workflows/linting.yml)\n![PyPI - Python Version](https://img.shields.io/pypi/pyversions/voxcharta-my-voting-record)\n[![PyPI](https://img.shields.io/pypi/v/voxcharta-my-voting-record?color=blue)](https://pypi.org/project/voxcharta-my-voting-record/)\n[![License](https://img.shields.io/github/license/astrochun/voxcharta-my-voting-record?color=blue)](https://github.com/astrochun/voxcharta-my-voting-record/blob/ci/28_build_test/LICENSE)\n[![Code style: black](https://img.shields.io/badge/code%20style-black-000000.svg)](https://github.com/psf/black)\n\n![PyPI - Downloads](https://img.shields.io/pypi/dm/voxcharta-my-voting-record?color=light%20green\u0026label=pypi-download\u0026style=flat-square)\n\n- [Overview](#overview)\n- [Getting Started](#getting-started)\n    - [Requirements](#requirements)\n    - [Installation Instructions](#installation-instructions)\n- [Vox Charta Data Export](#vox-charta-data-export)\n- [Execution](#execution)\n- [Versioning](#versioning)\n- [Authors](#authors)\n- [License](#license)\n\n--------------\n\n## Overview\n\nThis pure Python tool web scrapes data from [Vox Charta](https://voxcharta.org)'s\n[My Voting Records page](https://voxcharta.org/tools/my-voting-record/).\nIt provides the data contents in two forms, a non-relational JSON file\nand relational CSV file.\n\nThis software was driven by the need to archive such records since Vox Charta\nwill be sunsetted on December 31, 2020.\n\n\n## Getting Started\n\nThese instructions will have the code running.\n\n\n### Requirements\n\nThis software is tested with 3.10.2, the latest version available during recent development.\nIn principle it should work with \u003e=3.7.  It requires `BeautifulSoup4` and `pandas`.\n\n\n### Installation Instructions\n\n#### Python and setting up an environment\n\nUsing your preferred Python environment manager (`conda`, `virtualenv`, `venv`),\nI recommend create a separate environment to avoid any possible conflicts with\nexisting software that you used. Below are `conda` instructions\n\n```:\n$ (sudo) conda create -n voxcharta python=3.10.2\n```\n\nInstallation is straightforward:\n\n```\n$ conda activate voxcharta\n$ (sudo) pip install voxcharta-my-voting-record\n```\n\nOr from source:\n\n```\n$ conda activate voxcharta\n$ git clone https://github.com/astrochun/voxcharta-my-voting-record.git\n$ cd voxcharta-my-voting-record\n$ (sudo) pip install .\n```\n\nFor editable/development installation, execute `(sudo) pip install -e .`\nThis is preferred over the `python setup.py` method as certain dependencies (`numpy`) will fail to install during the build process.\n\n## Vox Charta Data Export\n\nBefore using this software, you will want to export your Vox Charta My Voting Records\npage. Here are the steps. These are based on Chrome, so differences may occur for other browsers:\n\n1. [Login to Vox Charta](https://voxcharta.org/wp-login.php) before you can't!\n2. Click on \"Tools \u003e My Voting Records\"\n3. After the page fully loads (this can take some time), click \"File \u003e Save Page As\"\n4. Change filename to \"myvotingrecords\"\n5. For format, select \"Webpage, Complete\"\n\n## Execution\n\nThe primary script to execute is [`vox_run`](bin/vox_run)\n\nExecution requires only one argument, which is the full path\nto the HTML file.\n\n```\n$ vox_run /full/path/to/myvotingrecords.htm\n```\n\nThis is all possible using [`Typer`](https://typer.tiangolo.com/).\nThe script provides rich-formatted log messages to the terminal using [`Rich`](https://rich.readthedocs.io/).\n\nAll contents are stored in `/full/path/to` unless `outfile_prefix` is specified\nwith a different path. Thus, without specifying `outfile_prefix` the above execution\nwill generate:\n\n - JSON: `/full/path/to/myvotingrecords.json`\n - CSV: `/full/path/to/myvotingrecords.csv`\n\nA log file is constructed: `/full/path/to/vox_run.YYYY-MM-DD.log`\n\n## Versioning\n\nWe use [SemVer](http://semver.org/) for versioning. For the versions available,\nsee the [releases on this repository](https://github.com/astrochun/voxcharta-my-voting-record/releases).\n\n\n## Authors\n\n* Chun Ly, Ph.D. ([@astrochun](http://www.github.com/astrochun))\n\n\n## License\n\nThis project is licensed under the [GNU GPLv3 License](https://www.gnu.org/licenses/gpl-3.0.en.html) - see the [LICENSE](LICENSE) file for details.\n","project_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fastrochun%2Fvoxcharta-my-voting-record","html_url":"https://awesome.ecosyste.ms/projects/github.com%2Fastrochun%2Fvoxcharta-my-voting-record","lists_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fastrochun%2Fvoxcharta-my-voting-record/lists"}