7 This file describes the documents that will be used in the CouchDB based
8 backend of the gpodder.net webservice.
10 For each document type the models (used in the current relational backend)
11 which will be replaced by it are listed.
18 A registered (but probably not yet activated) user and all his devices.
23 * RegistrationProfile (from django-registration)
30 email: "stefan@gpodder.net",,
31 password: "asdf$asdfasdf$asdfsdfa",
33 registration_key: "ad18719239817389ad",
37 "_id": "872348923987492834",
47 ["872348923987492834", "3498503485093495"],
48 ["9384053405", "90548903458"]
56 If a Podcast does not belong to a group, it is a document on its own. The
57 "subscriber" field contains historical subscriber counts. The "tags" field
58 contains all tags that are fetched in some automated way (ie not entered by a
61 A Podcast contains recent subscriber data in the "subscribers" property. To
62 keep the Podcast objects small, subscriber data is periodically moved to the
63 podcast's PodcastSubscriberData object.
77 _id: "118913287192379173298"
79 feed_url: "http://podcast.com/mp3.xml",
81 subscribers: [{timestamp: "2010-09-01", subscriber_count: 120}, ... },
82 related_podcasts: ["34059384598304850", "23480128409230482"],
84 feed: [["technology", 50], ["news", 20]],
85 delicious: [["technews", 10]]
87 publishers: ["stefan"],
91 19384038450938450983: { Episode },
92 20928340283040234820. { Episode },
94 content_types: ["image", "audio"]
101 Represents a group of podcast and contains all podcasts assigned to it.
102 Once a Podcast is assigned to a group, its Podcast document in deleted
103 and moved into the PodcastGroup.
111 _id: "9238409283402830480",
113 name: "Cool Podcast",
116 id: "118913287192379173298",
117 name: "Cool Podcast",
118 group: "9238409283402830480", # the _id of the group for
119 # referring to it when the the
120 # podcast is referred to separately
121 group_member_name: "MP3", # required if Podcast is member of a group
122 feed_url: "http://podcast.com/mp3.xml",
124 subscribers: [[2010-09-01, 120], [2010-09-01, 130]],
125 related_podcasts: ["34059384598304850", "23480128409230482"],
126 tags: ["technology", "news"],
127 publishers: ["stefan"],
128 episodes: Episode-Dict
135 PodcastSubscriberData
136 =========================
138 Contains the older subscriber data for a Podcast. This can be used to retrieve changes in the number of subscribers of a podcast.
141 * HistoricPodcastData
145 podcast: "118913287192379173298",
147 {timestamp: "2010-09-01", subscriber_count: 120},
148 {timestamp: "2010-10-01", subscriber_count: 125},
149 {timestamp: "2010-11-01", subscriber_count: 210},
157 An episode, in concept, belongs to a Podcast (not a PodcastGroup) but is a
158 standalone document. It has optional support for multiple media files (eg Audio
159 and PDF Show Notes). The fields listeners and recent_listeners are
160 regularly updated with aggregated data to substitute queries based on time.
169 _id: "19384038450938450983",
170 title: "Cool Episode of Cool Podcast",
171 podcast: "118913287192379173298",
172 media_urls: ["http://podcast.com/episode1.mp3", "http://podcast.com/episode1.pdf"],
173 released: "2010-09-20 12:00",
174 tags: ["opensource", "technology"],
175 merged_ids: ["908345083045", "29380423849"],
176 media_types: ["audio"],
177 listeners: [["2010-09-20", 20], ["2010-09-21", 15]],
178 recent_listeners: 75,
186 Contains everything that a User has done with a Podcast. The podcast is
187 referenced by the "ref_url" which is the URL that was received via the API. It
188 can be used in API responses so that the user receives exactly the same URL he
189 has sent (the Podcast document could contain several URLs).
195 * obsolete: Subscription, BackensSubscription
199 _id: "3893745983453948589345",
200 user: "345983045035480345809",
202 podcast: "118913287192379173298",
203 ref_url: "http://example.com/podcast.xml",
207 action: "subscribed",
208 timestamp: "2010-09-10",
209 device: "872348923987492834"
212 action: "unsubscribed",
213 timestamp: "2010-09-15",
214 device: "872348923987492834"
225 Contains the Podcast Suggestions and related meta-data (blacklist,
226 suggestion-ratings) of a User. This is not places into PodcastUserState because
227 the user did not yet interact with the Podcast directly.
231 * SuggestionBlacklist
238 "119018023981293801823",
239 "192840890284092834093"
242 "456045698409586045860",
243 "935937498573549739485"
246 { timestamp: "2010-09-13", rating: -1},
247 { timestamp: "2010-09-15", rating: 1}
255 A EpisodeUserState contains everything that a User has done with an Episode.
256 The episode is referenced by the "ref_url" and "podcast_ref_url" which contain
257 the URLs for the episode and the podcast, exactly as they have been received
258 via the API. These values can also be used in API responses to refer to exactly
259 the same URL as in the request (both Episode and Podcast documents can contain
271 episode: "3893745983453948589345",
272 podcast: "118913287192379173298",
273 ref_url: "http://podcast.com/episode-1.mp3",
274 podcast_ref_url: "http://podcast.com/mp3.xml",
279 file: "http://podcast.com/episode-1.mp3",
280 timestamp: "2010-09-10",
281 device: "872348923987492834"
285 file: "http://podcast.com/episode-1.mp3",
286 timestamp: "2010-09-15",
287 device: "872348923987492834"
294 advertisement: false,
305 Contains an advertisement for a Podcast
313 podcast: "118913287192379173298",
320 =====================
322 Contains a URL Sanitizing Rule.
329 slug: "feedburner-feeds2",
330 applies_to: ["podcast", "episode"],
331 search: "http://feeds2\.feedburner\.com",
332 replace_by: "http://feeds.feedburner.com",
333 descriptions: "Replace {feeds2 => feeds}.feedburner.com",
341 Represents a category within the Podcast Directory.
349 spellings: ["technology", "tech"],
351 updated: "2010-09-28T08:38:03Z",
358 * SecurityToken: has been moved to various documents, depending on previous