{"id":15136323,"url":"https://github.com/thrillfall/nextcloud-gpodder","last_synced_at":"2025-04-12T19:44:46.054Z","repository":{"id":39742680,"uuid":"381475951","full_name":"thrillfall/nextcloud-gpodder","owner":"thrillfall","description":"nextcloud app that replicates basic gpodder.net api ","archived":false,"fork":false,"pushed_at":"2025-03-01T16:16:32.000Z","size":770,"stargazers_count":236,"open_issues_count":5,"forks_count":10,"subscribers_count":7,"default_branch":"main","last_synced_at":"2025-04-04T00:07:08.231Z","etag":null,"topics":["antennapod","gpodder","nextcloud"],"latest_commit_sha":null,"homepage":"https://apps.nextcloud.com/apps/gpoddersync","language":"PHP","has_issues":true,"has_wiki":null,"has_pages":null,"mirror_url":null,"source_name":null,"license":"agpl-3.0","status":null,"scm":"git","pull_requests_enabled":true,"icon_url":"https://github.com/thrillfall.png","metadata":{"files":{"readme":"README.md","changelog":"CHANGELOG.md","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":"2021-06-29T19:29:43.000Z","updated_at":"2025-03-19T20:59:34.000Z","dependencies_parsed_at":"2023-11-14T20:24:56.175Z","dependency_job_id":"d3ce1ecd-09b6-4988-865a-dcf2e33b1cc3","html_url":"https://github.com/thrillfall/nextcloud-gpodder","commit_stats":{"total_commits":257,"total_committers":17,"mean_commits":"15.117647058823529","dds":0.6108949416342413,"last_synced_commit":"a7729b29b0c46082d61271f0cdfd24ee5587037c"},"previous_names":[],"tags_count":31,"template":false,"template_full_name":null,"repository_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/thrillfall%2Fnextcloud-gpodder","tags_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/thrillfall%2Fnextcloud-gpodder/tags","releases_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/thrillfall%2Fnextcloud-gpodder/releases","manifests_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/thrillfall%2Fnextcloud-gpodder/manifests","owner_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners/thrillfall","download_url":"https://codeload.github.com/thrillfall/nextcloud-gpodder/tar.gz/refs/heads/main","host":{"name":"GitHub","url":"https://github.com","kind":"github","repositories_count":248625482,"owners_count":21135512,"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":["antennapod","gpodder","nextcloud"],"created_at":"2024-09-26T06:20:44.361Z","updated_at":"2025-04-12T19:44:46.030Z","avatar_url":"https://github.com/thrillfall.png","language":"PHP","readme":"# nextcloud-gpodder\nNextcloud app that replicates basic gpodder.net api to sync podcast consumer apps (podcatchers) like AntennaPod.\n\n### Clients supporting sync\n| client | support status |\n| :- | :- |\n| [AntennaPod](https://antennapod.org) | Initial purpose for this project, as a synchronization endpoint for this client.\u003cbr\u003e Support is available [as of version 2.5.1](https://github.com/AntennaPod/AntennaPod/pull/5243/). |\n| [KDE Kasts](https://apps.kde.org/de/kasts/) | Supported since version 21.12 |\n| [Podcast Merlin](https://github.com/yoyoooooooooo/Podcast-Merlin--Nextcloud-Gpodder-Client-For-Windows) | Full sync support podcast client for Windows |\n| [RePod](https://apps.nextcloud.com/apps/repod) | Nextcloud app for playing and managing podcasts with sync support |\n| [Cardo](https://cardo-podcast.github.io/#/cardo) | Podcast client with sync support, for Windows, Mac and Linux  |\n| [FocusPodcast](https://github.com/allentown521/FocusPodcast) | Fork of AntennaPod, with a focus on UI and customization |\n| [Podcini.X](https://github.com/XilinJia/Podcini.X) | Fork of AntennaPod, with a focus on many features. Synchronization is not yet stable. | \n| ~~[Garmin Podcasts](https://lucasasselli.github.io/garmin-podcasts/)~~ | Repository archived, app is [no longer available](https://apps.garmin.com/en-US/apps/b5b85600-0625-43b6-89e9-1245bd44532c) |\n### Installation\nEither from the official Nextcloud app store ([link to app page](https://apps.nextcloud.com/apps/gpoddersync)) or by downloading the [latest release](https://github.com/thrillfall/nextcloud-gpodder/releases/latest) and extracting it into your Nextcloud apps/ directory.\n\n## API\n### subscription\n* **get subscription changes**: `GET /index.php/apps/gpoddersync/subscriptions`\n\t* *(optional)* GET parameter `since` (UNIX time)\n* **upload subscription changes** : `POST /index.php/apps/gpoddersync/subscription_change/create`\n  * returns JSON with current timestamp\n\nThe API replicates this: https://gpoddernet.readthedocs.io/en/latest/api/reference/subscriptions.html\n\n#### Example requests:\n```json\nGET /index.php/apps/gpoddersync/subscriptions?since=1633240761\n\n{\n  \"add\": [\n    \"https://example.com/feed.xml\",\n    \"https://example.org/feed/\"\n  ],\n  \"remove\": [\n    \"https://example.net/feed.rss\"\n  ],\n  \"timestamp\": 1663540502\n}\n```\n```json\nPOST /index.php/apps/gpoddersync/subscription_change/create\n\n{\n  \"add\": [\n    \"https://example.com/feed.xml\",\n    \"https://example.org/feed/\"\n  ],\n  \"remove\": [\n    \"https://example.net/feed.rss\"\n  ]\n}\n```\n\n### episode action\n* **get episode actions**: `GET /index.php/apps/gpoddersync/episode_action`\n\t* *(optional)* GET parameter `since` (UNIX time)\n\t* fields: *podcast*, *episode*, *guid*, *action*, *timestamp*, *position*, *started*, *total*\n* **create episode actions**: `POST /index.php/apps/gpoddersync/episode_action/create`\n  * fields: *podcast*, *episode*, *guid*, *action*, *timestamp*, *position*, *started*, *total*\n  * *position*, *started* and *total* are optional, default value is -1\n  * *guid* is also optional, but should be sent if available\n  * identification is done by *guid*, or *episode* if *guid* is missing\n  * returns JSON with current timestamp\n\nThe API replicates this: https://gpoddernet.readthedocs.io/en/latest/api/reference/events.html  \n\n#### Example requests:\n```json\nGET /index.php/apps/gpoddersync/episode_action?since=1633240761\n\n{\n    \"actions\": [\n      {\n       \"podcast\": \"http://example.com/feed.rss\",\n       \"episode\": \"http://example.com/files/s01e20.mp3\",\n       \"guid\": \"s01e20-example-org\",\n       \"action\": \"PLAY\",\n       \"timestamp\": \"2009-12-12T09:00:00\",\n       \"started\": 15,\n       \"position\": 120,\n       \"total\":  500\n      },\n      {\n       \"podcast\": \"http://example.com/feed.rss\",\n       \"episode\": \"http://example.com/files/s01e20.mp3\",\n       \"guid\": \"s01e20-example-org\",\n       \"action\": \"DOWNLOAD\",\n       \"timestamp\": \"2009-12-12T09:00:00\",\n       \"started\": -1,\n       \"position\": -1,\n       \"total\":  -1\n      },\n    ],\n    \"timestamp\": 12345\n}\n```\n```json\nPOST /index.php/apps/gpoddersync/episode_action/create\n\n[\n  {\n   \"podcast\": \"http://example.com/feed.rss\",\n   \"episode\": \"http://example.com/files/s01e20.mp3\",\n   \"guid\": \"s01e20-example-org\",\n   \"action\": \"play\",\n   \"timestamp\": \"2009-12-12T09:00:00\",\n   \"started\": 15,\n   \"position\": 120,\n   \"total\":  500\n  },\n  {\n   \"podcast\": \"http://example.org/podcast.php\",\n   \"episode\": \"http://ftp.example.org/foo.ogg\",\n   \"guid\": \"foo-bar-123\",\n   \"action\": \"DOWNLOAD\",\n   \"timestamp\": \"2009-12-12T09:05:21\",\n  }\n]\n```\n\n## Development\n\n### Testing\n- mount project into apps-extra of nextcloud environment (https://github.com/juliushaertl/nextcloud-docker-dev) \n- `docker-compose exec nextcloud occ app:enable gpoddersync` enable app so we have database tables\n- `docker-compose exec nextcloud phpunit9 -c apps-extra/nextcloud-gpodder/tests/phpunit.xml`\n","funding_links":[],"categories":[],"sub_categories":[],"project_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fthrillfall%2Fnextcloud-gpodder","html_url":"https://awesome.ecosyste.ms/projects/github.com%2Fthrillfall%2Fnextcloud-gpodder","lists_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fthrillfall%2Fnextcloud-gpodder/lists"}