{"id":15172666,"url":"https://github.com/andreasbilke/s9y-to-drupal","last_synced_at":"2026-02-07T18:32:03.860Z","repository":{"id":184386769,"uuid":"671384509","full_name":"AndreasBilke/s9y-to-drupal","owner":"AndreasBilke","description":"S9Y to Drupal migration tool","archived":false,"fork":false,"pushed_at":"2024-03-18T20:13:37.000Z","size":36,"stargazers_count":0,"open_issues_count":0,"forks_count":0,"subscribers_count":1,"default_branch":"master","last_synced_at":"2025-05-19T23:07:42.050Z","etag":null,"topics":["converter","drupal","migration-tool","s9y"],"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/AndreasBilke.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,"governance":null,"roadmap":null,"authors":null,"dei":null,"publiccode":null,"codemeta":null}},"created_at":"2023-07-27T07:41:16.000Z","updated_at":"2023-07-28T07:18:29.000Z","dependencies_parsed_at":"2024-03-18T21:29:17.960Z","dependency_job_id":"322d89e4-8869-4856-9a79-04c44516494a","html_url":"https://github.com/AndreasBilke/s9y-to-drupal","commit_stats":{"total_commits":20,"total_committers":1,"mean_commits":20.0,"dds":0.0,"last_synced_commit":"109806e3dc2274cc02bb0a2902c99ffbc7c1ec0d"},"previous_names":["andreasbilke/s9y-to-drupal"],"tags_count":0,"template":false,"template_full_name":null,"purl":"pkg:github/AndreasBilke/s9y-to-drupal","repository_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/AndreasBilke%2Fs9y-to-drupal","tags_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/AndreasBilke%2Fs9y-to-drupal/tags","releases_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/AndreasBilke%2Fs9y-to-drupal/releases","manifests_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/AndreasBilke%2Fs9y-to-drupal/manifests","owner_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners/AndreasBilke","download_url":"https://codeload.github.com/AndreasBilke/s9y-to-drupal/tar.gz/refs/heads/master","sbom_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/AndreasBilke%2Fs9y-to-drupal/sbom","host":{"name":"GitHub","url":"https://github.com","kind":"github","repositories_count":266998061,"owners_count":24018950,"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-07-25T02:00:09.625Z","response_time":70,"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":["converter","drupal","migration-tool","s9y"],"created_at":"2024-09-27T10:02:24.421Z","updated_at":"2026-02-07T18:32:03.830Z","avatar_url":"https://github.com/AndreasBilke.png","language":"Python","funding_links":[],"categories":[],"sub_categories":[],"readme":"# S9Y to Drupal Exporter\n\nThis program helps in migrating a current s9y installation (as of writing: 2.5.0)\nto a freshly created Drupal 10 instance.\n\nIt does the following jobs:\n\n- Copy s9y articles (including s9y hosted images) to Drupal\n- Assigning (and create) categories to articles\n\nIt does **not** migrate S9Y users to Drupal nor does it migrate any configuration\nrelated things (like blog title, plugins, etc.)\n\n## S9Y requirements\n\n- Read access to Postgresql database of S9Y (MySQL should work completely the same but the python program uses psql driver)\n- Read access to a copy of `/uploads` folder from S9Y\n\n## Drupal requirements\n\nThe following modules needs to be activated\n\n- Json API (activate create/delete/patch capabilities)\n- HTTP Basic Auth (used user needs admin role to Drupal)\n- Enable Full-HTML Support for article fields\n  - See `/admin/structure/types/manage/article/fields/node.article.body`\n- Enable unlimited number of images for article `field_image`\n  - See `/admin/structure/types/manage/article/fields/node.article.field_image`\n- If needed: Hide full `field_image` list at the beginning of the article (since you are embedding it on your own)\n\n## Workflow\n\n1. Extract articles (including author, assigned categories) from S9Y database\n2. Extract image references from body/extended body of articles\n   1. Double check for image existence in `uploads/` folder\n   2. Mark images in body/extended body such that the URLs can be rewritten later\n3. For each article (creation via API)\n   1. Create article with title only (to obtain UUID of Drupal article)\n   2. Upload embedded images. Link image with article. Rename image with `s9y-migration` prefix.\n      Obtain image URL from API response\n   3. (Local preprocessing) Rewrite image URLs in body/extended body to match Drupal URLs\n   4. Update article body/extended body\n   5. Assign (and create first) tags/categories\n\n## Tool usage\n\n- Install required Python dependencies (see `pyproject.toml`)\n- Copy `.env.example` to `.env` and update parameters accordingly\n- Run `python src/main.py`\n","project_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fandreasbilke%2Fs9y-to-drupal","html_url":"https://awesome.ecosyste.ms/projects/github.com%2Fandreasbilke%2Fs9y-to-drupal","lists_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fandreasbilke%2Fs9y-to-drupal/lists"}