2021-07-06 19:01:27 +00:00
|
|
|
# nextcloud-gpodder
|
2021-10-14 13:24:40 +00:00
|
|
|
Nextcloud app that replicates basic gpodder.net api
|
2021-07-06 19:01:27 +00:00
|
|
|
|
2021-10-14 13:24:40 +00:00
|
|
|
This app serves as synchronization endpoint for AntennaPod: https://github.com/AntennaPod/AntennaPod/pull/5243/
|
|
|
|
This feature will be available in AntennaPod as of version 2.5.0, which will be released towards the end of 2021.
|
2021-09-28 09:10:22 +00:00
|
|
|
|
|
|
|
# API
|
|
|
|
## subscription
|
2021-10-05 14:22:56 +00:00
|
|
|
* **get subscription changes**: `GET /index.php/apps/gpoddersync/subscriptions`
|
|
|
|
* *(optional)* GET parameter `since` (UNIX time)
|
|
|
|
* **upload subscription changes** : `POST /index.php/apps/gpoddersync/subscription_change/create`
|
|
|
|
* returns nothing
|
2021-09-28 09:10:22 +00:00
|
|
|
|
|
|
|
The API replicates this: https://gpoddernet.readthedocs.io/en/latest/api/reference/subscriptions.html
|
|
|
|
|
|
|
|
## episode action
|
2021-10-05 14:22:56 +00:00
|
|
|
* **get episode actions**: `GET /index.php/apps/gpoddersync/episode_action`
|
|
|
|
* *(optional)* GET parameter `since` (UNIX time)
|
2021-10-06 15:46:20 +00:00
|
|
|
* fields: *podcast*, *episode*, *guid*, *action*, *timestamp*, *position*, *started*, *total*
|
|
|
|
* **create episode actions**: `POST /index.php/apps/gpoddersync/episode_action/create`
|
|
|
|
* fields: *podcast*, *episode*, *guid*, *action*, *timestamp*, *position*, *started*, *total*
|
|
|
|
* *position*, *started* and *total* are optional, default value is -1
|
2021-10-05 14:22:56 +00:00
|
|
|
* returns JSON with current timestamp
|
2021-09-28 09:10:22 +00:00
|
|
|
|
|
|
|
The API replicates this: https://gpoddernet.readthedocs.io/en/latest/api/reference/events.html
|
|
|
|
|
2021-10-06 17:57:50 +00:00
|
|
|
we also process the property `guid`
|
2021-09-28 09:10:22 +00:00
|
|
|
|
2021-10-05 14:22:56 +00:00
|
|
|
#### Example requests:
|
|
|
|
```json
|
|
|
|
GET /index.php/apps/gpoddersync/episode_action?since=1633240761
|
|
|
|
|
|
|
|
{
|
|
|
|
"actions": [
|
|
|
|
{
|
|
|
|
"podcast": "http://example.com/feed.rss",
|
|
|
|
"episode": "http://example.com/files/s01e20.mp3",
|
|
|
|
"guid": "s01e20-example-org",
|
|
|
|
"action": "PLAY",
|
|
|
|
"timestamp": "2009-12-12T09:00:00",
|
|
|
|
"started": 15,
|
|
|
|
"position": 120,
|
|
|
|
"total": 500
|
2021-10-06 15:46:20 +00:00
|
|
|
},
|
|
|
|
{
|
|
|
|
"podcast": "http://example.com/feed.rss",
|
|
|
|
"episode": "http://example.com/files/s01e20.mp3",
|
|
|
|
"guid": "s01e20-example-org",
|
|
|
|
"action": "DOWNLOAD",
|
|
|
|
"timestamp": "2009-12-12T09:00:00",
|
|
|
|
"started": -1,
|
|
|
|
"position": -1,
|
|
|
|
"total": -1
|
|
|
|
},
|
2021-10-05 14:22:56 +00:00
|
|
|
],
|
|
|
|
"timestamp": 12345
|
|
|
|
}
|
|
|
|
```
|
|
|
|
```json
|
|
|
|
POST /index.php/apps/gpoddersync/episode_action/create
|
|
|
|
|
|
|
|
[
|
|
|
|
{
|
|
|
|
"podcast": "http://example.com/feed.rss",
|
|
|
|
"episode": "http://example.com/files/s01e20.mp3",
|
|
|
|
"guid": "s01e20-example-org",
|
2021-10-06 15:46:20 +00:00
|
|
|
"action": "play",
|
2021-10-05 14:22:56 +00:00
|
|
|
"timestamp": "2009-12-12T09:00:00",
|
|
|
|
"started": 15,
|
|
|
|
"position": 120,
|
|
|
|
"total": 500
|
|
|
|
},
|
|
|
|
{
|
|
|
|
"podcast": "http://example.org/podcast.php",
|
|
|
|
"episode": "http://ftp.example.org/foo.ogg",
|
|
|
|
"guid": "foo-bar-123",
|
|
|
|
"action": "DOWNLOAD",
|
|
|
|
"timestamp": "2009-12-12T09:05:21",
|
|
|
|
}
|
|
|
|
]
|
2021-10-06 17:57:50 +00:00
|
|
|
```
|