universal-mcp-applications 0.1.30rc1__py3-none-any.whl → 0.1.36rc1__py3-none-any.whl
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.
Potentially problematic release.
This version of universal-mcp-applications might be problematic. Click here for more details.
- universal_mcp/applications/ahrefs/app.py +52 -198
- universal_mcp/applications/airtable/app.py +23 -122
- universal_mcp/applications/apollo/app.py +111 -464
- universal_mcp/applications/asana/app.py +417 -1567
- universal_mcp/applications/aws_s3/app.py +33 -100
- universal_mcp/applications/bill/app.py +546 -1957
- universal_mcp/applications/box/app.py +1068 -3981
- universal_mcp/applications/braze/app.py +364 -1430
- universal_mcp/applications/browser_use/app.py +2 -8
- universal_mcp/applications/cal_com_v2/app.py +207 -625
- universal_mcp/applications/calendly/app.py +61 -200
- universal_mcp/applications/canva/app.py +45 -110
- universal_mcp/applications/clickup/app.py +207 -674
- universal_mcp/applications/coda/app.py +146 -426
- universal_mcp/applications/confluence/app.py +310 -1098
- universal_mcp/applications/contentful/app.py +36 -151
- universal_mcp/applications/crustdata/app.py +28 -107
- universal_mcp/applications/dialpad/app.py +283 -756
- universal_mcp/applications/digitalocean/app.py +1766 -5777
- universal_mcp/applications/domain_checker/app.py +3 -54
- universal_mcp/applications/e2b/app.py +14 -64
- universal_mcp/applications/elevenlabs/app.py +9 -47
- universal_mcp/applications/exa/app.py +6 -17
- universal_mcp/applications/falai/app.py +23 -100
- universal_mcp/applications/figma/app.py +53 -137
- universal_mcp/applications/file_system/app.py +2 -13
- universal_mcp/applications/firecrawl/app.py +51 -152
- universal_mcp/applications/fireflies/app.py +59 -281
- universal_mcp/applications/fpl/app.py +91 -528
- universal_mcp/applications/fpl/utils/fixtures.py +15 -49
- universal_mcp/applications/fpl/utils/helper.py +25 -89
- universal_mcp/applications/fpl/utils/league_utils.py +20 -64
- universal_mcp/applications/ghost_content/app.py +52 -161
- universal_mcp/applications/github/app.py +19 -56
- universal_mcp/applications/gong/app.py +88 -248
- universal_mcp/applications/google_calendar/app.py +16 -68
- universal_mcp/applications/google_docs/app.py +88 -188
- universal_mcp/applications/google_drive/app.py +140 -462
- universal_mcp/applications/google_gemini/app.py +12 -64
- universal_mcp/applications/google_mail/app.py +28 -157
- universal_mcp/applications/google_searchconsole/app.py +15 -48
- universal_mcp/applications/google_sheet/app.py +101 -578
- universal_mcp/applications/google_sheet/helper.py +10 -37
- universal_mcp/applications/hashnode/app.py +57 -269
- universal_mcp/applications/heygen/app.py +44 -122
- universal_mcp/applications/http_tools/app.py +10 -32
- universal_mcp/applications/hubspot/api_segments/crm_api.py +460 -1573
- universal_mcp/applications/hubspot/api_segments/marketing_api.py +74 -262
- universal_mcp/applications/hubspot/app.py +23 -87
- universal_mcp/applications/jira/app.py +2071 -7986
- universal_mcp/applications/klaviyo/app.py +494 -1376
- universal_mcp/applications/linkedin/README.md +23 -4
- universal_mcp/applications/linkedin/app.py +392 -212
- universal_mcp/applications/mailchimp/app.py +450 -1605
- universal_mcp/applications/markitdown/app.py +8 -20
- universal_mcp/applications/miro/app.py +217 -699
- universal_mcp/applications/ms_teams/app.py +64 -186
- universal_mcp/applications/neon/app.py +86 -192
- universal_mcp/applications/notion/app.py +21 -36
- universal_mcp/applications/onedrive/app.py +14 -36
- universal_mcp/applications/openai/app.py +42 -165
- universal_mcp/applications/outlook/app.py +16 -76
- universal_mcp/applications/perplexity/app.py +4 -19
- universal_mcp/applications/pipedrive/app.py +832 -3142
- universal_mcp/applications/posthog/app.py +163 -432
- universal_mcp/applications/reddit/app.py +40 -139
- universal_mcp/applications/resend/app.py +41 -107
- universal_mcp/applications/retell/app.py +14 -41
- universal_mcp/applications/rocketlane/app.py +221 -934
- universal_mcp/applications/scraper/README.md +7 -4
- universal_mcp/applications/scraper/app.py +280 -93
- universal_mcp/applications/semanticscholar/app.py +22 -64
- universal_mcp/applications/semrush/app.py +43 -77
- universal_mcp/applications/sendgrid/app.py +512 -1262
- universal_mcp/applications/sentry/app.py +271 -906
- universal_mcp/applications/serpapi/app.py +40 -143
- universal_mcp/applications/sharepoint/app.py +15 -37
- universal_mcp/applications/shopify/app.py +1551 -4287
- universal_mcp/applications/shortcut/app.py +155 -417
- universal_mcp/applications/slack/app.py +50 -101
- universal_mcp/applications/spotify/app.py +126 -325
- universal_mcp/applications/supabase/app.py +104 -213
- universal_mcp/applications/tavily/app.py +1 -1
- universal_mcp/applications/trello/app.py +693 -2656
- universal_mcp/applications/twilio/app.py +14 -50
- universal_mcp/applications/twitter/api_segments/compliance_api.py +4 -14
- universal_mcp/applications/twitter/api_segments/dm_conversations_api.py +6 -18
- universal_mcp/applications/twitter/api_segments/likes_api.py +1 -3
- universal_mcp/applications/twitter/api_segments/lists_api.py +5 -15
- universal_mcp/applications/twitter/api_segments/trends_api.py +1 -3
- universal_mcp/applications/twitter/api_segments/tweets_api.py +9 -31
- universal_mcp/applications/twitter/api_segments/usage_api.py +1 -5
- universal_mcp/applications/twitter/api_segments/users_api.py +14 -42
- universal_mcp/applications/whatsapp/app.py +35 -186
- universal_mcp/applications/whatsapp/audio.py +2 -6
- universal_mcp/applications/whatsapp/whatsapp.py +17 -51
- universal_mcp/applications/whatsapp_business/app.py +70 -283
- universal_mcp/applications/wrike/app.py +45 -118
- universal_mcp/applications/yahoo_finance/app.py +19 -65
- universal_mcp/applications/youtube/app.py +75 -261
- universal_mcp/applications/zenquotes/app.py +2 -2
- {universal_mcp_applications-0.1.30rc1.dist-info → universal_mcp_applications-0.1.36rc1.dist-info}/METADATA +2 -2
- {universal_mcp_applications-0.1.30rc1.dist-info → universal_mcp_applications-0.1.36rc1.dist-info}/RECORD +105 -106
- universal_mcp/applications/scraper/scraper_testers.py +0 -17
- {universal_mcp_applications-0.1.30rc1.dist-info → universal_mcp_applications-0.1.36rc1.dist-info}/WHEEL +0 -0
- {universal_mcp_applications-0.1.30rc1.dist-info → universal_mcp_applications-0.1.36rc1.dist-info}/licenses/LICENSE +0 -0
|
@@ -1,5 +1,4 @@
|
|
|
1
1
|
from typing import Any
|
|
2
|
-
|
|
3
2
|
from universal_mcp.applications.application import APIApplication
|
|
4
3
|
from universal_mcp.integrations import Integration
|
|
5
4
|
|
|
@@ -9,7 +8,7 @@ class SemanticscholarApp(APIApplication):
|
|
|
9
8
|
super().__init__(name="semanticscholar", integration=integration, **kwargs)
|
|
10
9
|
self.base_url = "/graph/v1"
|
|
11
10
|
|
|
12
|
-
def post_graph_get_authors(self, fields=None, ids=None) -> dict[str, Any]:
|
|
11
|
+
async def post_graph_get_authors(self, fields=None, ids=None) -> dict[str, Any]:
|
|
13
12
|
"""
|
|
14
13
|
Creates a batch of authors using the provided JSON data in the request body, optionally specifying fields to include in the response via a query parameter.
|
|
15
14
|
|
|
@@ -23,9 +22,7 @@ class SemanticscholarApp(APIApplication):
|
|
|
23
22
|
Tags:
|
|
24
23
|
Author Data
|
|
25
24
|
"""
|
|
26
|
-
request_body = {
|
|
27
|
-
"ids": ids,
|
|
28
|
-
}
|
|
25
|
+
request_body = {"ids": ids}
|
|
29
26
|
request_body = {k: v for k, v in request_body.items() if v is not None}
|
|
30
27
|
url = f"{self.base_url}/author/batch"
|
|
31
28
|
query_params = {k: v for k, v in [("fields", fields)] if v is not None}
|
|
@@ -33,9 +30,7 @@ class SemanticscholarApp(APIApplication):
|
|
|
33
30
|
response.raise_for_status()
|
|
34
31
|
return response.json()
|
|
35
32
|
|
|
36
|
-
def get_graph_get_author_search(
|
|
37
|
-
self, query, offset=None, limit=None, fields=None
|
|
38
|
-
) -> dict[str, Any]:
|
|
33
|
+
async def get_graph_get_author_search(self, query, offset=None, limit=None, fields=None) -> dict[str, Any]:
|
|
39
34
|
"""
|
|
40
35
|
Searches for authors based on a query string with optional pagination and field selection parameters.
|
|
41
36
|
|
|
@@ -52,21 +47,12 @@ class SemanticscholarApp(APIApplication):
|
|
|
52
47
|
Author Data
|
|
53
48
|
"""
|
|
54
49
|
url = f"{self.base_url}/author/search"
|
|
55
|
-
query_params = {
|
|
56
|
-
k: v
|
|
57
|
-
for k, v in [
|
|
58
|
-
("offset", offset),
|
|
59
|
-
("limit", limit),
|
|
60
|
-
("fields", fields),
|
|
61
|
-
("query", query),
|
|
62
|
-
]
|
|
63
|
-
if v is not None
|
|
64
|
-
}
|
|
50
|
+
query_params = {k: v for k, v in [("offset", offset), ("limit", limit), ("fields", fields), ("query", query)] if v is not None}
|
|
65
51
|
response = self._get(url, params=query_params)
|
|
66
52
|
response.raise_for_status()
|
|
67
53
|
return response.json()
|
|
68
54
|
|
|
69
|
-
def get_graph_get_author(self, author_id, fields=None) -> dict[str, Any]:
|
|
55
|
+
async def get_graph_get_author(self, author_id, fields=None) -> dict[str, Any]:
|
|
70
56
|
"""
|
|
71
57
|
Retrieves the profile information for a specific author identified by the `author_id` and returns it with optional fields specified in the `fields` query parameter.
|
|
72
58
|
|
|
@@ -88,9 +74,7 @@ class SemanticscholarApp(APIApplication):
|
|
|
88
74
|
response.raise_for_status()
|
|
89
75
|
return response.json()
|
|
90
76
|
|
|
91
|
-
def get_graph_get_author_papers(
|
|
92
|
-
self, author_id, offset=None, limit=None, fields=None
|
|
93
|
-
) -> dict[str, Any]:
|
|
77
|
+
async def get_graph_get_author_papers(self, author_id, offset=None, limit=None, fields=None) -> dict[str, Any]:
|
|
94
78
|
"""
|
|
95
79
|
Retrieves a paginated list of papers authored by the specified author, with optional field selection.
|
|
96
80
|
|
|
@@ -109,16 +93,12 @@ class SemanticscholarApp(APIApplication):
|
|
|
109
93
|
if author_id is None:
|
|
110
94
|
raise ValueError("Missing required parameter 'author_id'")
|
|
111
95
|
url = f"{self.base_url}/author/{author_id}/papers"
|
|
112
|
-
query_params = {
|
|
113
|
-
k: v
|
|
114
|
-
for k, v in [("offset", offset), ("limit", limit), ("fields", fields)]
|
|
115
|
-
if v is not None
|
|
116
|
-
}
|
|
96
|
+
query_params = {k: v for k, v in [("offset", offset), ("limit", limit), ("fields", fields)] if v is not None}
|
|
117
97
|
response = self._get(url, params=query_params)
|
|
118
98
|
response.raise_for_status()
|
|
119
99
|
return response.json()
|
|
120
100
|
|
|
121
|
-
def get_graph_get_paper_autocomplete(self, query) -> dict[str, Any]:
|
|
101
|
+
async def get_graph_get_paper_autocomplete(self, query) -> dict[str, Any]:
|
|
122
102
|
"""
|
|
123
103
|
Provides an autocomplete suggestion list based on a required query string parameter.
|
|
124
104
|
|
|
@@ -137,7 +117,7 @@ class SemanticscholarApp(APIApplication):
|
|
|
137
117
|
response.raise_for_status()
|
|
138
118
|
return response.json()
|
|
139
119
|
|
|
140
|
-
def post_graph_get_papers(self, fields=None, ids=None) -> dict[str, Any]:
|
|
120
|
+
async def post_graph_get_papers(self, fields=None, ids=None) -> dict[str, Any]:
|
|
141
121
|
"""
|
|
142
122
|
Creates a batch of papers using JSON data in the request body and optionally specifies fields to include in the response.
|
|
143
123
|
|
|
@@ -151,9 +131,7 @@ class SemanticscholarApp(APIApplication):
|
|
|
151
131
|
Tags:
|
|
152
132
|
Paper Data
|
|
153
133
|
"""
|
|
154
|
-
request_body = {
|
|
155
|
-
"ids": ids,
|
|
156
|
-
}
|
|
134
|
+
request_body = {"ids": ids}
|
|
157
135
|
request_body = {k: v for k, v in request_body.items() if v is not None}
|
|
158
136
|
url = f"{self.base_url}/paper/batch"
|
|
159
137
|
query_params = {k: v for k, v in [("fields", fields)] if v is not None}
|
|
@@ -161,7 +139,7 @@ class SemanticscholarApp(APIApplication):
|
|
|
161
139
|
response.raise_for_status()
|
|
162
140
|
return response.json()
|
|
163
141
|
|
|
164
|
-
def get_graph_paper_relevance_search(
|
|
142
|
+
async def get_graph_paper_relevance_search(
|
|
165
143
|
self,
|
|
166
144
|
query,
|
|
167
145
|
fields=None,
|
|
@@ -219,7 +197,7 @@ class SemanticscholarApp(APIApplication):
|
|
|
219
197
|
response.raise_for_status()
|
|
220
198
|
return response.json()
|
|
221
199
|
|
|
222
|
-
def get_graph_paper_bulk_search(
|
|
200
|
+
async def get_graph_paper_bulk_search(
|
|
223
201
|
self,
|
|
224
202
|
query,
|
|
225
203
|
token=None,
|
|
@@ -277,7 +255,7 @@ class SemanticscholarApp(APIApplication):
|
|
|
277
255
|
response.raise_for_status()
|
|
278
256
|
return response.json()
|
|
279
257
|
|
|
280
|
-
def get_graph_paper_title_search(
|
|
258
|
+
async def get_graph_paper_title_search(
|
|
281
259
|
self,
|
|
282
260
|
query,
|
|
283
261
|
fields=None,
|
|
@@ -329,7 +307,7 @@ class SemanticscholarApp(APIApplication):
|
|
|
329
307
|
response.raise_for_status()
|
|
330
308
|
return response.json()
|
|
331
309
|
|
|
332
|
-
def get_graph_get_paper(self, paper_id, fields=None) -> dict[str, Any]:
|
|
310
|
+
async def get_graph_get_paper(self, paper_id, fields=None) -> dict[str, Any]:
|
|
333
311
|
"""
|
|
334
312
|
Retrieves details of a paper by its ID, optionally specifying fields to include in the response.
|
|
335
313
|
|
|
@@ -351,9 +329,7 @@ class SemanticscholarApp(APIApplication):
|
|
|
351
329
|
response.raise_for_status()
|
|
352
330
|
return response.json()
|
|
353
331
|
|
|
354
|
-
def get_graph_get_paper_authors(
|
|
355
|
-
self, paper_id, offset=None, limit=None, fields=None
|
|
356
|
-
) -> dict[str, Any]:
|
|
332
|
+
async def get_graph_get_paper_authors(self, paper_id, offset=None, limit=None, fields=None) -> dict[str, Any]:
|
|
357
333
|
"""
|
|
358
334
|
Retrieves a list of authors for a specific paper identified by the `paper_id`, allowing optional parameters for offset, limit, and fields to customize the response.
|
|
359
335
|
|
|
@@ -372,18 +348,12 @@ class SemanticscholarApp(APIApplication):
|
|
|
372
348
|
if paper_id is None:
|
|
373
349
|
raise ValueError("Missing required parameter 'paper_id'")
|
|
374
350
|
url = f"{self.base_url}/paper/{paper_id}/authors"
|
|
375
|
-
query_params = {
|
|
376
|
-
k: v
|
|
377
|
-
for k, v in [("offset", offset), ("limit", limit), ("fields", fields)]
|
|
378
|
-
if v is not None
|
|
379
|
-
}
|
|
351
|
+
query_params = {k: v for k, v in [("offset", offset), ("limit", limit), ("fields", fields)] if v is not None}
|
|
380
352
|
response = self._get(url, params=query_params)
|
|
381
353
|
response.raise_for_status()
|
|
382
354
|
return response.json()
|
|
383
355
|
|
|
384
|
-
def get_graph_get_paper_citations(
|
|
385
|
-
self, paper_id, offset=None, limit=None, fields=None
|
|
386
|
-
) -> dict[str, Any]:
|
|
356
|
+
async def get_graph_get_paper_citations(self, paper_id, offset=None, limit=None, fields=None) -> dict[str, Any]:
|
|
387
357
|
"""
|
|
388
358
|
Retrieves a list of citations for a specific paper, identified by its paper ID, with optional parameters for offset, limit, and fields.
|
|
389
359
|
|
|
@@ -402,18 +372,12 @@ class SemanticscholarApp(APIApplication):
|
|
|
402
372
|
if paper_id is None:
|
|
403
373
|
raise ValueError("Missing required parameter 'paper_id'")
|
|
404
374
|
url = f"{self.base_url}/paper/{paper_id}/citations"
|
|
405
|
-
query_params = {
|
|
406
|
-
k: v
|
|
407
|
-
for k, v in [("offset", offset), ("limit", limit), ("fields", fields)]
|
|
408
|
-
if v is not None
|
|
409
|
-
}
|
|
375
|
+
query_params = {k: v for k, v in [("offset", offset), ("limit", limit), ("fields", fields)] if v is not None}
|
|
410
376
|
response = self._get(url, params=query_params)
|
|
411
377
|
response.raise_for_status()
|
|
412
378
|
return response.json()
|
|
413
379
|
|
|
414
|
-
def get_graph_get_paper_references(
|
|
415
|
-
self, paper_id, offset=None, limit=None, fields=None
|
|
416
|
-
) -> dict[str, Any]:
|
|
380
|
+
async def get_graph_get_paper_references(self, paper_id, offset=None, limit=None, fields=None) -> dict[str, Any]:
|
|
417
381
|
"""
|
|
418
382
|
Retrieves references for a specific paper by its ID using the "GET" method and allows optional filtering by offset, limit, and fields for customizable output.
|
|
419
383
|
|
|
@@ -432,16 +396,12 @@ class SemanticscholarApp(APIApplication):
|
|
|
432
396
|
if paper_id is None:
|
|
433
397
|
raise ValueError("Missing required parameter 'paper_id'")
|
|
434
398
|
url = f"{self.base_url}/paper/{paper_id}/references"
|
|
435
|
-
query_params = {
|
|
436
|
-
k: v
|
|
437
|
-
for k, v in [("offset", offset), ("limit", limit), ("fields", fields)]
|
|
438
|
-
if v is not None
|
|
439
|
-
}
|
|
399
|
+
query_params = {k: v for k, v in [("offset", offset), ("limit", limit), ("fields", fields)] if v is not None}
|
|
440
400
|
response = self._get(url, params=query_params)
|
|
441
401
|
response.raise_for_status()
|
|
442
402
|
return response.json()
|
|
443
403
|
|
|
444
|
-
def get_snippet_search(self, query, limit=None) -> dict[str, Any]:
|
|
404
|
+
async def get_snippet_search(self, query, limit=None) -> dict[str, Any]:
|
|
445
405
|
"""
|
|
446
406
|
Retrieves a list of search results based on a specified query string, optionally limited by a user-defined number of results, using the "GET" method at the "/snippet/search" endpoint.
|
|
447
407
|
|
|
@@ -456,9 +416,7 @@ class SemanticscholarApp(APIApplication):
|
|
|
456
416
|
Snippet Text
|
|
457
417
|
"""
|
|
458
418
|
url = f"{self.base_url}/snippet/search"
|
|
459
|
-
query_params = {
|
|
460
|
-
k: v for k, v in [("query", query), ("limit", limit)] if v is not None
|
|
461
|
-
}
|
|
419
|
+
query_params = {k: v for k, v in [("query", query), ("limit", limit)] if v is not None}
|
|
462
420
|
response = self._get(url, params=query_params)
|
|
463
421
|
response.raise_for_status()
|
|
464
422
|
return response.json()
|
|
@@ -1,5 +1,4 @@
|
|
|
1
1
|
from typing import Any
|
|
2
|
-
|
|
3
2
|
from universal_mcp.applications.application import APIApplication
|
|
4
3
|
from universal_mcp.integrations import Integration
|
|
5
4
|
|
|
@@ -20,7 +19,6 @@ class SemrushApp(APIApplication):
|
|
|
20
19
|
credentials = self.integration.get_credentials()
|
|
21
20
|
if "api_key" in credentials:
|
|
22
21
|
self.api_key = credentials["api_key"]
|
|
23
|
-
# Always return empty headers
|
|
24
22
|
return {}
|
|
25
23
|
|
|
26
24
|
@property
|
|
@@ -44,22 +42,17 @@ class SemrushApp(APIApplication):
|
|
|
44
42
|
"""
|
|
45
43
|
Builds the parameters dictionary and makes a GET request to the Semrush API.
|
|
46
44
|
"""
|
|
47
|
-
params = {
|
|
48
|
-
"type": report_type,
|
|
49
|
-
"key": self.api_key,
|
|
50
|
-
}
|
|
45
|
+
params = {"type": report_type, "key": self.api_key}
|
|
51
46
|
for key, value in kwargs.items():
|
|
52
47
|
if value is not None:
|
|
53
48
|
params[key] = value
|
|
54
|
-
|
|
55
49
|
url = self.base_url
|
|
56
50
|
if "analytics" in report_type:
|
|
57
51
|
url = f"{self.base_url}/analytics/v1"
|
|
58
|
-
|
|
59
52
|
response = self._get(url, params=params)
|
|
60
53
|
return self._handle_response(response)
|
|
61
54
|
|
|
62
|
-
def domain_ad_history(
|
|
55
|
+
async def domain_ad_history(
|
|
63
56
|
self,
|
|
64
57
|
domain: str,
|
|
65
58
|
database: str = "us",
|
|
@@ -91,7 +84,7 @@ class SemrushApp(APIApplication):
|
|
|
91
84
|
export_decode=export_decode,
|
|
92
85
|
)
|
|
93
86
|
|
|
94
|
-
def domain_organic_pages(
|
|
87
|
+
async def domain_organic_pages(
|
|
95
88
|
self,
|
|
96
89
|
domain: str,
|
|
97
90
|
database: str = "us",
|
|
@@ -123,7 +116,7 @@ class SemrushApp(APIApplication):
|
|
|
123
116
|
export_decode=export_decode,
|
|
124
117
|
)
|
|
125
118
|
|
|
126
|
-
def domain_organic_search_keywords(
|
|
119
|
+
async def domain_organic_search_keywords(
|
|
127
120
|
self,
|
|
128
121
|
domain: str,
|
|
129
122
|
database: str = "us",
|
|
@@ -183,7 +176,7 @@ class SemrushApp(APIApplication):
|
|
|
183
176
|
export_escape=export_escape,
|
|
184
177
|
)
|
|
185
178
|
|
|
186
|
-
def domain_organic_subdomains(
|
|
179
|
+
async def domain_organic_subdomains(
|
|
187
180
|
self,
|
|
188
181
|
domain: str,
|
|
189
182
|
database: str = "us",
|
|
@@ -213,7 +206,7 @@ class SemrushApp(APIApplication):
|
|
|
213
206
|
export_decode=export_decode,
|
|
214
207
|
)
|
|
215
208
|
|
|
216
|
-
def domain_paid_search_keywords(
|
|
209
|
+
async def domain_paid_search_keywords(
|
|
217
210
|
self,
|
|
218
211
|
domain: str,
|
|
219
212
|
database: str = "us",
|
|
@@ -247,7 +240,7 @@ class SemrushApp(APIApplication):
|
|
|
247
240
|
export_decode=export_decode,
|
|
248
241
|
)
|
|
249
242
|
|
|
250
|
-
def domain_pla_search_keywords(
|
|
243
|
+
async def domain_pla_search_keywords(
|
|
251
244
|
self,
|
|
252
245
|
domain: str,
|
|
253
246
|
database: str = "us",
|
|
@@ -277,7 +270,7 @@ class SemrushApp(APIApplication):
|
|
|
277
270
|
export_decode=export_decode,
|
|
278
271
|
)
|
|
279
272
|
|
|
280
|
-
def domain_vs_domain(
|
|
273
|
+
async def domain_vs_domain(
|
|
281
274
|
self,
|
|
282
275
|
domains: str,
|
|
283
276
|
database: str = "us",
|
|
@@ -309,7 +302,7 @@ class SemrushApp(APIApplication):
|
|
|
309
302
|
export_decode=export_decode,
|
|
310
303
|
)
|
|
311
304
|
|
|
312
|
-
def backlinks(
|
|
305
|
+
async def backlinks(
|
|
313
306
|
self,
|
|
314
307
|
target: str,
|
|
315
308
|
target_type: str,
|
|
@@ -335,7 +328,7 @@ class SemrushApp(APIApplication):
|
|
|
335
328
|
display_filter=display_filter,
|
|
336
329
|
)
|
|
337
330
|
|
|
338
|
-
def backlinks_overview(
|
|
331
|
+
async def backlinks_overview(
|
|
339
332
|
self,
|
|
340
333
|
target: str,
|
|
341
334
|
target_type: str,
|
|
@@ -361,12 +354,8 @@ class SemrushApp(APIApplication):
|
|
|
361
354
|
display_filter=display_filter,
|
|
362
355
|
)
|
|
363
356
|
|
|
364
|
-
def keyword_difficulty(
|
|
365
|
-
self,
|
|
366
|
-
phrase: str,
|
|
367
|
-
database: str = "us",
|
|
368
|
-
export_columns: str | None = None,
|
|
369
|
-
export_escape: int | None = None,
|
|
357
|
+
async def keyword_difficulty(
|
|
358
|
+
self, phrase: str, database: str = "us", export_columns: str | None = None, export_escape: int | None = None
|
|
370
359
|
) -> dict[str, Any]:
|
|
371
360
|
"""
|
|
372
361
|
Get keyword difficulty data to estimate ranking difficulty for organic search terms.
|
|
@@ -374,14 +363,10 @@ class SemrushApp(APIApplication):
|
|
|
374
363
|
if not phrase:
|
|
375
364
|
raise ValueError("Phrase parameter is required")
|
|
376
365
|
return self._build_params_and_get(
|
|
377
|
-
"phrase_kdi",
|
|
378
|
-
phrase=phrase,
|
|
379
|
-
database=database,
|
|
380
|
-
export_columns=export_columns,
|
|
381
|
-
export_escape=export_escape,
|
|
366
|
+
"phrase_kdi", phrase=phrase, database=database, export_columns=export_columns, export_escape=export_escape
|
|
382
367
|
)
|
|
383
368
|
|
|
384
|
-
def ads_copies(
|
|
369
|
+
async def ads_copies(
|
|
385
370
|
self,
|
|
386
371
|
domain: str,
|
|
387
372
|
database: str = "us",
|
|
@@ -411,7 +396,7 @@ class SemrushApp(APIApplication):
|
|
|
411
396
|
export_decode=export_decode,
|
|
412
397
|
)
|
|
413
398
|
|
|
414
|
-
def anchors(
|
|
399
|
+
async def anchors(
|
|
415
400
|
self,
|
|
416
401
|
target: str,
|
|
417
402
|
target_type: str,
|
|
@@ -435,24 +420,15 @@ class SemrushApp(APIApplication):
|
|
|
435
420
|
display_offset=display_offset,
|
|
436
421
|
)
|
|
437
422
|
|
|
438
|
-
def authority_score_profile(self, target: str, target_type: str) -> dict[str, Any]:
|
|
423
|
+
async def authority_score_profile(self, target: str, target_type: str) -> dict[str, Any]:
|
|
439
424
|
"""
|
|
440
425
|
Get distribution of referring domains by Authority Score from 0 to 100.
|
|
441
426
|
"""
|
|
442
427
|
if not target or not target_type:
|
|
443
428
|
raise ValueError("Target and target_type parameters are required")
|
|
444
|
-
return self._build_params_and_get(
|
|
445
|
-
"backlinks_ascore_profile_analytics",
|
|
446
|
-
target=target,
|
|
447
|
-
target_type=target_type,
|
|
448
|
-
)
|
|
429
|
+
return self._build_params_and_get("backlinks_ascore_profile_analytics", target=target, target_type=target_type)
|
|
449
430
|
|
|
450
|
-
def batch_comparison(
|
|
451
|
-
self,
|
|
452
|
-
targets: list[str],
|
|
453
|
-
target_types: list[str],
|
|
454
|
-
export_columns: str | None = None,
|
|
455
|
-
) -> dict[str, Any]:
|
|
431
|
+
async def batch_comparison(self, targets: list[str], target_types: list[str], export_columns: str | None = None) -> dict[str, Any]:
|
|
456
432
|
"""
|
|
457
433
|
Compare backlink profiles and link-building progress across multiple competitors.
|
|
458
434
|
"""
|
|
@@ -461,17 +437,12 @@ class SemrushApp(APIApplication):
|
|
|
461
437
|
if len(targets) > 200:
|
|
462
438
|
raise ValueError("Maximum 200 targets allowed")
|
|
463
439
|
if len(targets) != len(target_types):
|
|
464
|
-
raise ValueError(
|
|
465
|
-
"Targets and target_types arrays must have the same length"
|
|
466
|
-
)
|
|
440
|
+
raise ValueError("Targets and target_types arrays must have the same length")
|
|
467
441
|
return self._build_params_and_get(
|
|
468
|
-
"backlinks_comparison_analytics",
|
|
469
|
-
targets=targets,
|
|
470
|
-
target_types=target_types,
|
|
471
|
-
export_columns=export_columns,
|
|
442
|
+
"backlinks_comparison_analytics", targets=targets, target_types=target_types, export_columns=export_columns
|
|
472
443
|
)
|
|
473
444
|
|
|
474
|
-
def batch_keyword_overview(
|
|
445
|
+
async def batch_keyword_overview(
|
|
475
446
|
self,
|
|
476
447
|
phrase: str,
|
|
477
448
|
database: str = "us",
|
|
@@ -495,7 +466,7 @@ class SemrushApp(APIApplication):
|
|
|
495
466
|
export_columns=export_columns,
|
|
496
467
|
)
|
|
497
468
|
|
|
498
|
-
def broad_match_keyword(
|
|
469
|
+
async def broad_match_keyword(
|
|
499
470
|
self,
|
|
500
471
|
phrase: str,
|
|
501
472
|
database: str = "us",
|
|
@@ -525,22 +496,17 @@ class SemrushApp(APIApplication):
|
|
|
525
496
|
display_filter=display_filter,
|
|
526
497
|
)
|
|
527
498
|
|
|
528
|
-
def categories(
|
|
529
|
-
self, target: str, target_type: str, export_columns: str | None = None
|
|
530
|
-
) -> dict[str, Any]:
|
|
499
|
+
async def categories(self, target: str, target_type: str, export_columns: str | None = None) -> dict[str, Any]:
|
|
531
500
|
"""
|
|
532
501
|
Get list of categories that the queried domain belongs to with confidence ratings.
|
|
533
502
|
"""
|
|
534
503
|
if not target or not target_type:
|
|
535
504
|
raise ValueError("Target and target_type parameters are required")
|
|
536
505
|
return self._build_params_and_get(
|
|
537
|
-
"backlinks_categories_analytics",
|
|
538
|
-
target=target,
|
|
539
|
-
target_type=target_type,
|
|
540
|
-
export_columns=export_columns,
|
|
506
|
+
"backlinks_categories_analytics", target=target, target_type=target_type, export_columns=export_columns
|
|
541
507
|
)
|
|
542
508
|
|
|
543
|
-
def categories_profile(
|
|
509
|
+
async def categories_profile(
|
|
544
510
|
self,
|
|
545
511
|
target: str,
|
|
546
512
|
target_type: str,
|
|
@@ -562,7 +528,7 @@ class SemrushApp(APIApplication):
|
|
|
562
528
|
display_offset=display_offset,
|
|
563
529
|
)
|
|
564
530
|
|
|
565
|
-
def competitors(
|
|
531
|
+
async def competitors(
|
|
566
532
|
self,
|
|
567
533
|
target: str,
|
|
568
534
|
target_type: str,
|
|
@@ -584,7 +550,7 @@ class SemrushApp(APIApplication):
|
|
|
584
550
|
display_offset=display_offset,
|
|
585
551
|
)
|
|
586
552
|
|
|
587
|
-
def competitors_organic_search(
|
|
553
|
+
async def competitors_organic_search(
|
|
588
554
|
self,
|
|
589
555
|
domain: str,
|
|
590
556
|
database: str = "us",
|
|
@@ -614,7 +580,7 @@ class SemrushApp(APIApplication):
|
|
|
614
580
|
display_sort=display_sort,
|
|
615
581
|
)
|
|
616
582
|
|
|
617
|
-
def competitors_paid_search(
|
|
583
|
+
async def competitors_paid_search(
|
|
618
584
|
self,
|
|
619
585
|
domain: str,
|
|
620
586
|
database: str = "us",
|
|
@@ -644,7 +610,7 @@ class SemrushApp(APIApplication):
|
|
|
644
610
|
display_sort=display_sort,
|
|
645
611
|
)
|
|
646
612
|
|
|
647
|
-
def indexed_pages(
|
|
613
|
+
async def indexed_pages(
|
|
648
614
|
self,
|
|
649
615
|
target: str,
|
|
650
616
|
target_type: str,
|
|
@@ -668,7 +634,7 @@ class SemrushApp(APIApplication):
|
|
|
668
634
|
display_offset=display_offset,
|
|
669
635
|
)
|
|
670
636
|
|
|
671
|
-
def keyword_ads_history(
|
|
637
|
+
async def keyword_ads_history(
|
|
672
638
|
self,
|
|
673
639
|
phrase: str,
|
|
674
640
|
database: str = "us",
|
|
@@ -694,7 +660,7 @@ class SemrushApp(APIApplication):
|
|
|
694
660
|
export_columns=export_columns,
|
|
695
661
|
)
|
|
696
662
|
|
|
697
|
-
def keyword_overview_all_databases(
|
|
663
|
+
async def keyword_overview_all_databases(
|
|
698
664
|
self,
|
|
699
665
|
phrase: str,
|
|
700
666
|
database: str | None = None,
|
|
@@ -716,7 +682,7 @@ class SemrushApp(APIApplication):
|
|
|
716
682
|
export_columns=export_columns,
|
|
717
683
|
)
|
|
718
684
|
|
|
719
|
-
def keyword_overview_one_database(
|
|
685
|
+
async def keyword_overview_one_database(
|
|
720
686
|
self,
|
|
721
687
|
phrase: str,
|
|
722
688
|
database: str = "us",
|
|
@@ -740,7 +706,7 @@ class SemrushApp(APIApplication):
|
|
|
740
706
|
export_columns=export_columns,
|
|
741
707
|
)
|
|
742
708
|
|
|
743
|
-
def organic_results(
|
|
709
|
+
async def organic_results(
|
|
744
710
|
self,
|
|
745
711
|
phrase: str,
|
|
746
712
|
database: str = "us",
|
|
@@ -770,7 +736,7 @@ class SemrushApp(APIApplication):
|
|
|
770
736
|
positions_type=positions_type,
|
|
771
737
|
)
|
|
772
738
|
|
|
773
|
-
def paid_results(
|
|
739
|
+
async def paid_results(
|
|
774
740
|
self,
|
|
775
741
|
phrase: str,
|
|
776
742
|
database: str = "us",
|
|
@@ -798,7 +764,7 @@ class SemrushApp(APIApplication):
|
|
|
798
764
|
export_columns=export_columns,
|
|
799
765
|
)
|
|
800
766
|
|
|
801
|
-
def phrase_questions(
|
|
767
|
+
async def phrase_questions(
|
|
802
768
|
self,
|
|
803
769
|
phrase: str,
|
|
804
770
|
database: str = "us",
|
|
@@ -828,7 +794,7 @@ class SemrushApp(APIApplication):
|
|
|
828
794
|
display_filter=display_filter,
|
|
829
795
|
)
|
|
830
796
|
|
|
831
|
-
def pla_competitors(
|
|
797
|
+
async def pla_competitors(
|
|
832
798
|
self,
|
|
833
799
|
domain: str,
|
|
834
800
|
database: str = "us",
|
|
@@ -856,7 +822,7 @@ class SemrushApp(APIApplication):
|
|
|
856
822
|
display_sort=display_sort,
|
|
857
823
|
)
|
|
858
824
|
|
|
859
|
-
def pla_copies(
|
|
825
|
+
async def pla_copies(
|
|
860
826
|
self,
|
|
861
827
|
domain: str,
|
|
862
828
|
database: str = "us",
|
|
@@ -886,7 +852,7 @@ class SemrushApp(APIApplication):
|
|
|
886
852
|
display_filter=display_filter,
|
|
887
853
|
)
|
|
888
854
|
|
|
889
|
-
def referring_domains(
|
|
855
|
+
async def referring_domains(
|
|
890
856
|
self,
|
|
891
857
|
target: str,
|
|
892
858
|
target_type: str,
|
|
@@ -912,7 +878,7 @@ class SemrushApp(APIApplication):
|
|
|
912
878
|
display_filter=display_filter,
|
|
913
879
|
)
|
|
914
880
|
|
|
915
|
-
def referring_domains_by_country(
|
|
881
|
+
async def referring_domains_by_country(
|
|
916
882
|
self,
|
|
917
883
|
target: str,
|
|
918
884
|
target_type: str,
|
|
@@ -936,7 +902,7 @@ class SemrushApp(APIApplication):
|
|
|
936
902
|
display_offset=display_offset,
|
|
937
903
|
)
|
|
938
904
|
|
|
939
|
-
def related_keywords(
|
|
905
|
+
async def related_keywords(
|
|
940
906
|
self,
|
|
941
907
|
phrase: str,
|
|
942
908
|
database: str = "us",
|
|
@@ -966,7 +932,7 @@ class SemrushApp(APIApplication):
|
|
|
966
932
|
display_filter=display_filter,
|
|
967
933
|
)
|
|
968
934
|
|
|
969
|
-
def tlds_distribution(
|
|
935
|
+
async def tlds_distribution(
|
|
970
936
|
self,
|
|
971
937
|
target: str,
|
|
972
938
|
target_type: str,
|
|
@@ -990,7 +956,7 @@ class SemrushApp(APIApplication):
|
|
|
990
956
|
display_offset=display_offset,
|
|
991
957
|
)
|
|
992
958
|
|
|
993
|
-
def url_organic_search_keywords(
|
|
959
|
+
async def url_organic_search_keywords(
|
|
994
960
|
self,
|
|
995
961
|
url: str,
|
|
996
962
|
database: str = "us",
|
|
@@ -1020,7 +986,7 @@ class SemrushApp(APIApplication):
|
|
|
1020
986
|
display_sort=display_sort,
|
|
1021
987
|
)
|
|
1022
988
|
|
|
1023
|
-
def url_paid_search_keywords(
|
|
989
|
+
async def url_paid_search_keywords(
|
|
1024
990
|
self,
|
|
1025
991
|
url: str,
|
|
1026
992
|
database: str = "us",
|