crawlora-reddit 0.1.2 → 0.3.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- checksums.yaml +4 -4
- data/README.md +29 -2
- data/lib/crawlora/reddit/client.rb +112 -4
- data/lib/crawlora/reddit/version.rb +1 -1
- metadata +4 -4
checksums.yaml
CHANGED
|
@@ -1,7 +1,7 @@
|
|
|
1
1
|
---
|
|
2
2
|
SHA256:
|
|
3
|
-
metadata.gz:
|
|
4
|
-
data.tar.gz:
|
|
3
|
+
metadata.gz: 65fb33c95869a83acb80a6b75e9893fc8fac4b9971e992c88910cacdb1048fc5
|
|
4
|
+
data.tar.gz: bd22849dd6fcd03df6dc6546175e78c6270e6fbb86349d111df1c796cc38c2df
|
|
5
5
|
SHA512:
|
|
6
|
-
metadata.gz:
|
|
7
|
-
data.tar.gz:
|
|
6
|
+
metadata.gz: b31df29616726a36bb0fed7f4bc628d90677dbd93baebfb418d6546c2d28c1a78ff91c165d78662a31cc76bff3c7fd442142b5320a0fd4622f6a85c77f2889ed
|
|
7
|
+
data.tar.gz: d8495d2b726bba61264d907a614f9b3ed410447ac4958d73180172f462e7775f9ba7f57399b24e281c18a57eece1ba8ccb23b065b2d710f46dbc8624aa22dc39
|
data/README.md
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
# Crawlora Reddit API client for Ruby (`crawlora-reddit`)
|
|
2
2
|
|
|
3
|
-
This Ruby gem calls Crawlora's hosted Reddit API at `https://api.crawlora.net/api/v1`. It exposes
|
|
3
|
+
This Ruby gem calls Crawlora's hosted Reddit API at `https://api.crawlora.net/api/v1`. It exposes 39 endpoints covering search, post and comment details, subreddit feeds, user history, domain listings, trends, and leads; it does not call or scrape Reddit directly. Requests require your Crawlora API key and use your account's service plan.
|
|
4
4
|
|
|
5
5
|
## Install
|
|
6
6
|
|
|
@@ -20,7 +20,7 @@ puts result
|
|
|
20
20
|
client.close
|
|
21
21
|
```
|
|
22
22
|
|
|
23
|
-
Use an operation-specific method for normal calls. `request(operation_id, params = {}, response_type: :auto)` is available for every operation. `response_type: :text` returns raw response text. This gem includes
|
|
23
|
+
Use an operation-specific method for normal calls. `request(operation_id, params = {}, response_type: :auto)` is available for every operation. `response_type: :text` returns raw response text. This gem includes 39 API operations.
|
|
24
24
|
|
|
25
25
|
```ruby
|
|
26
26
|
client = Crawlora::Reddit::Client.new(api_key: ENV.fetch("CRAWLORA_API_KEY"), timeout: 30)
|
|
@@ -36,17 +36,44 @@ Browse every route included in this gem. The [endpoint reference](https://github
|
|
|
36
36
|
|
|
37
37
|
| Method | Endpoint | API operation | Description |
|
|
38
38
|
| --- | --- | --- | --- |
|
|
39
|
+
| `GET` | `/reddit/archive/comments/ids` | `reddit-archive-comments-ids` | Look up archived Reddit comments by ids |
|
|
40
|
+
| `GET` | `/reddit/archive/comments/search` | `reddit-archive-comments-search` | Search archived Reddit comments |
|
|
41
|
+
| `GET` | `/reddit/archive/comments/{id}/tree` | `reddit-archive-comments-tree` | Get an archived Reddit comment tree |
|
|
42
|
+
| `GET` | `/reddit/archive/posts/ids` | `reddit-archive-posts-ids` | Look up archived Reddit posts by ids |
|
|
43
|
+
| `GET` | `/reddit/archive/posts/search` | `reddit-archive-posts-search` | Search archived Reddit posts |
|
|
44
|
+
| `GET` | `/reddit/archive/subreddits/search` | `reddit-archive-subreddits-search` | Search Reddit's archived subreddit directory |
|
|
45
|
+
| `GET` | `/reddit/archive/time-series` | `reddit-archive-time-series` | Get historical Reddit archive time series |
|
|
46
|
+
| `GET` | `/reddit/comment/{id}` | `reddit-comment` | Get a Reddit comment |
|
|
47
|
+
| `GET` | `/reddit/comment/{id}/awards` | `reddit-comment-awards` | Get Reddit comment awards |
|
|
39
48
|
| `GET` | `/reddit/comments/{id}` | `reddit-comments` | Get Reddit post comments |
|
|
40
49
|
| `GET` | `/reddit/domain/{domain}/posts` | `reddit-domain-posts` | List Reddit domain posts |
|
|
41
50
|
| `GET` | `/reddit/leads` | `reddit-leads` | Find Reddit buying-intent leads |
|
|
51
|
+
| `GET` | `/reddit/popular` | `reddit-popular` | List Reddit popular posts |
|
|
42
52
|
| `GET` | `/reddit/post/{id}` | `reddit-post` | Get Reddit post |
|
|
53
|
+
| `GET` | `/reddit/post/{id}/awards` | `reddit-post-awards` | Get Reddit post awards |
|
|
54
|
+
| `GET` | `/reddit/posts/ids` | `reddit-posts-by-ids` | Get Reddit posts by ids |
|
|
43
55
|
| `GET` | `/reddit/search` | `reddit-search` | Search Reddit posts |
|
|
56
|
+
| `GET` | `/reddit/search/comments` | `reddit-search-comments` | Search Reddit comments |
|
|
57
|
+
| `GET` | `/reddit/search/people` | `reddit-search-people` | Search Reddit people |
|
|
44
58
|
| `GET` | `/reddit/subreddit/{subreddit}/about` | `reddit-subreddit-about` | Get Reddit subreddit metadata |
|
|
45
59
|
| `GET` | `/reddit/subreddit/{subreddit}/comments` | `reddit-subreddit-comments` | List Reddit subreddit comments |
|
|
60
|
+
| `GET` | `/reddit/subreddit/{subreddit}/flairs` | `reddit-subreddit-flairs` | List Reddit community post flairs |
|
|
61
|
+
| `GET` | `/reddit/subreddit/{subreddit}/highlights` | `reddit-subreddit-highlights` | List Reddit community highlights |
|
|
62
|
+
| `GET` | `/reddit/subreddit/{subreddit}/leaderboard/categories` | `reddit-subreddit-leaderboard-categories` | List Reddit community leaderboard categories |
|
|
46
63
|
| `GET` | `/reddit/subreddit/{subreddit}/posts` | `reddit-subreddit-posts` | List Reddit subreddit posts |
|
|
64
|
+
| `GET` | `/reddit/subreddit/{subreddit}/rules` | `reddit-subreddit-rules` | Get Reddit community rules |
|
|
65
|
+
| `GET` | `/reddit/subreddit/{subreddit}/user-flairs` | `reddit-subreddit-user-flairs` | List Reddit community user flairs |
|
|
66
|
+
| `GET` | `/reddit/subreddit/{subreddit}/wiki` | `reddit-subreddit-wiki` | Get Reddit community wiki |
|
|
67
|
+
| `GET` | `/reddit/subreddits/discover` | `reddit-subreddits-discover` | List Reddit community discovery feeds |
|
|
47
68
|
| `GET` | `/reddit/subreddits/posts` | `reddit-subreddits-posts` | List Reddit multi-subreddit posts |
|
|
69
|
+
| `GET` | `/reddit/subreddits/search` | `reddit-subreddits-search` | Search Reddit communities |
|
|
70
|
+
| `GET` | `/reddit/subreddits/suggest` | `reddit-subreddits-suggest` | Suggest Reddit communities |
|
|
71
|
+
| `GET` | `/reddit/topics` | `reddit-topics` | List Reddit taxonomy topics |
|
|
72
|
+
| `GET` | `/reddit/topics/broad` | `reddit-topics-broad` | List Reddit broad topics |
|
|
73
|
+
| `GET` | `/reddit/topics/search` | `reddit-topics-search` | Search Reddit topics |
|
|
48
74
|
| `GET` | `/reddit/trends` | `reddit-trends` | List Reddit trends |
|
|
49
75
|
| `GET` | `/reddit/user/{username}/comments` | `reddit-user-comments` | List Reddit user comments |
|
|
50
76
|
| `GET` | `/reddit/user/{username}/posts` | `reddit-user-posts` | List Reddit user posts |
|
|
77
|
+
| `GET` | `/reddit/user/{username}/profile` | `reddit-user-profile` | Get a Reddit user profile |
|
|
51
78
|
|
|
52
79
|
See [Crawlora](https://crawlora.net/?utm_source=rubygems&utm_medium=referral&utm_campaign=platform-clients&utm_content=reddit-ruby-homepage), the [API documentation](https://crawlora.net/docs?utm_source=rubygems&utm_medium=referral&utm_campaign=platform-clients&utm_content=reddit-ruby-api-docs), and [the package repository](https://github.com/Crawlora-org/crawlora-reddit) for account setup, the API operation reference, and release history.
|
|
@@ -19,17 +19,17 @@ module Crawlora
|
|
|
19
19
|
end
|
|
20
20
|
|
|
21
21
|
OPERATIONS = JSON.parse(<<~'JSON').freeze
|
|
22
|
-
{"reddit-comments": {"bodyParam": null, "bodyRequired": false, "id": "reddit-comments", "method": "GET", "params": [{"description": "Reddit post id or t3_ id", "in": "path", "name": "id", "required": true, "type": "string", "x-example": "1tka90t"}, {"default": "confidence", "description": "Comment order: confidence, top, new, controversial, old, or qa. Applied to the anonymous HTML request when metrics are enabled.", "enum": ["confidence", "top", "new", "controversial", "old", "qa"], "in": "query", "name": "sort", "type": "string"}, {"description": "Maximum comments returned, defaults to 25 and clamps to 100", "in": "query", "name": "limit", "type": "integer"}, {"default": 3, "description": "Maximum flat comment depth returned in metrics mode.", "in": "query", "name": "depth", "type": "integer"}, {"default": false, "description": "Include public post and per-comment engagement metrics; costs 3 credits instead of 1", "in": "query", "name": "include_metrics", "type": "boolean"}], "path": "/reddit/comments/{id}", "pathParams": ["id"], "produces": ["application/json"], "queryParams": [{"enum": ["confidence", "top", "new", "controversial", "old", "qa"], "in": "query", "name": "sort", "type": "string"}, {"in": "query", "name": "limit", "type": "integer"}, {"in": "query", "name": "depth", "type": "integer"}, {"in": "query", "name": "include_metrics", "type": "boolean"}], "security": ["ApiKeyAuth"]}, "reddit-domain-posts": {"bodyParam": null, "bodyRequired": false, "id": "reddit-domain-posts", "method": "GET", "params": [{"description": "Domain hostname, without scheme or path", "in": "path", "name": "domain", "required": true, "type": "string", "x-example": "openai.com"}, {"default": "hot", "description": "Sort: hot, new, top, or rising", "enum": ["hot", "new", "top", "rising"], "in": "query", "name": "sort", "type": "string"}, {"description": "Time window for top sort: hour, day, week, month, year, or all", "enum": ["hour", "day", "week", "month", "year", "all"], "in": "query", "name": "time", "type": "string"}, {"description": "Maximum posts, defaults to 25 and clamps to 100", "in": "query", "name": "limit", "type": "integer"}, {"description": "Reddit pagination token", "in": "query", "name": "after", "type": "string"}], "path": "/reddit/domain/{domain}/posts", "pathParams": ["domain"], "produces": ["application/json"], "queryParams": [{"enum": ["hot", "new", "top", "rising"], "in": "query", "name": "sort", "type": "string"}, {"enum": ["hour", "day", "week", "month", "year", "all"], "in": "query", "name": "time", "type": "string"}, {"in": "query", "name": "limit", "type": "integer"}, {"in": "query", "name": "after", "type": "string"}], "security": ["ApiKeyAuth"]}, "reddit-leads": {"bodyParam": null, "bodyRequired": false, "id": "reddit-leads", "method": "GET", "params": [{"description": "What you offer, in plain language", "in": "query", "name": "q", "required": true, "type": "string", "x-example": "crm for small teams"}, {"description": "Restrict the search to a subreddit name, without r/", "in": "query", "name": "subreddit", "type": "string"}, {"default": "relevance", "description": "Sort: relevance, hot, new, top, or comments", "enum": ["relevance", "hot", "new", "top", "comments"], "in": "query", "name": "sort", "type": "string"}, {"default": "month", "description": "Time window: hour, day, week, month, year, or all", "enum": ["hour", "day", "week", "month", "year", "all"], "in": "query", "name": "time", "type": "string"}, {"description": "Maximum leads returned, defaults to 25 and clamps to 100", "in": "query", "name": "limit", "type": "integer"}, {"description": "Minimum buying-intent score to return, 0-10, defaults to 4", "in": "query", "name": "min_score", "type": "integer"}, {"default": "auto", "description": "Classifier: auto uses the model when configured, heuristic skips it, llm requires it", "enum": ["auto", "heuristic", "llm"], "in": "query", "name": "classifier", "type": "string"}], "path": "/reddit/leads", "pathParams": [], "produces": ["application/json"], "queryParams": [{"in": "query", "name": "q", "required": true, "type": "string"}, {"in": "query", "name": "subreddit", "type": "string"}, {"enum": ["relevance", "hot", "new", "top", "comments"], "in": "query", "name": "sort", "type": "string"}, {"enum": ["hour", "day", "week", "month", "year", "all"], "in": "query", "name": "time", "type": "string"}, {"in": "query", "name": "limit", "type": "integer"}, {"in": "query", "name": "min_score", "type": "integer"}, {"enum": ["auto", "heuristic", "llm"], "in": "query", "name": "classifier", "type": "string"}], "security": ["ApiKeyAuth"]}, "reddit-post": {"bodyParam": null, "bodyRequired": false, "id": "reddit-post", "method": "GET", "params": [{"description": "Reddit post id or t3_ id", "in": "path", "name": "id", "required": true, "type": "string", "x-example": "1v8hy3q"}, {"default": false, "description": "Include public engagement metrics; costs 3 credits instead of 1", "in": "query", "name": "include_metrics", "type": "boolean"}], "path": "/reddit/post/{id}", "pathParams": ["id"], "produces": ["application/json"], "queryParams": [{"in": "query", "name": "include_metrics", "type": "boolean"}], "security": ["ApiKeyAuth"]}, "reddit-search": {"bodyParam": null, "bodyRequired": false, "id": "reddit-search", "method": "GET", "params": [{"description": "Search keywords", "in": "query", "name": "q", "required": true, "type": "string", "x-example": "gpt"}, {"description": "Restrict search to a subreddit name, without r/", "in": "query", "name": "subreddit", "type": "string"}, {"default": "relevance", "description": "Sort: relevance, hot, new, top, or comments", "enum": ["relevance", "hot", "new", "top", "comments"], "in": "query", "name": "sort", "type": "string"}, {"description": "Time window for top/comments sorts: hour, day, week, month, year, or all", "enum": ["hour", "day", "week", "month", "year", "all"], "in": "query", "name": "time", "type": "string"}, {"description": "Maximum posts, defaults to 25 and clamps to 100", "in": "query", "name": "limit", "type": "integer"}, {"description": "Reddit pagination token", "in": "query", "name": "after", "type": "string"}], "path": "/reddit/search", "pathParams": [], "produces": ["application/json"], "queryParams": [{"in": "query", "name": "q", "required": true, "type": "string"}, {"in": "query", "name": "subreddit", "type": "string"}, {"enum": ["relevance", "hot", "new", "top", "comments"], "in": "query", "name": "sort", "type": "string"}, {"enum": ["hour", "day", "week", "month", "year", "all"], "in": "query", "name": "time", "type": "string"}, {"in": "query", "name": "limit", "type": "integer"}, {"in": "query", "name": "after", "type": "string"}], "security": ["ApiKeyAuth"]}, "reddit-subreddit-about": {"bodyParam": null, "bodyRequired": false, "id": "reddit-subreddit-about", "method": "GET", "params": [{"description": "Subreddit name, without r/", "in": "path", "name": "subreddit", "required": true, "type": "string", "x-example": "OpenAI"}, {"description": "Maximum sample posts inspected, defaults to 25 and clamps to 100", "in": "query", "name": "limit", "type": "integer"}], "path": "/reddit/subreddit/{subreddit}/about", "pathParams": ["subreddit"], "produces": ["application/json"], "queryParams": [{"in": "query", "name": "limit", "type": "integer"}], "security": ["ApiKeyAuth"]}, "reddit-subreddit-comments": {"bodyParam": null, "bodyRequired": false, "id": "reddit-subreddit-comments", "method": "GET", "params": [{"description": "Subreddit name, without r/", "in": "path", "name": "subreddit", "required": true, "type": "string", "x-example": "OpenAI"}, {"description": "Maximum comments, defaults to 25 and clamps to 100", "in": "query", "name": "limit", "type": "integer"}, {"description": "Reddit pagination token", "in": "query", "name": "after", "type": "string"}], "path": "/reddit/subreddit/{subreddit}/comments", "pathParams": ["subreddit"], "produces": ["application/json"], "queryParams": [{"in": "query", "name": "limit", "type": "integer"}, {"in": "query", "name": "after", "type": "string"}], "security": ["ApiKeyAuth"]}, "reddit-subreddit-posts": {"bodyParam": null, "bodyRequired": false, "id": "reddit-subreddit-posts", "method": "GET", "params": [{"description": "Subreddit name, without r/", "in": "path", "name": "subreddit", "required": true, "type": "string", "x-example": "OpenAI"}, {"default": "hot", "description": "Sort: hot, new, top, or rising", "enum": ["hot", "new", "top", "rising"], "in": "query", "name": "sort", "type": "string"}, {"description": "Time window for top sort: hour, day, week, month, year, or all", "enum": ["hour", "day", "week", "month", "year", "all"], "in": "query", "name": "time", "type": "string"}, {"description": "Maximum posts, defaults to 25 and clamps to 100", "in": "query", "name": "limit", "type": "integer"}, {"description": "Reddit pagination token", "in": "query", "name": "after", "type": "string"}], "path": "/reddit/subreddit/{subreddit}/posts", "pathParams": ["subreddit"], "produces": ["application/json"], "queryParams": [{"enum": ["hot", "new", "top", "rising"], "in": "query", "name": "sort", "type": "string"}, {"enum": ["hour", "day", "week", "month", "year", "all"], "in": "query", "name": "time", "type": "string"}, {"in": "query", "name": "limit", "type": "integer"}, {"in": "query", "name": "after", "type": "string"}], "security": ["ApiKeyAuth"]}, "reddit-subreddits-posts": {"bodyParam": null, "bodyRequired": false, "id": "reddit-subreddits-posts", "method": "GET", "params": [{"description": "Comma-separated subreddit names, without r/, maximum 10", "in": "query", "name": "subreddits", "required": true, "type": "string", "x-example": "OpenAI,MachineLearning"}, {"default": "hot", "description": "Sort: hot, new, top, or rising", "enum": ["hot", "new", "top", "rising"], "in": "query", "name": "sort", "type": "string"}, {"description": "Time window for top sort: hour, day, week, month, year, or all", "enum": ["hour", "day", "week", "month", "year", "all"], "in": "query", "name": "time", "type": "string"}, {"description": "Maximum posts, defaults to 25 and clamps to 100", "in": "query", "name": "limit", "type": "integer"}, {"description": "Reddit pagination token", "in": "query", "name": "after", "type": "string"}], "path": "/reddit/subreddits/posts", "pathParams": [], "produces": ["application/json"], "queryParams": [{"in": "query", "name": "subreddits", "required": true, "type": "string"}, {"enum": ["hot", "new", "top", "rising"], "in": "query", "name": "sort", "type": "string"}, {"enum": ["hour", "day", "week", "month", "year", "all"], "in": "query", "name": "time", "type": "string"}, {"in": "query", "name": "limit", "type": "integer"}, {"in": "query", "name": "after", "type": "string"}], "security": ["ApiKeyAuth"]}, "reddit-trends": {"bodyParam": null, "bodyRequired": false, "id": "reddit-trends", "method": "GET", "params": [{"default": "hot", "description": "Sort: hot, new, rising, or top", "enum": ["hot", "new", "rising", "top"], "in": "query", "name": "sort", "type": "string"}, {"description": "Time window for top sort: hour, day, week, month, year, or all", "enum": ["hour", "day", "week", "month", "year", "all"], "in": "query", "name": "time", "type": "string"}, {"description": "Maximum posts, defaults to 25 and clamps to 100", "in": "query", "name": "limit", "type": "integer"}, {"description": "Reddit pagination token", "in": "query", "name": "after", "type": "string"}], "path": "/reddit/trends", "pathParams": [], "produces": ["application/json"], "queryParams": [{"enum": ["hot", "new", "rising", "top"], "in": "query", "name": "sort", "type": "string"}, {"enum": ["hour", "day", "week", "month", "year", "all"], "in": "query", "name": "time", "type": "string"}, {"in": "query", "name": "limit", "type": "integer"}, {"in": "query", "name": "after", "type": "string"}], "security": ["ApiKeyAuth"]}, "reddit-user-comments": {"bodyParam": null, "bodyRequired": false, "id": "reddit-user-comments", "method": "GET", "params": [{"description": "Public Reddit username, without u/", "in": "path", "name": "username", "required": true, "type": "string", "x-example": "reddit"}, {"description": "Maximum comments, defaults to 25 and clamps to 100", "in": "query", "name": "limit", "type": "integer"}, {"description": "Reddit pagination token", "in": "query", "name": "after", "type": "string"}], "path": "/reddit/user/{username}/comments", "pathParams": ["username"], "produces": ["application/json"], "queryParams": [{"in": "query", "name": "limit", "type": "integer"}, {"in": "query", "name": "after", "type": "string"}], "security": ["ApiKeyAuth"]}, "reddit-user-posts": {"bodyParam": null, "bodyRequired": false, "id": "reddit-user-posts", "method": "GET", "params": [{"description": "Public Reddit username, without u/", "in": "path", "name": "username", "required": true, "type": "string", "x-example": "reddit"}, {"description": "Maximum posts, defaults to 25 and clamps to 100", "in": "query", "name": "limit", "type": "integer"}, {"description": "Reddit pagination token", "in": "query", "name": "after", "type": "string"}], "path": "/reddit/user/{username}/posts", "pathParams": ["username"], "produces": ["application/json"], "queryParams": [{"in": "query", "name": "limit", "type": "integer"}, {"in": "query", "name": "after", "type": "string"}], "security": ["ApiKeyAuth"]}}
|
|
22
|
+
{"reddit-archive-comments-ids": {"bodyParam": null, "bodyRequired": false, "id": "reddit-archive-comments-ids", "method": "GET", "params": [{"description": "Comma-separated Reddit comment ids (1-1,000); optional t1_ prefixes are accepted", "in": "query", "name": "ids", "required": true, "type": "string", "x-example": "c60n05h,abc123"}], "path": "/reddit/archive/comments/ids", "pathParams": [], "produces": ["application/json"], "queryParams": [{"in": "query", "name": "ids", "required": true, "type": "string"}], "security": ["ApiKeyAuth"]}, "reddit-archive-comments-search": {"bodyParam": null, "bodyRequired": false, "id": "reddit-archive-comments-search", "method": "GET", "params": [{"description": "Public Reddit username filter", "in": "query", "name": "author", "type": "string"}, {"description": "Subreddit name filter", "in": "query", "name": "subreddit", "type": "string"}, {"description": "Full-text search within comment bodies; requires author, subreddit, link_id, or parent_id", "in": "query", "name": "query", "type": "string"}, {"description": "Reddit post id to scope comments", "in": "query", "name": "link_id", "type": "string"}, {"description": "Parent comment id; an explicitly empty value selects top-level comments", "in": "query", "name": "parent_id", "type": "string"}, {"description": "Creation-time lower bound; accepts epoch seconds or milliseconds, ISO 8601 dates, or relative offsets such as 1year, 2d, or 5min", "in": "query", "name": "created_after", "type": "string"}, {"description": "Creation-time upper bound; accepts epoch seconds or milliseconds, ISO 8601 dates, or relative offsets such as 1year, 2d, or 5min", "in": "query", "name": "created_before", "type": "string"}, {"default": "desc", "description": "Sort by creation time", "enum": ["asc", "desc"], "in": "query", "name": "sort", "type": "string"}, {"description": "Maximum comments, defaults to 25 and clamps to 100", "in": "query", "name": "limit", "type": "integer"}], "path": "/reddit/archive/comments/search", "pathParams": [], "produces": ["application/json"], "queryParams": [{"in": "query", "name": "author", "type": "string"}, {"in": "query", "name": "subreddit", "type": "string"}, {"in": "query", "name": "query", "type": "string"}, {"in": "query", "name": "link_id", "type": "string"}, {"in": "query", "name": "parent_id", "type": "string"}, {"in": "query", "name": "created_after", "type": "string"}, {"in": "query", "name": "created_before", "type": "string"}, {"enum": ["asc", "desc"], "in": "query", "name": "sort", "type": "string"}, {"in": "query", "name": "limit", "type": "integer"}], "security": ["ApiKeyAuth"]}, "reddit-archive-comments-tree": {"bodyParam": null, "bodyRequired": false, "id": "reddit-archive-comments-tree", "method": "GET", "params": [{"description": "Reddit post id or t3_ id", "in": "path", "name": "id", "required": true, "type": "string", "x-example": "7cff0b"}, {"description": "Parent comment id; an explicitly empty value selects top-level comments", "in": "query", "name": "parent_id", "type": "string"}, {"description": "Maximum archive comment nodes to expand, defaults to 50 and clamps to 100", "in": "query", "name": "limit", "type": "integer"}, {"description": "Initial breadth, defaults to 2 and must be between 0 and 8", "in": "query", "name": "start_breadth", "type": "integer"}, {"description": "Initial depth, defaults to 3 and must be between 0 and 8", "in": "query", "name": "start_depth", "type": "integer"}], "path": "/reddit/archive/comments/{id}/tree", "pathParams": ["id"], "produces": ["application/json"], "queryParams": [{"in": "query", "name": "parent_id", "type": "string"}, {"in": "query", "name": "limit", "type": "integer"}, {"in": "query", "name": "start_breadth", "type": "integer"}, {"in": "query", "name": "start_depth", "type": "integer"}], "security": ["ApiKeyAuth"]}, "reddit-archive-posts-ids": {"bodyParam": null, "bodyRequired": false, "id": "reddit-archive-posts-ids", "method": "GET", "params": [{"description": "Comma-separated Reddit post ids (1-1,000); optional t3_ prefixes are accepted", "in": "query", "name": "ids", "required": true, "type": "string", "x-example": "1wwa2ff,z1c9z"}], "path": "/reddit/archive/posts/ids", "pathParams": [], "produces": ["application/json"], "queryParams": [{"in": "query", "name": "ids", "required": true, "type": "string"}], "security": ["ApiKeyAuth"]}, "reddit-archive-posts-search": {"bodyParam": null, "bodyRequired": false, "id": "reddit-archive-posts-search", "method": "GET", "params": [{"description": "Text search across archived post titles and selftext", "in": "query", "name": "query", "type": "string"}, {"description": "Public Reddit username filter", "in": "query", "name": "author", "type": "string"}, {"description": "Subreddit name filter", "in": "query", "name": "subreddit", "type": "string"}, {"description": "Linked URL prefix filter", "in": "query", "name": "url", "type": "string"}, {"description": "Require an exact URL match; requires url", "in": "query", "name": "url_exact", "type": "boolean"}, {"description": "Creation-time lower bound; accepts epoch seconds or milliseconds, ISO 8601 dates, or relative offsets such as 1year, 2d, or 5min", "in": "query", "name": "created_after", "type": "string"}, {"description": "Creation-time upper bound; accepts epoch seconds or milliseconds, ISO 8601 dates, or relative offsets such as 1year, 2d, or 5min", "in": "query", "name": "created_before", "type": "string"}, {"default": "desc", "description": "Sort by creation time", "enum": ["asc", "desc"], "in": "query", "name": "sort", "type": "string"}, {"description": "Maximum posts, defaults to 25 and clamps to 100", "in": "query", "name": "limit", "type": "integer"}], "path": "/reddit/archive/posts/search", "pathParams": [], "produces": ["application/json"], "queryParams": [{"in": "query", "name": "query", "type": "string"}, {"in": "query", "name": "author", "type": "string"}, {"in": "query", "name": "subreddit", "type": "string"}, {"in": "query", "name": "url", "type": "string"}, {"in": "query", "name": "url_exact", "type": "boolean"}, {"in": "query", "name": "created_after", "type": "string"}, {"in": "query", "name": "created_before", "type": "string"}, {"enum": ["asc", "desc"], "in": "query", "name": "sort", "type": "string"}, {"in": "query", "name": "limit", "type": "integer"}], "security": ["ApiKeyAuth"]}, "reddit-archive-subreddits-search": {"bodyParam": null, "bodyRequired": false, "id": "reddit-archive-subreddits-search", "method": "GET", "params": [{"description": "Subreddit name prefix, with or without r/", "in": "query", "name": "query", "required": true, "type": "string", "x-example": "OpenAI"}, {"description": "Minimum archived subscriber count", "in": "query", "name": "min_subscribers", "type": "integer"}, {"description": "Maximum archived subscriber count", "in": "query", "name": "max_subscribers", "type": "integer"}, {"description": "Filter by archived NSFW status", "in": "query", "name": "over_18", "type": "boolean"}, {"default": "subscribers", "description": "Sort field", "enum": ["created_utc", "subscribers", "subreddit"], "in": "query", "name": "sort_by", "type": "string"}, {"default": "desc", "description": "Sort direction", "enum": ["asc", "desc"], "in": "query", "name": "sort", "type": "string"}, {"description": "Maximum subreddits, defaults to 25 and clamps to 100", "in": "query", "name": "limit", "type": "integer"}], "path": "/reddit/archive/subreddits/search", "pathParams": [], "produces": ["application/json"], "queryParams": [{"in": "query", "name": "query", "required": true, "type": "string"}, {"in": "query", "name": "min_subscribers", "type": "integer"}, {"in": "query", "name": "max_subscribers", "type": "integer"}, {"in": "query", "name": "over_18", "type": "boolean"}, {"enum": ["created_utc", "subscribers", "subreddit"], "in": "query", "name": "sort_by", "type": "string"}, {"enum": ["asc", "desc"], "in": "query", "name": "sort", "type": "string"}, {"in": "query", "name": "limit", "type": "integer"}], "security": ["ApiKeyAuth"]}, "reddit-archive-time-series": {"bodyParam": null, "bodyRequired": false, "id": "reddit-archive-time-series", "method": "GET", "params": [{"description": "Archive metric", "enum": ["posts_count", "comments_count", "posts_score_sum", "comments_score_sum", "posts_retrieval_delay_seconds_sum", "comments_retrieval_delay_seconds_sum", "subreddit_subscribers"], "in": "query", "name": "metric", "required": true, "type": "string", "x-example": "posts_count"}, {"description": "Optional subreddit scope; required for subreddit_subscribers, and unsupported for retrieval-delay metrics", "in": "query", "name": "subreddit", "type": "string", "x-example": "OpenAI"}, {"description": "Time bucket precision", "enum": ["year", "quarter", "month", "week", "day", "hour", "minute"], "in": "query", "name": "precision", "required": true, "type": "string", "x-example": "year"}, {"description": "Absolute start time: epoch seconds/milliseconds or ISO 8601", "in": "query", "name": "created_after", "required": true, "type": "string", "x-example": "2024-01-01"}, {"description": "Absolute end time: epoch seconds/milliseconds or ISO 8601", "in": "query", "name": "created_before", "required": true, "type": "string", "x-example": "2025-01-01"}], "path": "/reddit/archive/time-series", "pathParams": [], "produces": ["application/json"], "queryParams": [{"enum": ["posts_count", "comments_count", "posts_score_sum", "comments_score_sum", "posts_retrieval_delay_seconds_sum", "comments_retrieval_delay_seconds_sum", "subreddit_subscribers"], "in": "query", "name": "metric", "required": true, "type": "string"}, {"in": "query", "name": "subreddit", "type": "string"}, {"enum": ["year", "quarter", "month", "week", "day", "hour", "minute"], "in": "query", "name": "precision", "required": true, "type": "string"}, {"in": "query", "name": "created_after", "required": true, "type": "string"}, {"in": "query", "name": "created_before", "required": true, "type": "string"}], "security": ["ApiKeyAuth"]}, "reddit-comment": {"bodyParam": null, "bodyRequired": false, "id": "reddit-comment", "method": "GET", "params": [{"description": "Comment id with or without t1_, or a comment URL", "in": "path", "name": "id", "required": true, "type": "string", "x-example": "p8402di"}], "path": "/reddit/comment/{id}", "pathParams": ["id"], "produces": ["application/json"], "queryParams": [], "security": ["ApiKeyAuth"]}, "reddit-comment-awards": {"bodyParam": null, "bodyRequired": false, "id": "reddit-comment-awards", "method": "GET", "params": [{"description": "Comment id with or without t1_, or a comment URL", "in": "path", "name": "id", "required": true, "type": "string", "x-example": "19shpw8bwhfnn"}], "path": "/reddit/comment/{id}/awards", "pathParams": ["id"], "produces": ["application/json"], "queryParams": [], "security": ["ApiKeyAuth"]}, "reddit-comments": {"bodyParam": null, "bodyRequired": false, "id": "reddit-comments", "method": "GET", "params": [{"description": "Reddit post id or t3_ id", "in": "path", "name": "id", "required": true, "type": "string", "x-example": "1tka90t"}, {"default": "confidence", "description": "Comment order: confidence, top, new, controversial, old, or qa.", "enum": ["confidence", "top", "new", "controversial", "old", "qa"], "in": "query", "name": "sort", "type": "string"}, {"description": "Maximum comments returned, defaults to 25 and clamps to 100", "in": "query", "name": "limit", "type": "integer"}, {"default": 3, "description": "Maximum flat comment depth returned.", "in": "query", "name": "depth", "type": "integer"}], "path": "/reddit/comments/{id}", "pathParams": ["id"], "produces": ["application/json"], "queryParams": [{"enum": ["confidence", "top", "new", "controversial", "old", "qa"], "in": "query", "name": "sort", "type": "string"}, {"in": "query", "name": "limit", "type": "integer"}, {"in": "query", "name": "depth", "type": "integer"}], "security": ["ApiKeyAuth"]}, "reddit-domain-posts": {"bodyParam": null, "bodyRequired": false, "id": "reddit-domain-posts", "method": "GET", "params": [{"description": "Domain hostname, without scheme or path", "in": "path", "name": "domain", "required": true, "type": "string", "x-example": "openai.com"}, {"default": "hot", "description": "Sort: hot, new, top, or rising", "enum": ["hot", "new", "top", "rising"], "in": "query", "name": "sort", "type": "string"}, {"description": "Time window for top sort: hour, day, week, month, year, or all", "enum": ["hour", "day", "week", "month", "year", "all"], "in": "query", "name": "time", "type": "string"}, {"description": "Maximum posts, defaults to 25 and clamps to 100", "in": "query", "name": "limit", "type": "integer"}, {"description": "Reddit pagination token", "in": "query", "name": "after", "type": "string"}], "path": "/reddit/domain/{domain}/posts", "pathParams": ["domain"], "produces": ["application/json"], "queryParams": [{"enum": ["hot", "new", "top", "rising"], "in": "query", "name": "sort", "type": "string"}, {"enum": ["hour", "day", "week", "month", "year", "all"], "in": "query", "name": "time", "type": "string"}, {"in": "query", "name": "limit", "type": "integer"}, {"in": "query", "name": "after", "type": "string"}], "security": ["ApiKeyAuth"]}, "reddit-leads": {"bodyParam": null, "bodyRequired": false, "id": "reddit-leads", "method": "GET", "params": [{"description": "What you offer, in plain language", "in": "query", "name": "q", "required": true, "type": "string", "x-example": "crm for small teams"}, {"description": "Restrict the search to a subreddit name, without r/", "in": "query", "name": "subreddit", "type": "string"}, {"default": "relevance", "description": "Sort: relevance, hot, new, top, or comments", "enum": ["relevance", "hot", "new", "top", "comments"], "in": "query", "name": "sort", "type": "string"}, {"default": "month", "description": "Time window: hour, day, week, month, year, or all", "enum": ["hour", "day", "week", "month", "year", "all"], "in": "query", "name": "time", "type": "string"}, {"description": "Maximum leads returned, defaults to 25 and clamps to 100", "in": "query", "name": "limit", "type": "integer"}, {"description": "Minimum buying-intent score to return, 0-10, defaults to 4", "in": "query", "name": "min_score", "type": "integer"}, {"default": "auto", "description": "Classifier: auto uses the model when configured, heuristic skips it, llm requires it", "enum": ["auto", "heuristic", "llm"], "in": "query", "name": "classifier", "type": "string"}], "path": "/reddit/leads", "pathParams": [], "produces": ["application/json"], "queryParams": [{"in": "query", "name": "q", "required": true, "type": "string"}, {"in": "query", "name": "subreddit", "type": "string"}, {"enum": ["relevance", "hot", "new", "top", "comments"], "in": "query", "name": "sort", "type": "string"}, {"enum": ["hour", "day", "week", "month", "year", "all"], "in": "query", "name": "time", "type": "string"}, {"in": "query", "name": "limit", "type": "integer"}, {"in": "query", "name": "min_score", "type": "integer"}, {"enum": ["auto", "heuristic", "llm"], "in": "query", "name": "classifier", "type": "string"}], "security": ["ApiKeyAuth"]}, "reddit-popular": {"bodyParam": null, "bodyRequired": false, "id": "reddit-popular", "method": "GET", "params": [{"default": "hot", "description": "Sort order: hot or top", "enum": ["hot", "top"], "in": "query", "name": "sort", "type": "string"}, {"description": "Time window for top: hour, day, week, month, year, or all", "enum": ["hour", "day", "week", "month", "year", "all"], "in": "query", "name": "time", "type": "string"}, {"description": "Maximum posts, defaults to 25 and clamps to 100", "in": "query", "name": "limit", "type": "integer"}, {"description": "Pagination cursor from a previous response", "in": "query", "name": "after", "type": "string"}], "path": "/reddit/popular", "pathParams": [], "produces": ["application/json"], "queryParams": [{"enum": ["hot", "top"], "in": "query", "name": "sort", "type": "string"}, {"enum": ["hour", "day", "week", "month", "year", "all"], "in": "query", "name": "time", "type": "string"}, {"in": "query", "name": "limit", "type": "integer"}, {"in": "query", "name": "after", "type": "string"}], "security": ["ApiKeyAuth"]}, "reddit-post": {"bodyParam": null, "bodyRequired": false, "id": "reddit-post", "method": "GET", "params": [{"description": "Reddit post id or t3_ id", "in": "path", "name": "id", "required": true, "type": "string", "x-example": "1v8hy3q"}], "path": "/reddit/post/{id}", "pathParams": ["id"], "produces": ["application/json"], "queryParams": [], "security": ["ApiKeyAuth"]}, "reddit-post-awards": {"bodyParam": null, "bodyRequired": false, "id": "reddit-post-awards", "method": "GET", "params": [{"description": "Reddit post id or t3_ id", "in": "path", "name": "id", "required": true, "type": "string", "x-example": "1v8hy3q"}], "path": "/reddit/post/{id}/awards", "pathParams": ["id"], "produces": ["application/json"], "queryParams": [], "security": ["ApiKeyAuth"]}, "reddit-posts-by-ids": {"bodyParam": null, "bodyRequired": false, "id": "reddit-posts-by-ids", "method": "GET", "params": [{"description": "Comma-separated post ids, with or without the t3_ prefix (maximum 100)", "in": "query", "name": "ids", "required": true, "type": "string", "x-example": "1v8hy3q,1tka90t"}], "path": "/reddit/posts/ids", "pathParams": [], "produces": ["application/json"], "queryParams": [{"in": "query", "name": "ids", "required": true, "type": "string"}], "security": ["ApiKeyAuth"]}, "reddit-search": {"bodyParam": null, "bodyRequired": false, "id": "reddit-search", "method": "GET", "params": [{"description": "Search keywords", "in": "query", "name": "q", "required": true, "type": "string", "x-example": "gpt"}, {"description": "Restrict search to a subreddit name, without r/", "in": "query", "name": "subreddit", "type": "string"}, {"default": "relevance", "description": "Sort: relevance, hot, new, top, or comments", "enum": ["relevance", "hot", "new", "top", "comments"], "in": "query", "name": "sort", "type": "string"}, {"description": "Time window for top/comments sorts: hour, day, week, month, year, or all", "enum": ["hour", "day", "week", "month", "year", "all"], "in": "query", "name": "time", "type": "string"}, {"description": "Maximum posts, defaults to 25 and clamps to 100", "in": "query", "name": "limit", "type": "integer"}, {"description": "Reddit pagination token", "in": "query", "name": "after", "type": "string"}], "path": "/reddit/search", "pathParams": [], "produces": ["application/json"], "queryParams": [{"in": "query", "name": "q", "required": true, "type": "string"}, {"in": "query", "name": "subreddit", "type": "string"}, {"enum": ["relevance", "hot", "new", "top", "comments"], "in": "query", "name": "sort", "type": "string"}, {"enum": ["hour", "day", "week", "month", "year", "all"], "in": "query", "name": "time", "type": "string"}, {"in": "query", "name": "limit", "type": "integer"}, {"in": "query", "name": "after", "type": "string"}], "security": ["ApiKeyAuth"]}, "reddit-search-comments": {"bodyParam": null, "bodyRequired": false, "id": "reddit-search-comments", "method": "GET", "params": [{"description": "Search keywords", "in": "query", "name": "q", "required": true, "type": "string", "x-example": "golang generics"}, {"description": "Restrict search to a subreddit name, without r/", "in": "query", "name": "subreddit", "type": "string"}, {"default": "relevance", "description": "Sort: relevance, hot, new, top, or comments", "enum": ["relevance", "hot", "new", "top", "comments"], "in": "query", "name": "sort", "type": "string"}, {"description": "Time window for top/comments sorts: hour, day, week, month, year, or all", "enum": ["hour", "day", "week", "month", "year", "all"], "in": "query", "name": "time", "type": "string"}, {"description": "Maximum comments, defaults to 25 and clamps to 100", "in": "query", "name": "limit", "type": "integer"}, {"description": "Opaque app pagination cursor from a previous response", "in": "query", "name": "after", "type": "string"}], "path": "/reddit/search/comments", "pathParams": [], "produces": ["application/json"], "queryParams": [{"in": "query", "name": "q", "required": true, "type": "string"}, {"in": "query", "name": "subreddit", "type": "string"}, {"enum": ["relevance", "hot", "new", "top", "comments"], "in": "query", "name": "sort", "type": "string"}, {"enum": ["hour", "day", "week", "month", "year", "all"], "in": "query", "name": "time", "type": "string"}, {"in": "query", "name": "limit", "type": "integer"}, {"in": "query", "name": "after", "type": "string"}], "security": ["ApiKeyAuth"]}, "reddit-search-people": {"bodyParam": null, "bodyRequired": false, "id": "reddit-search-people", "method": "GET", "params": [{"description": "Username or profile keyword", "in": "query", "name": "q", "required": true, "type": "string", "x-example": "spez"}, {"default": "relevance", "description": "Sort: relevance, hot, new, top, or comments", "enum": ["relevance", "hot", "new", "top", "comments"], "in": "query", "name": "sort", "type": "string"}, {"description": "Maximum people, defaults to 25 and clamps to 100", "in": "query", "name": "limit", "type": "integer"}, {"description": "Opaque app pagination cursor from a previous response", "in": "query", "name": "after", "type": "string"}], "path": "/reddit/search/people", "pathParams": [], "produces": ["application/json"], "queryParams": [{"in": "query", "name": "q", "required": true, "type": "string"}, {"enum": ["relevance", "hot", "new", "top", "comments"], "in": "query", "name": "sort", "type": "string"}, {"in": "query", "name": "limit", "type": "integer"}, {"in": "query", "name": "after", "type": "string"}], "security": ["ApiKeyAuth"]}, "reddit-subreddit-about": {"bodyParam": null, "bodyRequired": false, "id": "reddit-subreddit-about", "method": "GET", "params": [{"description": "Subreddit name, without r/", "in": "path", "name": "subreddit", "required": true, "type": "string", "x-example": "OpenAI"}, {"description": "Maximum sample posts inspected, defaults to 25 and clamps to 100", "in": "query", "name": "limit", "type": "integer"}], "path": "/reddit/subreddit/{subreddit}/about", "pathParams": ["subreddit"], "produces": ["application/json"], "queryParams": [{"in": "query", "name": "limit", "type": "integer"}], "security": ["ApiKeyAuth"]}, "reddit-subreddit-comments": {"bodyParam": null, "bodyRequired": false, "id": "reddit-subreddit-comments", "method": "GET", "params": [{"description": "Subreddit name, without r/", "in": "path", "name": "subreddit", "required": true, "type": "string", "x-example": "OpenAI"}, {"description": "Maximum comments, defaults to 25 and clamps to 100", "in": "query", "name": "limit", "type": "integer"}, {"description": "Reddit pagination token", "in": "query", "name": "after", "type": "string"}], "path": "/reddit/subreddit/{subreddit}/comments", "pathParams": ["subreddit"], "produces": ["application/json"], "queryParams": [{"in": "query", "name": "limit", "type": "integer"}, {"in": "query", "name": "after", "type": "string"}], "security": ["ApiKeyAuth"]}, "reddit-subreddit-flairs": {"bodyParam": null, "bodyRequired": false, "id": "reddit-subreddit-flairs", "method": "GET", "params": [{"description": "Subreddit name, without r/", "in": "path", "name": "subreddit", "required": true, "type": "string", "x-example": "golang"}], "path": "/reddit/subreddit/{subreddit}/flairs", "pathParams": ["subreddit"], "produces": ["application/json"], "queryParams": [], "security": ["ApiKeyAuth"]}, "reddit-subreddit-highlights": {"bodyParam": null, "bodyRequired": false, "id": "reddit-subreddit-highlights", "method": "GET", "params": [{"description": "Subreddit name, without r/", "in": "path", "name": "subreddit", "required": true, "type": "string", "x-example": "golang"}], "path": "/reddit/subreddit/{subreddit}/highlights", "pathParams": ["subreddit"], "produces": ["application/json"], "queryParams": [], "security": ["ApiKeyAuth"]}, "reddit-subreddit-leaderboard-categories": {"bodyParam": null, "bodyRequired": false, "id": "reddit-subreddit-leaderboard-categories", "method": "GET", "params": [{"description": "Subreddit name, without r/", "in": "path", "name": "subreddit", "required": true, "type": "string", "x-example": "golang"}], "path": "/reddit/subreddit/{subreddit}/leaderboard/categories", "pathParams": ["subreddit"], "produces": ["application/json"], "queryParams": [], "security": ["ApiKeyAuth"]}, "reddit-subreddit-posts": {"bodyParam": null, "bodyRequired": false, "id": "reddit-subreddit-posts", "method": "GET", "params": [{"description": "Subreddit name, without r/", "in": "path", "name": "subreddit", "required": true, "type": "string", "x-example": "OpenAI"}, {"default": "hot", "description": "Sort: hot, new, top, rising, or controversial", "enum": ["hot", "new", "top", "rising", "controversial"], "in": "query", "name": "sort", "type": "string"}, {"description": "Time window for top sort: hour, day, week, month, year, or all", "enum": ["hour", "day", "week", "month", "year", "all"], "in": "query", "name": "time", "type": "string"}, {"description": "Maximum posts, defaults to 25 and clamps to 100", "in": "query", "name": "limit", "type": "integer"}, {"description": "Reddit pagination token", "in": "query", "name": "after", "type": "string"}], "path": "/reddit/subreddit/{subreddit}/posts", "pathParams": ["subreddit"], "produces": ["application/json"], "queryParams": [{"enum": ["hot", "new", "top", "rising", "controversial"], "in": "query", "name": "sort", "type": "string"}, {"enum": ["hour", "day", "week", "month", "year", "all"], "in": "query", "name": "time", "type": "string"}, {"in": "query", "name": "limit", "type": "integer"}, {"in": "query", "name": "after", "type": "string"}], "security": ["ApiKeyAuth"]}, "reddit-subreddit-rules": {"bodyParam": null, "bodyRequired": false, "id": "reddit-subreddit-rules", "method": "GET", "params": [{"description": "Subreddit name, without r/", "in": "path", "name": "subreddit", "required": true, "type": "string", "x-example": "golang"}], "path": "/reddit/subreddit/{subreddit}/rules", "pathParams": ["subreddit"], "produces": ["application/json"], "queryParams": [], "security": ["ApiKeyAuth"]}, "reddit-subreddit-user-flairs": {"bodyParam": null, "bodyRequired": false, "id": "reddit-subreddit-user-flairs", "method": "GET", "params": [{"description": "Subreddit name, without r/", "in": "path", "name": "subreddit", "required": true, "type": "string", "x-example": "nba"}], "path": "/reddit/subreddit/{subreddit}/user-flairs", "pathParams": ["subreddit"], "produces": ["application/json"], "queryParams": [], "security": ["ApiKeyAuth"]}, "reddit-subreddit-wiki": {"bodyParam": null, "bodyRequired": false, "id": "reddit-subreddit-wiki", "method": "GET", "params": [{"description": "Subreddit name, without r/", "in": "path", "name": "subreddit", "required": true, "type": "string", "x-example": "golang"}, {"description": "Wiki page path, defaults to index", "in": "query", "name": "page", "type": "string", "x-example": "index"}], "path": "/reddit/subreddit/{subreddit}/wiki", "pathParams": ["subreddit"], "produces": ["application/json"], "queryParams": [{"in": "query", "name": "page", "type": "string"}], "security": ["ApiKeyAuth"]}, "reddit-subreddits-discover": {"bodyParam": null, "bodyRequired": false, "id": "reddit-subreddits-discover", "method": "GET", "params": [{"default": "popular", "description": "Community feed: popular, new, or default", "enum": ["popular", "new", "default"], "in": "query", "name": "feed", "type": "string"}, {"description": "Maximum communities, defaults to 25 and clamps to 100", "in": "query", "name": "limit", "type": "integer"}, {"description": "Pagination cursor from a previous response", "in": "query", "name": "after", "type": "string"}], "path": "/reddit/subreddits/discover", "pathParams": [], "produces": ["application/json"], "queryParams": [{"enum": ["popular", "new", "default"], "in": "query", "name": "feed", "type": "string"}, {"in": "query", "name": "limit", "type": "integer"}, {"in": "query", "name": "after", "type": "string"}], "security": ["ApiKeyAuth"]}, "reddit-subreddits-posts": {"bodyParam": null, "bodyRequired": false, "id": "reddit-subreddits-posts", "method": "GET", "params": [{"description": "Comma-separated subreddit names, without r/, maximum 10", "in": "query", "name": "subreddits", "required": true, "type": "string", "x-example": "OpenAI,MachineLearning"}, {"default": "hot", "description": "Sort: hot, new, top, or rising", "enum": ["hot", "new", "top", "rising"], "in": "query", "name": "sort", "type": "string"}, {"description": "Time window for top sort: hour, day, week, month, year, or all", "enum": ["hour", "day", "week", "month", "year", "all"], "in": "query", "name": "time", "type": "string"}, {"description": "Maximum posts, defaults to 25 and clamps to 100", "in": "query", "name": "limit", "type": "integer"}, {"description": "Reddit pagination token", "in": "query", "name": "after", "type": "string"}], "path": "/reddit/subreddits/posts", "pathParams": [], "produces": ["application/json"], "queryParams": [{"in": "query", "name": "subreddits", "required": true, "type": "string"}, {"enum": ["hot", "new", "top", "rising"], "in": "query", "name": "sort", "type": "string"}, {"enum": ["hour", "day", "week", "month", "year", "all"], "in": "query", "name": "time", "type": "string"}, {"in": "query", "name": "limit", "type": "integer"}, {"in": "query", "name": "after", "type": "string"}], "security": ["ApiKeyAuth"]}, "reddit-subreddits-search": {"bodyParam": null, "bodyRequired": false, "id": "reddit-subreddits-search", "method": "GET", "params": [{"description": "Community name search query", "in": "query", "name": "q", "required": true, "type": "string", "x-example": "golang"}, {"description": "Maximum communities, defaults to 25 and clamps to 100", "in": "query", "name": "limit", "type": "integer"}, {"description": "Pagination cursor from a previous response", "in": "query", "name": "after", "type": "string"}], "path": "/reddit/subreddits/search", "pathParams": [], "produces": ["application/json"], "queryParams": [{"in": "query", "name": "q", "required": true, "type": "string"}, {"in": "query", "name": "limit", "type": "integer"}, {"in": "query", "name": "after", "type": "string"}], "security": ["ApiKeyAuth"]}, "reddit-subreddits-suggest": {"bodyParam": null, "bodyRequired": false, "id": "reddit-subreddits-suggest", "method": "GET", "params": [{"description": "Community name or prefix", "in": "query", "name": "q", "required": true, "type": "string", "x-example": "golang"}], "path": "/reddit/subreddits/suggest", "pathParams": [], "produces": ["application/json"], "queryParams": [{"in": "query", "name": "q", "required": true, "type": "string"}], "security": ["ApiKeyAuth"]}, "reddit-topics": {"bodyParam": null, "bodyRequired": false, "id": "reddit-topics", "method": "GET", "params": [{"description": "Maximum topics, defaults to 25 and clamps to 100", "in": "query", "name": "limit", "type": "integer"}, {"description": "Opaque app pagination cursor from a previous response", "in": "query", "name": "after", "type": "string"}], "path": "/reddit/topics", "pathParams": [], "produces": ["application/json"], "queryParams": [{"in": "query", "name": "limit", "type": "integer"}, {"in": "query", "name": "after", "type": "string"}], "security": ["ApiKeyAuth"]}, "reddit-topics-broad": {"bodyParam": null, "bodyRequired": false, "id": "reddit-topics-broad", "method": "GET", "params": [], "path": "/reddit/topics/broad", "pathParams": [], "produces": ["application/json"], "queryParams": [], "security": ["ApiKeyAuth"]}, "reddit-topics-search": {"bodyParam": null, "bodyRequired": false, "id": "reddit-topics-search", "method": "GET", "params": [{"description": "Topic search query", "in": "query", "name": "q", "required": true, "type": "string", "x-example": "golang"}], "path": "/reddit/topics/search", "pathParams": [], "produces": ["application/json"], "queryParams": [{"in": "query", "name": "q", "required": true, "type": "string"}], "security": ["ApiKeyAuth"]}, "reddit-trends": {"bodyParam": null, "bodyRequired": false, "id": "reddit-trends", "method": "GET", "params": [{"default": "hot", "description": "Sort: hot, new, rising, or top", "enum": ["hot", "new", "rising", "top"], "in": "query", "name": "sort", "type": "string"}, {"description": "Time window for top sort: hour, day, week, month, year, or all", "enum": ["hour", "day", "week", "month", "year", "all"], "in": "query", "name": "time", "type": "string"}, {"description": "Maximum posts, defaults to 25 and clamps to 100", "in": "query", "name": "limit", "type": "integer"}, {"description": "Reddit pagination token", "in": "query", "name": "after", "type": "string"}], "path": "/reddit/trends", "pathParams": [], "produces": ["application/json"], "queryParams": [{"enum": ["hot", "new", "rising", "top"], "in": "query", "name": "sort", "type": "string"}, {"enum": ["hour", "day", "week", "month", "year", "all"], "in": "query", "name": "time", "type": "string"}, {"in": "query", "name": "limit", "type": "integer"}, {"in": "query", "name": "after", "type": "string"}], "security": ["ApiKeyAuth"]}, "reddit-user-comments": {"bodyParam": null, "bodyRequired": false, "id": "reddit-user-comments", "method": "GET", "params": [{"description": "Public Reddit username, without u/", "in": "path", "name": "username", "required": true, "type": "string", "x-example": "reddit"}, {"description": "Maximum comments, defaults to 25 and clamps to 100", "in": "query", "name": "limit", "type": "integer"}, {"description": "Reddit pagination token", "in": "query", "name": "after", "type": "string"}], "path": "/reddit/user/{username}/comments", "pathParams": ["username"], "produces": ["application/json"], "queryParams": [{"in": "query", "name": "limit", "type": "integer"}, {"in": "query", "name": "after", "type": "string"}], "security": ["ApiKeyAuth"]}, "reddit-user-posts": {"bodyParam": null, "bodyRequired": false, "id": "reddit-user-posts", "method": "GET", "params": [{"description": "Public Reddit username, without u/", "in": "path", "name": "username", "required": true, "type": "string", "x-example": "reddit"}, {"description": "Maximum posts, defaults to 25 and clamps to 100", "in": "query", "name": "limit", "type": "integer"}, {"description": "Reddit pagination token", "in": "query", "name": "after", "type": "string"}], "path": "/reddit/user/{username}/posts", "pathParams": ["username"], "produces": ["application/json"], "queryParams": [{"in": "query", "name": "limit", "type": "integer"}, {"in": "query", "name": "after", "type": "string"}], "security": ["ApiKeyAuth"]}, "reddit-user-profile": {"bodyParam": null, "bodyRequired": false, "id": "reddit-user-profile", "method": "GET", "params": [{"description": "Public Reddit username, without u/", "in": "path", "name": "username", "required": true, "type": "string", "x-example": "spez"}], "path": "/reddit/user/{username}/profile", "pathParams": ["username"], "produces": ["application/json"], "queryParams": [], "security": ["ApiKeyAuth"]}}
|
|
23
23
|
JSON
|
|
24
24
|
OPERATION_IDS = JSON.parse(<<~'JSON').freeze
|
|
25
|
-
["reddit-comments", "reddit-domain-posts", "reddit-leads", "reddit-post", "reddit-search", "reddit-subreddit-about", "reddit-subreddit-comments", "reddit-subreddit-posts", "reddit-subreddits-posts", "reddit-trends", "reddit-user-comments", "reddit-user-posts"]
|
|
25
|
+
["reddit-archive-comments-ids", "reddit-archive-comments-search", "reddit-archive-comments-tree", "reddit-archive-posts-ids", "reddit-archive-posts-search", "reddit-archive-subreddits-search", "reddit-archive-time-series", "reddit-comment", "reddit-comment-awards", "reddit-comments", "reddit-domain-posts", "reddit-leads", "reddit-popular", "reddit-post", "reddit-post-awards", "reddit-posts-by-ids", "reddit-search", "reddit-search-comments", "reddit-search-people", "reddit-subreddit-about", "reddit-subreddit-comments", "reddit-subreddit-flairs", "reddit-subreddit-highlights", "reddit-subreddit-leaderboard-categories", "reddit-subreddit-posts", "reddit-subreddit-rules", "reddit-subreddit-user-flairs", "reddit-subreddit-wiki", "reddit-subreddits-discover", "reddit-subreddits-posts", "reddit-subreddits-search", "reddit-subreddits-suggest", "reddit-topics", "reddit-topics-broad", "reddit-topics-search", "reddit-trends", "reddit-user-comments", "reddit-user-posts", "reddit-user-profile"]
|
|
26
26
|
JSON
|
|
27
27
|
OPERATION_COUNT = OPERATION_IDS.length
|
|
28
28
|
|
|
29
29
|
class Client
|
|
30
30
|
attr_reader :base_url
|
|
31
31
|
|
|
32
|
-
def initialize(api_key: ENV["CRAWLORA_API_KEY"], base_url: "https://api.crawlora.net/api/v1", timeout: 30, user_agent: "crawlora-reddit-ruby/0.
|
|
32
|
+
def initialize(api_key: ENV["CRAWLORA_API_KEY"], base_url: "https://api.crawlora.net/api/v1", timeout: 30, user_agent: "crawlora-reddit-ruby/0.3.0", transport: nil)
|
|
33
33
|
@api_key = api_key
|
|
34
34
|
@base_url = base_url.to_s.sub(%r{/+$}, "")
|
|
35
35
|
@timeout = Float(timeout)
|
|
@@ -114,7 +114,43 @@ module Crawlora
|
|
|
114
114
|
OPERATIONS
|
|
115
115
|
end
|
|
116
116
|
|
|
117
|
-
define_method('
|
|
117
|
+
define_method('archive_comments_ids') do |**params|
|
|
118
|
+
response_type = params.delete(:response_type) || params.delete(:_response_type) || :auto
|
|
119
|
+
request('reddit-archive-comments-ids', params, response_type: response_type)
|
|
120
|
+
end
|
|
121
|
+
define_method('archive_comments_search') do |**params|
|
|
122
|
+
response_type = params.delete(:response_type) || params.delete(:_response_type) || :auto
|
|
123
|
+
request('reddit-archive-comments-search', params, response_type: response_type)
|
|
124
|
+
end
|
|
125
|
+
define_method('archive_comments_tree') do |**params|
|
|
126
|
+
response_type = params.delete(:response_type) || params.delete(:_response_type) || :auto
|
|
127
|
+
request('reddit-archive-comments-tree', params, response_type: response_type)
|
|
128
|
+
end
|
|
129
|
+
define_method('archive_posts_ids') do |**params|
|
|
130
|
+
response_type = params.delete(:response_type) || params.delete(:_response_type) || :auto
|
|
131
|
+
request('reddit-archive-posts-ids', params, response_type: response_type)
|
|
132
|
+
end
|
|
133
|
+
define_method('archive_posts_search') do |**params|
|
|
134
|
+
response_type = params.delete(:response_type) || params.delete(:_response_type) || :auto
|
|
135
|
+
request('reddit-archive-posts-search', params, response_type: response_type)
|
|
136
|
+
end
|
|
137
|
+
define_method('archive_subreddits_search') do |**params|
|
|
138
|
+
response_type = params.delete(:response_type) || params.delete(:_response_type) || :auto
|
|
139
|
+
request('reddit-archive-subreddits-search', params, response_type: response_type)
|
|
140
|
+
end
|
|
141
|
+
define_method('archive_time_series') do |**params|
|
|
142
|
+
response_type = params.delete(:response_type) || params.delete(:_response_type) || :auto
|
|
143
|
+
request('reddit-archive-time-series', params, response_type: response_type)
|
|
144
|
+
end
|
|
145
|
+
define_method('comment') do |**params|
|
|
146
|
+
response_type = params.delete(:response_type) || params.delete(:_response_type) || :auto
|
|
147
|
+
request('reddit-comment', params, response_type: response_type)
|
|
148
|
+
end
|
|
149
|
+
define_method('comment_awards') do |**params|
|
|
150
|
+
response_type = params.delete(:response_type) || params.delete(:_response_type) || :auto
|
|
151
|
+
request('reddit-comment-awards', params, response_type: response_type)
|
|
152
|
+
end
|
|
153
|
+
define_method('comments') do |**params|
|
|
118
154
|
response_type = params.delete(:response_type) || params.delete(:_response_type) || :auto
|
|
119
155
|
request('reddit-comments', params, response_type: response_type)
|
|
120
156
|
end
|
|
@@ -126,14 +162,34 @@ module Crawlora
|
|
|
126
162
|
response_type = params.delete(:response_type) || params.delete(:_response_type) || :auto
|
|
127
163
|
request('reddit-leads', params, response_type: response_type)
|
|
128
164
|
end
|
|
165
|
+
define_method('popular') do |**params|
|
|
166
|
+
response_type = params.delete(:response_type) || params.delete(:_response_type) || :auto
|
|
167
|
+
request('reddit-popular', params, response_type: response_type)
|
|
168
|
+
end
|
|
129
169
|
define_method('post') do |**params|
|
|
130
170
|
response_type = params.delete(:response_type) || params.delete(:_response_type) || :auto
|
|
131
171
|
request('reddit-post', params, response_type: response_type)
|
|
132
172
|
end
|
|
173
|
+
define_method('post_awards') do |**params|
|
|
174
|
+
response_type = params.delete(:response_type) || params.delete(:_response_type) || :auto
|
|
175
|
+
request('reddit-post-awards', params, response_type: response_type)
|
|
176
|
+
end
|
|
177
|
+
define_method('posts_by_ids') do |**params|
|
|
178
|
+
response_type = params.delete(:response_type) || params.delete(:_response_type) || :auto
|
|
179
|
+
request('reddit-posts-by-ids', params, response_type: response_type)
|
|
180
|
+
end
|
|
133
181
|
define_method('search') do |**params|
|
|
134
182
|
response_type = params.delete(:response_type) || params.delete(:_response_type) || :auto
|
|
135
183
|
request('reddit-search', params, response_type: response_type)
|
|
136
184
|
end
|
|
185
|
+
define_method('search_comments') do |**params|
|
|
186
|
+
response_type = params.delete(:response_type) || params.delete(:_response_type) || :auto
|
|
187
|
+
request('reddit-search-comments', params, response_type: response_type)
|
|
188
|
+
end
|
|
189
|
+
define_method('search_people') do |**params|
|
|
190
|
+
response_type = params.delete(:response_type) || params.delete(:_response_type) || :auto
|
|
191
|
+
request('reddit-search-people', params, response_type: response_type)
|
|
192
|
+
end
|
|
137
193
|
define_method('subreddit_about') do |**params|
|
|
138
194
|
response_type = params.delete(:response_type) || params.delete(:_response_type) || :auto
|
|
139
195
|
request('reddit-subreddit-about', params, response_type: response_type)
|
|
@@ -142,14 +198,62 @@ module Crawlora
|
|
|
142
198
|
response_type = params.delete(:response_type) || params.delete(:_response_type) || :auto
|
|
143
199
|
request('reddit-subreddit-comments', params, response_type: response_type)
|
|
144
200
|
end
|
|
201
|
+
define_method('subreddit_flairs') do |**params|
|
|
202
|
+
response_type = params.delete(:response_type) || params.delete(:_response_type) || :auto
|
|
203
|
+
request('reddit-subreddit-flairs', params, response_type: response_type)
|
|
204
|
+
end
|
|
205
|
+
define_method('subreddit_highlights') do |**params|
|
|
206
|
+
response_type = params.delete(:response_type) || params.delete(:_response_type) || :auto
|
|
207
|
+
request('reddit-subreddit-highlights', params, response_type: response_type)
|
|
208
|
+
end
|
|
209
|
+
define_method('subreddit_leaderboard_categories') do |**params|
|
|
210
|
+
response_type = params.delete(:response_type) || params.delete(:_response_type) || :auto
|
|
211
|
+
request('reddit-subreddit-leaderboard-categories', params, response_type: response_type)
|
|
212
|
+
end
|
|
145
213
|
define_method('subreddit_posts') do |**params|
|
|
146
214
|
response_type = params.delete(:response_type) || params.delete(:_response_type) || :auto
|
|
147
215
|
request('reddit-subreddit-posts', params, response_type: response_type)
|
|
148
216
|
end
|
|
217
|
+
define_method('subreddit_rules') do |**params|
|
|
218
|
+
response_type = params.delete(:response_type) || params.delete(:_response_type) || :auto
|
|
219
|
+
request('reddit-subreddit-rules', params, response_type: response_type)
|
|
220
|
+
end
|
|
221
|
+
define_method('subreddit_user_flairs') do |**params|
|
|
222
|
+
response_type = params.delete(:response_type) || params.delete(:_response_type) || :auto
|
|
223
|
+
request('reddit-subreddit-user-flairs', params, response_type: response_type)
|
|
224
|
+
end
|
|
225
|
+
define_method('subreddit_wiki') do |**params|
|
|
226
|
+
response_type = params.delete(:response_type) || params.delete(:_response_type) || :auto
|
|
227
|
+
request('reddit-subreddit-wiki', params, response_type: response_type)
|
|
228
|
+
end
|
|
229
|
+
define_method('subreddits_discover') do |**params|
|
|
230
|
+
response_type = params.delete(:response_type) || params.delete(:_response_type) || :auto
|
|
231
|
+
request('reddit-subreddits-discover', params, response_type: response_type)
|
|
232
|
+
end
|
|
149
233
|
define_method('subreddits_posts') do |**params|
|
|
150
234
|
response_type = params.delete(:response_type) || params.delete(:_response_type) || :auto
|
|
151
235
|
request('reddit-subreddits-posts', params, response_type: response_type)
|
|
152
236
|
end
|
|
237
|
+
define_method('subreddits_search') do |**params|
|
|
238
|
+
response_type = params.delete(:response_type) || params.delete(:_response_type) || :auto
|
|
239
|
+
request('reddit-subreddits-search', params, response_type: response_type)
|
|
240
|
+
end
|
|
241
|
+
define_method('subreddits_suggest') do |**params|
|
|
242
|
+
response_type = params.delete(:response_type) || params.delete(:_response_type) || :auto
|
|
243
|
+
request('reddit-subreddits-suggest', params, response_type: response_type)
|
|
244
|
+
end
|
|
245
|
+
define_method('topics') do |**params|
|
|
246
|
+
response_type = params.delete(:response_type) || params.delete(:_response_type) || :auto
|
|
247
|
+
request('reddit-topics', params, response_type: response_type)
|
|
248
|
+
end
|
|
249
|
+
define_method('topics_broad') do |**params|
|
|
250
|
+
response_type = params.delete(:response_type) || params.delete(:_response_type) || :auto
|
|
251
|
+
request('reddit-topics-broad', params, response_type: response_type)
|
|
252
|
+
end
|
|
253
|
+
define_method('topics_search') do |**params|
|
|
254
|
+
response_type = params.delete(:response_type) || params.delete(:_response_type) || :auto
|
|
255
|
+
request('reddit-topics-search', params, response_type: response_type)
|
|
256
|
+
end
|
|
153
257
|
define_method('trends') do |**params|
|
|
154
258
|
response_type = params.delete(:response_type) || params.delete(:_response_type) || :auto
|
|
155
259
|
request('reddit-trends', params, response_type: response_type)
|
|
@@ -162,6 +266,10 @@ module Crawlora
|
|
|
162
266
|
response_type = params.delete(:response_type) || params.delete(:_response_type) || :auto
|
|
163
267
|
request('reddit-user-posts', params, response_type: response_type)
|
|
164
268
|
end
|
|
269
|
+
define_method('user_profile') do |**params|
|
|
270
|
+
response_type = params.delete(:response_type) || params.delete(:_response_type) || :auto
|
|
271
|
+
request('reddit-user-profile', params, response_type: response_type)
|
|
272
|
+
end
|
|
165
273
|
|
|
166
274
|
private
|
|
167
275
|
|
metadata
CHANGED
|
@@ -1,18 +1,18 @@
|
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
|
2
2
|
name: crawlora-reddit
|
|
3
3
|
version: !ruby/object:Gem::Version
|
|
4
|
-
version: 0.
|
|
4
|
+
version: 0.3.0
|
|
5
5
|
platform: ruby
|
|
6
6
|
authors:
|
|
7
7
|
- Crawlora
|
|
8
8
|
autorequire:
|
|
9
9
|
bindir: bin
|
|
10
10
|
cert_chain: []
|
|
11
|
-
date: 2026-
|
|
11
|
+
date: 2026-11-13 00:00:00.000000000 Z
|
|
12
12
|
dependencies: []
|
|
13
13
|
description: Ruby client for Crawlora's hosted Reddit API. Covers search, post and
|
|
14
14
|
comment details, subreddit feeds, user history, domain listings, trends, and leads
|
|
15
|
-
across
|
|
15
|
+
across 39 endpoints.
|
|
16
16
|
email:
|
|
17
17
|
executables: []
|
|
18
18
|
extensions: []
|
|
@@ -49,5 +49,5 @@ requirements: []
|
|
|
49
49
|
rubygems_version: 3.4.19
|
|
50
50
|
signing_key:
|
|
51
51
|
specification_version: 4
|
|
52
|
-
summary: Reddit API client for Crawlora (
|
|
52
|
+
summary: Reddit API client for Crawlora (39 endpoints)
|
|
53
53
|
test_files: []
|