Skip to content

Commit 398a1bb

Browse files
btkcodedevnatikgadzhioctavia-squidington-iii
authored
source-buzzsprout contribution from btkcodedev (#45608)
Co-authored-by: Natik Gadzhi <[email protected]> Co-authored-by: Octavia Squidington III <[email protected]>
1 parent ed214d0 commit 398a1bb

File tree

6 files changed

+337
-0
lines changed

6 files changed

+337
-0
lines changed
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,39 @@
1+
# Buzzsprout
2+
This directory contains the manifest-only connector for `source-buzzsprout`.
3+
4+
## Documentation reference:
5+
Visit `https://github.com/buzzsprout/buzzsprout-api/tree/master/sections` for API documentation
6+
7+
## Authentication setup
8+
`Source-algolia` uses API keys and podcast id for its authentication,
9+
Visit `https://www.buzzsprout.com/my/profile/api` for getting api key and podcast id
10+
Visit `https://github.com/buzzsprout/buzzsprout-api/tree/master?tab=readme-ov-file#authentication` for knowing more about authentication.
11+
12+
## Usage
13+
There are multiple ways to use this connector:
14+
- You can use this connector as any other connector in Airbyte Marketplace.
15+
- You can load this connector in `pyairbyte` using `get_source`!
16+
- You can open this connector in Connector Builder, edit it, and publish to your workspaces.
17+
18+
Please refer to the manifest-only connector documentation for more details.
19+
20+
## Local Development
21+
We recommend you use the Connector Builder to edit this connector.
22+
23+
But, if you want to develop this connector locally, you can use the following steps.
24+
25+
### Environment Setup
26+
You will need `airbyte-ci` installed. You can find the documentation [here](airbyte-ci).
27+
28+
### Build
29+
This will create a dev image (`source-buzzsprout:dev`) that you can use to test the connector locally.
30+
```bash
31+
airbyte-ci connectors --name=source-buzzsprout build
32+
```
33+
34+
### Test
35+
This will run the acceptance tests for the connector.
36+
```bash
37+
airbyte-ci connectors --name=source-buzzsprout test
38+
```
39+
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,17 @@
1+
# See [Connector Acceptance Tests](https://docs.airbyte.com/connector-development/testing-connectors/connector-acceptance-tests-reference)
2+
# for more information about how to configure these tests
3+
connector_image: airbyte/source-buzzsprout:dev
4+
acceptance_tests:
5+
spec:
6+
tests:
7+
- spec_path: "manifest.yaml"
8+
connection:
9+
bypass_reason: "This is a builder contribution, and we do not have secrets at this time"
10+
discovery:
11+
bypass_reason: "This is a builder contribution, and we do not have secrets at this time"
12+
basic_read:
13+
bypass_reason: "This is a builder contribution, and we do not have secrets at this time"
14+
incremental:
15+
bypass_reason: "This is a builder contribution, and we do not have secrets at this time"
16+
full_refresh:
17+
bypass_reason: "This is a builder contribution, and we do not have secrets at this time"
Loading
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,183 @@
1+
version: 4.6.2
2+
3+
type: DeclarativeSource
4+
5+
description: >-
6+
Website: https://www.buzzsprout.com/
7+
8+
API Docs: https://github.com/buzzsprout/buzzsprout-api/tree/master/sections
9+
10+
Auth Docs:
11+
https://github.com/buzzsprout/buzzsprout-api/tree/master?tab=readme-ov-file#authentication
12+
13+
API Keys page: https://www.buzzsprout.com/my/profile/api
14+
15+
check:
16+
type: CheckStream
17+
stream_names:
18+
- episodes
19+
20+
definitions:
21+
streams:
22+
episodes:
23+
type: DeclarativeStream
24+
name: episodes
25+
primary_key:
26+
- id
27+
retriever:
28+
type: SimpleRetriever
29+
requester:
30+
$ref: "#/definitions/base_requester"
31+
path: "{{ config['podcast_id'] }}/episodes.json"
32+
http_method: GET
33+
request_headers:
34+
Authorization: Token token={{ config["api_key"] }}
35+
Content-Type: application/json; charset=utf-8
36+
User-Agent: >-
37+
Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36
38+
(KHTML, like Gecko) Chrome/116.0.0.0 Safari/537.36
39+
error_handler:
40+
type: CompositeErrorHandler
41+
error_handlers:
42+
- type: DefaultErrorHandler
43+
max_retries: 3
44+
backoff_strategies:
45+
- type: ExponentialBackoffStrategy
46+
factor: 2
47+
response_filters:
48+
- type: HttpResponseFilter
49+
action: RATE_LIMITED
50+
http_codes:
51+
- 429
52+
error_message: Rate limits hit
53+
record_selector:
54+
type: RecordSelector
55+
extractor:
56+
type: DpathExtractor
57+
field_path: []
58+
incremental_sync:
59+
type: DatetimeBasedCursor
60+
cursor_field: published_at
61+
cursor_datetime_formats:
62+
- "%Y-%m-%dT%H:%M:%S.%f%z"
63+
datetime_format: "%Y-%m-%dT%H:%M:%S.%f%z"
64+
start_datetime:
65+
type: MinMaxDatetime
66+
datetime: '{{ config["start_date"] }}'
67+
datetime_format: "%Y-%m-%dT%H:%M:%SZ"
68+
end_datetime:
69+
type: MinMaxDatetime
70+
datetime: "{{ now_utc().strftime('%Y-%m-%dT%H:%M:%SZ') }}"
71+
datetime_format: "%Y-%m-%dT%H:%M:%SZ"
72+
schema_loader:
73+
type: InlineSchemaLoader
74+
schema:
75+
$ref: "#/schemas/episodes"
76+
podcasts:
77+
type: DeclarativeStream
78+
name: podcasts
79+
primary_key:
80+
- id
81+
retriever:
82+
type: SimpleRetriever
83+
requester:
84+
$ref: "#/definitions/base_requester"
85+
path: podcasts.json
86+
http_method: GET
87+
request_headers:
88+
Authorization: Token token={{ config["api_key"] }}
89+
Content-Type: application/json; charset=utf-8
90+
User-Agent: >-
91+
Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36
92+
(KHTML, like Gecko) Chrome/116.0.0.0 Safari/537.36
93+
error_handler:
94+
type: CompositeErrorHandler
95+
error_handlers:
96+
- type: DefaultErrorHandler
97+
max_retries: 3
98+
backoff_strategies:
99+
- type: ExponentialBackoffStrategy
100+
factor: 2
101+
response_filters:
102+
- type: HttpResponseFilter
103+
action: RATE_LIMITED
104+
http_codes:
105+
- 429
106+
error_message: Rate limit hit
107+
record_selector:
108+
type: RecordSelector
109+
extractor:
110+
type: DpathExtractor
111+
field_path: []
112+
schema_loader:
113+
type: InlineSchemaLoader
114+
schema:
115+
$ref: "#/schemas/podcasts"
116+
base_requester:
117+
type: HttpRequester
118+
url_base: https://www.buzzsprout.com/api/
119+
120+
streams:
121+
- $ref: "#/definitions/streams/episodes"
122+
- $ref: "#/definitions/streams/podcasts"
123+
124+
spec:
125+
type: Spec
126+
connection_specification:
127+
type: object
128+
$schema: http://json-schema.org/draft-07/schema#
129+
required:
130+
- api_key
131+
- podcast_id
132+
- start_date
133+
properties:
134+
api_key:
135+
type: string
136+
order: 0
137+
title: API Key
138+
airbyte_secret: true
139+
podcast_id:
140+
type: string
141+
description: Podcast ID found in `https://www.buzzsprout.com/my/profile/api`
142+
title: Podcast ID
143+
order: 1
144+
start_date:
145+
type: string
146+
title: Start date
147+
format: date-time
148+
pattern: ^[0-9]{4}-[0-9]{2}-[0-9]{2}T[0-9]{2}:[0-9]{2}:[0-9]{2}Z$
149+
order: 2
150+
additionalProperties: true
151+
152+
metadata:
153+
autoImportSchema:
154+
episodes: false
155+
podcasts: false
156+
testedStreams:
157+
episodes:
158+
streamHash: 2cbf7e4baa763d48b3afec49b302f097e82fa6b7
159+
hasResponse: true
160+
responsesAreSuccessful: true
161+
hasRecords: true
162+
primaryKeysArePresent: true
163+
primaryKeysAreUnique: true
164+
podcasts:
165+
streamHash: 220c9469645385daaeea05a4d1821c1b003c4ca4
166+
hasResponse: true
167+
responsesAreSuccessful: true
168+
hasRecords: true
169+
primaryKeysArePresent: true
170+
primaryKeysAreUnique: true
171+
assist: {}
172+
173+
schemas:
174+
episodes:
175+
type: object
176+
$schema: http://json-schema.org/draft-07/schema#
177+
additionalProperties: true
178+
properties: {}
179+
podcasts:
180+
type: object
181+
$schema: http://json-schema.org/draft-07/schema#
182+
additionalProperties: true
183+
properties: {}
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,35 @@
1+
metadataSpecVersion: "1.0"
2+
data:
3+
allowedHosts:
4+
hosts:
5+
- "www.buzzsprout.com"
6+
registryOverrides:
7+
oss:
8+
enabled: true
9+
cloud:
10+
enabled: true
11+
remoteRegistries:
12+
pypi:
13+
enabled: false
14+
packageName: airbyte-source-buzzsprout
15+
connectorBuildOptions:
16+
baseImage: docker.io/airbyte/source-declarative-manifest:4.6.2@sha256:f5fcd3d4703b7590b6166a7853c5ed1686731607cd30a159a8c24e2fe2c1ee98
17+
connectorSubtype: api
18+
connectorType: source
19+
definitionId: 6ad23bfc-cb11-4faa-a243-f9ccdb0145cc
20+
dockerImageTag: 0.0.1
21+
dockerRepository: airbyte/source-buzzsprout
22+
githubIssueLabel: source-buzzsprout
23+
icon: icon.svg
24+
license: MIT
25+
name: Buzzsprout
26+
releaseDate: 2024-09-16
27+
releaseStage: alpha
28+
supportLevel: community
29+
documentationUrl: https://docs.airbyte.com/integrations/sources/buzzsprout
30+
tags:
31+
- language:manifest-only
32+
- cdk:low-code
33+
ab_internal:
34+
ql: 100
35+
sl: 100
+35
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,35 @@
1+
# Buzzsprout
2+
This page contains the setup guide and reference information for the [Buzzsprout](https://www.buzzsprout.com/) source connector.
3+
4+
## Documentation reference:
5+
Visit `https://github.com/buzzsprout/buzzsprout-api/tree/master/sections` for API documentation
6+
7+
## Authentication setup
8+
`Source-buzzsprout` uses API keys and podcast id for its authentication,
9+
Visit `https://www.buzzsprout.com/my/profile/api` for getting api key and podcast id
10+
Visit `https://github.com/buzzsprout/buzzsprout-api/tree/master?tab=readme-ov-file#authentication` for knowing more about authentication.
11+
12+
## Configuration
13+
14+
| Input | Type | Description | Default Value |
15+
|-------|------|-------------|---------------|
16+
| `api_key` | `string` | API Key. | |
17+
| `podcast_id` | `string` | Podcast ID. Podcast ID found in `my/profile/api` | |
18+
| `start_date` | `string` | Start date. | |
19+
20+
## Streams
21+
| Stream Name | Primary Key | Pagination | Supports Full Sync | Supports Incremental |
22+
|-------------|-------------|------------|---------------------|----------------------|
23+
| episodes | id | No pagination |||
24+
| podcasts | id | No pagination |||
25+
26+
## Changelog
27+
28+
<details>
29+
<summary>Expand to review</summary>
30+
31+
| Version | Date |PR| Subject |
32+
|------------------|------------|---|----------------|
33+
| 0.0.1 | 2024-09-16 |[45608](https://github.com/airbytehq/airbyte/pull/45608)| Initial release by [@btkcodedev](https://github.com/btkcodedev) via Connector Builder|
34+
35+
</details>

0 commit comments

Comments
 (0)