{"id":19577126,"url":"https://github.com/wdbm/ovipositor","last_synced_at":"2026-05-07T10:36:10.492Z","repository":{"id":57449967,"uuid":"80960756","full_name":"wdbm/ovipositor","owner":"wdbm","description":"Flask link shortening service","archived":false,"fork":false,"pushed_at":"2018-08-14T18:20:40.000Z","size":1158,"stargazers_count":0,"open_issues_count":0,"forks_count":0,"subscribers_count":1,"default_branch":"master","last_synced_at":"2025-09-30T16:41:32.127Z","etag":null,"topics":["database","database-sqlite","flask","yourls","yourls-database"],"latest_commit_sha":null,"homepage":null,"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/wdbm.png","metadata":{"files":{"readme":"README.md","changelog":null,"contributing":null,"funding":null,"license":"LICENSE","code_of_conduct":null,"threat_model":null,"audit":null,"citation":null,"codeowners":null,"security":null,"support":null}},"created_at":"2017-02-05T01:29:27.000Z","updated_at":"2018-08-14T18:20:41.000Z","dependencies_parsed_at":"2022-09-01T19:13:08.417Z","dependency_job_id":null,"html_url":"https://github.com/wdbm/ovipositor","commit_stats":null,"previous_names":[],"tags_count":0,"template":false,"template_full_name":null,"purl":"pkg:github/wdbm/ovipositor","repository_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/wdbm%2Fovipositor","tags_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/wdbm%2Fovipositor/tags","releases_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/wdbm%2Fovipositor/releases","manifests_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/wdbm%2Fovipositor/manifests","owner_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners/wdbm","download_url":"https://codeload.github.com/wdbm/ovipositor/tar.gz/refs/heads/master","sbom_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/wdbm%2Fovipositor/sbom","scorecard":null,"host":{"name":"GitHub","url":"https://github.com","kind":"github","repositories_count":286080680,"owners_count":32733916,"icon_url":"https://github.com/github.png","version":null,"created_at":"2022-05-30T11:31:42.601Z","updated_at":"2026-05-07T02:14:30.463Z","status":"ssl_error","status_checked_at":"2026-05-07T02:14:29.405Z","response_time":62,"last_error":"SSL_connect returned=1 errno=0 peeraddr=140.82.121.6:443 state=error: 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":["database","database-sqlite","flask","yourls","yourls-database"],"created_at":"2024-11-11T07:04:38.963Z","updated_at":"2026-05-07T10:36:10.475Z","avatar_url":"https://github.com/wdbm.png","language":"Python","funding_links":[],"categories":[],"sub_categories":[],"readme":"# ovipositor\n\nFlask link-shortening service and database system\n\n![](https://raw.githubusercontent.com/wdbm/ovipositor/master/media/ovipositor.png)\n\n# credits\n\n- name by Ellis Kay\n\n# introduction\n\nOvipositor is a link-shortener web program. A long URL is entered, together with an optional shortlink and an optional comment. When creating a shortlink, the long URL and the shortlink are saved to a database. When an attempt is made to use a shortlink, the specified shortlink is searched for in the database and, if the shortlink is in the database, there is a redirect to its corresponding long URL.\n\n![](https://raw.githubusercontent.com/wdbm/ovipositor/master/media/screenshot.png)\n\n# setup\n\n```Bash\nsudo apt install sqlite\nsudo pip install ovipositor\n```\n\n# Flask\n\n```Bash\nwhile true; do\n    ovipositor --home=\"index.html\"\ndone\n```\n\n# Gunicorn\n\n```Bash\nsudo gunicorn --workers=1 \"ovipositor.__init__:WSGI(argv=['--home=index.html'])\" --bind=0.0.0.0:443 --certfile=/home/user/certificates/fullchain.pem --keyfile=/home/user/certificates/privkey.pem\n```\n\n# ovipositor database structure\n\nThere is one table in an ovipositor database called \"shortlinks\". This table has 6 fields:\n\n|**field**|**description**                            |\n|---------|-------------------------------------------|\n|comment  |shortlink descriptive comment              |\n|count    |shortlink usage count                      |\n|IP       |IP address that created the shortlink      |\n|URL      |long URL to which the shortlink corresponds|\n|shortlink|shortlink text                             |\n|timestamp|shortlink creation timestamp               |\n\n# changing from YOURLS to ovipositor\n\nAn export dump should be made of the YOURLS MySQL database and the dump should be converted to an SQLite3 database. This can be done using [mysql2sqlite](https://github.com/dumblob/mysql2sqlite).\n\nThe YOURLS SQLite database then can be converted to an ovipositor database using the script `convert_YOURLS_SQLite_database_to_ovipositor_database.py`.\n\n```Bash\nconvert_YOURLS_SQLite_database_to_ovipositor_database.py --help\n\nconvert_YOURLS_SQLite_database_to_ovipositor_database.py \\\n    --database_YOURLD=linkdb.db                          \\\n    --database_ovipositor=ovipositor.db\n```\n\nThe YOURLS database contains three tables, \"yourls_url\", \"sqlite_sequence\" and \"yourls_options\". These tables have the following fields:\n\n- yourls_url\n    - clicks\n    - ip\n    - keyword\n    - timestamp\n    - title\n    - url\n- sqlite_sequence\n    - name\n    - seq\n- yourls_options\n    - option_id\n    - option_name\n    - option_value\n\nIn changing from YOURLS to ovipositor, the following database table and field conversions are made:\n\n|**YOURLS**                     |**ovipositor**                 |\n|-------------------------------|-------------------------------|\n|yourls_url                     |shortlinks                     |\n|clicks                         |count                          |\n|ip                             |IP                             |\n|keyword                        |shortlink                      |\n|url                            |URL                            |\n|timestamp (`datetime.datetime`)|timestamp (`datetime.datetime`)|\n|title                          |comment                        |\n","project_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fwdbm%2Fovipositor","html_url":"https://awesome.ecosyste.ms/projects/github.com%2Fwdbm%2Fovipositor","lists_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fwdbm%2Fovipositor/lists"}