{"id":19874210,"url":"https://github.com/pythoninthegrass/cl_auto","last_synced_at":"2025-11-24T04:07:02.840Z","repository":{"id":85073707,"uuid":"367477676","full_name":"pythoninthegrass/cl_auto","owner":"pythoninthegrass","description":"Pulls Craigslist auto listings","archived":false,"fork":false,"pushed_at":"2022-01-23T03:59:13.000Z","size":51,"stargazers_count":1,"open_issues_count":0,"forks_count":0,"subscribers_count":2,"default_branch":"main","last_synced_at":"2025-01-11T16:50:30.862Z","etag":null,"topics":[],"latest_commit_sha":null,"homepage":null,"language":"Python","has_issues":true,"has_wiki":null,"has_pages":null,"mirror_url":null,"source_name":null,"license":null,"status":null,"scm":"git","pull_requests_enabled":true,"icon_url":"https://github.com/pythoninthegrass.png","metadata":{"files":{"readme":"README.md","changelog":null,"contributing":null,"funding":null,"license":null,"code_of_conduct":null,"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}},"created_at":"2021-05-14T20:56:18.000Z","updated_at":"2021-12-12T10:21:21.000Z","dependencies_parsed_at":"2023-03-03T01:00:45.601Z","dependency_job_id":null,"html_url":"https://github.com/pythoninthegrass/cl_auto","commit_stats":null,"previous_names":[],"tags_count":0,"template":false,"template_full_name":null,"repository_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/pythoninthegrass%2Fcl_auto","tags_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/pythoninthegrass%2Fcl_auto/tags","releases_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/pythoninthegrass%2Fcl_auto/releases","manifests_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/pythoninthegrass%2Fcl_auto/manifests","owner_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners/pythoninthegrass","download_url":"https://codeload.github.com/pythoninthegrass/cl_auto/tar.gz/refs/heads/main","host":{"name":"GitHub","url":"https://github.com","kind":"github","repositories_count":241301906,"owners_count":19940729,"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":[],"created_at":"2024-11-12T16:22:19.759Z","updated_at":"2025-11-24T04:06:57.801Z","avatar_url":"https://github.com/pythoninthegrass.png","language":"Python","readme":"# cl_auto\r\n Pulls Craigslist auto listings\r\n\r\n## Setup\r\n### python\r\n```bash\r\n# macOS\r\nbrew install pyenv\r\n\r\n# *nix\r\ncurl https://pyenv.run | bash\r\necho 'export PYENV_ROOT=\"$HOME/.pyenv\"' \u003e\u003e ~/.bashrc\r\necho 'export PATH=\"$PYENV_ROOT/bin:$PATH\"' \u003e\u003e ~/.bashrc\r\necho 'eval \"$(pyenv init --path)\"' \u003e\u003e ~/.bashrc\r\n\r\n# python3.9\r\npyenv install 3.9.0\r\npyenv local 3.9.0\r\nln -s ~/.pyenv/versions/3.9.0/bin/python3.9 /usr/local/bin/python3.9\r\n```\r\n### pipenv\r\n```bash\r\n# new install (automatically installs python version via pyenv)\r\npip install --user pipenv\r\npipenv install\r\n\r\n# playwright\r\n# See sources for WSL setup\r\npipenv run playwright install\r\n\r\n# updated dependencies (under virtual environment)\r\npipenv sync\r\n\r\n# switched python versions, debugging (e.g., Pipfile.lock `Locking Failed!`)\r\n# pipenv lock --clear\r\n# pipenv install --skip-lock\r\npipenv --rm\r\npipenv install\r\n```\r\n\r\n## Usage\r\n```bash\r\n# activate virtualenv\r\n$ pipenv shell\r\n\r\n# run python script\r\n(cl_auto) $ python cl_auto.py\r\n\r\n# deactivate virtualenv\r\n(cl_auto) $ exit\r\n```\r\n\r\n## Development\r\n* Install `asdf`\r\n```bash\r\n# install asdf\r\ngit clone https://github.com/asdf-vm/asdf.git ~/.asdf\r\ncd ~/.asdf\r\ngit checkout \"$(git describe --abbrev=0 --tags)\"\r\n\r\n# ~/.bashrc\r\n. $HOME/.asdf/asdf.sh\r\n. $HOME/.asdf/completions/asdf.bash\r\n```\r\n* Install `node`\r\n```bash\r\n# install npm and node\r\ncurl -L https://git.io/n-install | N_PREFIX=~/.n bash -s -- -y\r\n\r\n# ~/.bashrc (added automatically via `n-install`)\r\n# export N_PREFIX=\"$HOME/.n\"; [[ :$PATH: == *\":$N_PREFIX/bin:\"* ]] || PATH+=\":$N_PREFIX/bin\"\r\n\r\n# rm -rf\r\nnpm install rimraf --global\r\n\r\n\r\n```\r\n* Install terraform\r\n```bash\r\nasdf plugin add terraform\r\nasdf plugin list\r\n```\r\n* Install Docker Desktop for Windows[\u003csup\u003e1\u003c/sup\u003e](#1)\r\n* Generate dependencies list: `pipenv lock --requirements \u003e requirements.txt`\r\n\r\n## TODO\r\n* Update instructions\r\n    * Mix and match from `jss_migrator` README.md\r\n* Loop through `url` column and open each page in Playwright\r\n    * ~~Keep Playwright open until each tab is closed~~ (timeout or ctrl-c workaround)\r\n    * Headless option (i.e., don't open Playwright window, just capture results)\r\n* [Dockerize script](https://github.com/pythoninthegrass/docker-python)\r\n    * Test new `Dockerfile` (requirements.txt, `COPY /ms-playwright ...`) \r\n* [argparse](https://realpython.com/command-line-interfaces-python-argparse/)\r\n* Add SMTP\r\n    * Google API account for mail server\r\n    * Email csv\r\n* Cron job to mail results weekly\r\n* Convert to k8s pod\r\n* Deploy to web host (e.g., AWS, Digital Ocean)\r\n\r\n## SOURCES\r\n[Enable GUIs on Windows Subsystem Linux (WSL) · Scott Spence](https://scottspence.com/2020/12/09/gui-with-wsl/#video-detailing-the-process)\r\n\r\n[Using Graphical User Interfaces like Cypress' in WSL2](https://nickymeuleman.netlify.app/blog/gui-on-wsl2-cypress)\r\n\r\n[Protecting X410 Public Access for WSL2 via Windows Defender Firewall - X410.dev](https://x410.dev/cookbook/wsl/protecting-x410-public-access-for-wsl2-via-windows-defender-firewall/)\r\n\r\n[Playwright for Python](https://playwright.dev/python/)\r\n\r\n[web scraping - How do you open multiple pages asynchronously with Playwright Python? - Stack Overflow](https://stackoverflow.com/questions/64664437/how-do-you-open-multiple-pages-asynchronously-with-playwright-python)\r\n\r\n[asdf](https://asdf-vm.com/#/core-manage-asdf)\r\n\r\n[n](https://github.com/tj/n#third-party-installers)\r\n\r\n[How to Set Up Docker in WSL [Step-by-Step]](https://adamtheautomator.com/how-to-set-up-docker-in-wsl-step-by-step/)\u003ca class=\"anchor\" id=\"1\"\u003e\u003c/a\u003e\r\n","funding_links":[],"categories":[],"sub_categories":[],"project_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fpythoninthegrass%2Fcl_auto","html_url":"https://awesome.ecosyste.ms/projects/github.com%2Fpythoninthegrass%2Fcl_auto","lists_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fpythoninthegrass%2Fcl_auto/lists"}