getanyapi 0.63.0__tar.gz → 0.65.0__tar.gz
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.
- {getanyapi-0.63.0 → getanyapi-0.65.0}/PKG-INFO +1 -1
- {getanyapi-0.63.0 → getanyapi-0.65.0}/pyproject.toml +1 -1
- {getanyapi-0.63.0 → getanyapi-0.65.0}/src/getanyapi/__init__.py +1 -1
- {getanyapi-0.63.0 → getanyapi-0.65.0}/src/getanyapi/platforms/facebook.py +2 -2
- {getanyapi-0.63.0 → getanyapi-0.65.0}/src/getanyapi/platforms/instagram.py +214 -16
- {getanyapi-0.63.0 → getanyapi-0.65.0}/src/getanyapi/platforms/linkedin.py +4 -4
- {getanyapi-0.63.0 → getanyapi-0.65.0}/src/getanyapi/platforms/reddit.py +9 -4
- getanyapi-0.65.0/src/getanyapi/platforms/redfin.py +388 -0
- {getanyapi-0.63.0 → getanyapi-0.65.0}/src/getanyapi/platforms/tiktok.py +130 -7
- {getanyapi-0.63.0 → getanyapi-0.65.0}/src/getanyapi/platforms/tiktok_shop.py +25 -203
- {getanyapi-0.63.0 → getanyapi-0.65.0}/src/getanyapi/types.py +6 -7
- {getanyapi-0.63.0 → getanyapi-0.65.0}/tests/test_envelope.py +0 -10
- getanyapi-0.65.0/tests/test_not_found_reason.py +33 -0
- getanyapi-0.63.0/src/getanyapi/platforms/redfin.py +0 -194
- getanyapi-0.63.0/tests/test_not_found_reason.py +0 -49
- {getanyapi-0.63.0 → getanyapi-0.65.0}/.gitignore +0 -0
- {getanyapi-0.63.0 → getanyapi-0.65.0}/README.md +0 -0
- {getanyapi-0.63.0 → getanyapi-0.65.0}/src/getanyapi/_account.py +0 -0
- {getanyapi-0.63.0 → getanyapi-0.65.0}/src/getanyapi/_async_client.py +0 -0
- {getanyapi-0.63.0 → getanyapi-0.65.0}/src/getanyapi/_client.py +0 -0
- {getanyapi-0.63.0 → getanyapi-0.65.0}/src/getanyapi/_errors.py +0 -0
- {getanyapi-0.63.0 → getanyapi-0.65.0}/src/getanyapi/_idempotency.py +0 -0
- {getanyapi-0.63.0 → getanyapi-0.65.0}/src/getanyapi/_pagination.py +0 -0
- {getanyapi-0.63.0 → getanyapi-0.65.0}/src/getanyapi/_transport.py +0 -0
- {getanyapi-0.63.0 → getanyapi-0.65.0}/src/getanyapi/discovery_types.py +0 -0
- {getanyapi-0.63.0 → getanyapi-0.65.0}/src/getanyapi/platforms/__init__.py +0 -0
- {getanyapi-0.63.0 → getanyapi-0.65.0}/src/getanyapi/platforms/ahrefs.py +0 -0
- {getanyapi-0.63.0 → getanyapi-0.65.0}/src/getanyapi/platforms/airbnb.py +0 -0
- {getanyapi-0.63.0 → getanyapi-0.65.0}/src/getanyapi/platforms/alibaba.py +0 -0
- {getanyapi-0.63.0 → getanyapi-0.65.0}/src/getanyapi/platforms/amazon.py +0 -0
- {getanyapi-0.63.0 → getanyapi-0.65.0}/src/getanyapi/platforms/apollo.py +0 -0
- {getanyapi-0.63.0 → getanyapi-0.65.0}/src/getanyapi/platforms/appstore.py +0 -0
- {getanyapi-0.63.0 → getanyapi-0.65.0}/src/getanyapi/platforms/bluesky.py +0 -0
- {getanyapi-0.63.0 → getanyapi-0.65.0}/src/getanyapi/platforms/booking.py +0 -0
- {getanyapi-0.63.0 → getanyapi-0.65.0}/src/getanyapi/platforms/capterra.py +0 -0
- {getanyapi-0.63.0 → getanyapi-0.65.0}/src/getanyapi/platforms/chatgpt.py +0 -0
- {getanyapi-0.63.0 → getanyapi-0.65.0}/src/getanyapi/platforms/coinmarketcap.py +0 -0
- {getanyapi-0.63.0 → getanyapi-0.65.0}/src/getanyapi/platforms/company.py +0 -0
- {getanyapi-0.63.0 → getanyapi-0.65.0}/src/getanyapi/platforms/company_enrichment.py +0 -0
- {getanyapi-0.63.0 → getanyapi-0.65.0}/src/getanyapi/platforms/company_identify.py +0 -0
- {getanyapi-0.63.0 → getanyapi-0.65.0}/src/getanyapi/platforms/company_search.py +0 -0
- {getanyapi-0.63.0 → getanyapi-0.65.0}/src/getanyapi/platforms/congress.py +0 -0
- {getanyapi-0.63.0 → getanyapi-0.65.0}/src/getanyapi/platforms/contact_enrichment.py +0 -0
- {getanyapi-0.63.0 → getanyapi-0.65.0}/src/getanyapi/platforms/douyin.py +0 -0
- {getanyapi-0.63.0 → getanyapi-0.65.0}/src/getanyapi/platforms/ebay.py +0 -0
- {getanyapi-0.63.0 → getanyapi-0.65.0}/src/getanyapi/platforms/email.py +0 -0
- {getanyapi-0.63.0 → getanyapi-0.65.0}/src/getanyapi/platforms/email_finding.py +0 -0
- {getanyapi-0.63.0 → getanyapi-0.65.0}/src/getanyapi/platforms/email_verification.py +0 -0
- {getanyapi-0.63.0 → getanyapi-0.65.0}/src/getanyapi/platforms/fiverr.py +0 -0
- {getanyapi-0.63.0 → getanyapi-0.65.0}/src/getanyapi/platforms/g2.py +0 -0
- {getanyapi-0.63.0 → getanyapi-0.65.0}/src/getanyapi/platforms/gemini.py +0 -0
- {getanyapi-0.63.0 → getanyapi-0.65.0}/src/getanyapi/platforms/github.py +0 -0
- {getanyapi-0.63.0 → getanyapi-0.65.0}/src/getanyapi/platforms/glassdoor.py +0 -0
- {getanyapi-0.63.0 → getanyapi-0.65.0}/src/getanyapi/platforms/google.py +0 -0
- {getanyapi-0.63.0 → getanyapi-0.65.0}/src/getanyapi/platforms/google_ads.py +0 -0
- {getanyapi-0.63.0 → getanyapi-0.65.0}/src/getanyapi/platforms/google_finance.py +0 -0
- {getanyapi-0.63.0 → getanyapi-0.65.0}/src/getanyapi/platforms/google_shopping.py +0 -0
- {getanyapi-0.63.0 → getanyapi-0.65.0}/src/getanyapi/platforms/hackernews.py +0 -0
- {getanyapi-0.63.0 → getanyapi-0.65.0}/src/getanyapi/platforms/indeed.py +0 -0
- {getanyapi-0.63.0 → getanyapi-0.65.0}/src/getanyapi/platforms/job_search.py +0 -0
- {getanyapi-0.63.0 → getanyapi-0.65.0}/src/getanyapi/platforms/maps.py +0 -0
- {getanyapi-0.63.0 → getanyapi-0.65.0}/src/getanyapi/platforms/mobile_phone.py +0 -0
- {getanyapi-0.63.0 → getanyapi-0.65.0}/src/getanyapi/platforms/naver.py +0 -0
- {getanyapi-0.63.0 → getanyapi-0.65.0}/src/getanyapi/platforms/nextdoor.py +0 -0
- {getanyapi-0.63.0 → getanyapi-0.65.0}/src/getanyapi/platforms/people_search.py +0 -0
- {getanyapi-0.63.0 → getanyapi-0.65.0}/src/getanyapi/platforms/perplexity.py +0 -0
- {getanyapi-0.63.0 → getanyapi-0.65.0}/src/getanyapi/platforms/person.py +0 -0
- {getanyapi-0.63.0 → getanyapi-0.65.0}/src/getanyapi/platforms/person_enrichment.py +0 -0
- {getanyapi-0.63.0 → getanyapi-0.65.0}/src/getanyapi/platforms/pinterest.py +0 -0
- {getanyapi-0.63.0 → getanyapi-0.65.0}/src/getanyapi/platforms/playstore.py +0 -0
- {getanyapi-0.63.0 → getanyapi-0.65.0}/src/getanyapi/platforms/polymarket.py +0 -0
- {getanyapi-0.63.0 → getanyapi-0.65.0}/src/getanyapi/platforms/property_records.py +0 -0
- {getanyapi-0.63.0 → getanyapi-0.65.0}/src/getanyapi/platforms/realtor.py +0 -0
- {getanyapi-0.63.0 → getanyapi-0.65.0}/src/getanyapi/platforms/rednote.py +0 -0
- {getanyapi-0.63.0 → getanyapi-0.65.0}/src/getanyapi/platforms/sec.py +0 -0
- {getanyapi-0.63.0 → getanyapi-0.65.0}/src/getanyapi/platforms/semrush.py +0 -0
- {getanyapi-0.63.0 → getanyapi-0.65.0}/src/getanyapi/platforms/seo.py +0 -0
- {getanyapi-0.63.0 → getanyapi-0.65.0}/src/getanyapi/platforms/similarweb.py +0 -0
- {getanyapi-0.63.0 → getanyapi-0.65.0}/src/getanyapi/platforms/snapchat.py +0 -0
- {getanyapi-0.63.0 → getanyapi-0.65.0}/src/getanyapi/platforms/social.py +0 -0
- {getanyapi-0.63.0 → getanyapi-0.65.0}/src/getanyapi/platforms/spotify.py +0 -0
- {getanyapi-0.63.0 → getanyapi-0.65.0}/src/getanyapi/platforms/substack.py +0 -0
- {getanyapi-0.63.0 → getanyapi-0.65.0}/src/getanyapi/platforms/technographics.py +0 -0
- {getanyapi-0.63.0 → getanyapi-0.65.0}/src/getanyapi/platforms/threads.py +0 -0
- {getanyapi-0.63.0 → getanyapi-0.65.0}/src/getanyapi/platforms/tripadvisor.py +0 -0
- {getanyapi-0.63.0 → getanyapi-0.65.0}/src/getanyapi/platforms/trustpilot.py +0 -0
- {getanyapi-0.63.0 → getanyapi-0.65.0}/src/getanyapi/platforms/truthsocial.py +0 -0
- {getanyapi-0.63.0 → getanyapi-0.65.0}/src/getanyapi/platforms/twitter.py +0 -0
- {getanyapi-0.63.0 → getanyapi-0.65.0}/src/getanyapi/platforms/upwork.py +0 -0
- {getanyapi-0.63.0 → getanyapi-0.65.0}/src/getanyapi/platforms/walmart.py +0 -0
- {getanyapi-0.63.0 → getanyapi-0.65.0}/src/getanyapi/platforms/web.py +0 -0
- {getanyapi-0.63.0 → getanyapi-0.65.0}/src/getanyapi/platforms/weibo.py +0 -0
- {getanyapi-0.63.0 → getanyapi-0.65.0}/src/getanyapi/platforms/yahoo_finance.py +0 -0
- {getanyapi-0.63.0 → getanyapi-0.65.0}/src/getanyapi/platforms/yelp.py +0 -0
- {getanyapi-0.63.0 → getanyapi-0.65.0}/src/getanyapi/platforms/youtube.py +0 -0
- {getanyapi-0.63.0 → getanyapi-0.65.0}/src/getanyapi/platforms/zhihu.py +0 -0
- {getanyapi-0.63.0 → getanyapi-0.65.0}/src/getanyapi/platforms/zillow.py +0 -0
- {getanyapi-0.63.0 → getanyapi-0.65.0}/src/getanyapi/py.typed +0 -0
- {getanyapi-0.63.0 → getanyapi-0.65.0}/tests/conftest.py +0 -0
- {getanyapi-0.63.0 → getanyapi-0.65.0}/tests/test_account.py +0 -0
- {getanyapi-0.63.0 → getanyapi-0.65.0}/tests/test_client.py +0 -0
- {getanyapi-0.63.0 → getanyapi-0.65.0}/tests/test_durable_requests.py +0 -0
- {getanyapi-0.63.0 → getanyapi-0.65.0}/tests/test_errors.py +0 -0
- {getanyapi-0.63.0 → getanyapi-0.65.0}/tests/test_fixture_roundtrip.py +0 -0
- {getanyapi-0.63.0 → getanyapi-0.65.0}/tests/test_fixture_sweep.py +0 -0
- {getanyapi-0.63.0 → getanyapi-0.65.0}/tests/test_pagination.py +0 -0
- {getanyapi-0.63.0 → getanyapi-0.65.0}/tests/test_transport.py +0 -0
- {getanyapi-0.63.0 → getanyapi-0.65.0}/uv.lock +0 -0
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
Metadata-Version: 2.5
|
|
2
2
|
Name: getanyapi
|
|
3
|
-
Version: 0.
|
|
3
|
+
Version: 0.65.0
|
|
4
4
|
Summary: Official typed Python SDK for AnyAPI: any API, one wallet, USD, no subscriptions.
|
|
5
5
|
Project-URL: Homepage, https://getanyapi.com
|
|
6
6
|
Project-URL: Documentation, https://getanyapi.com/docs
|
|
@@ -3377,7 +3377,7 @@ class FacebookNamespace:
|
|
|
3377
3377
|
Search public Facebook posts by keyword, optionally filtered by location,
|
|
3378
3378
|
and get structured post records (text, author, engagement).
|
|
3379
3379
|
|
|
3380
|
-
Price: $0 per request plus $0.
|
|
3380
|
+
Price: $0.00006 per request plus $0.0033 per result (maximum $0.0661).
|
|
3381
3381
|
|
|
3382
3382
|
Example:
|
|
3383
3383
|
res = client.facebook.search_posts(limit=3, query="nike")
|
|
@@ -4232,7 +4232,7 @@ class AsyncFacebookNamespace:
|
|
|
4232
4232
|
Search public Facebook posts by keyword, optionally filtered by location,
|
|
4233
4233
|
and get structured post records (text, author, engagement).
|
|
4234
4234
|
|
|
4235
|
-
Price: $0 per request plus $0.
|
|
4235
|
+
Price: $0.00006 per request plus $0.0033 per result (maximum $0.0661).
|
|
4236
4236
|
|
|
4237
4237
|
Example:
|
|
4238
4238
|
res = client.facebook.search_posts(limit=3, query="nike")
|
|
@@ -404,6 +404,40 @@ class InstagramSearchInput(TypedDict, total=False):
|
|
|
404
404
|
"""What to search for: user profiles, hashtags, or places (e.g. hashtag). Default: user."""
|
|
405
405
|
|
|
406
406
|
|
|
407
|
+
class InstagramSearchFollowersInput(TypedDict, total=False):
|
|
408
|
+
"""Input for Instagram Search Followers."""
|
|
409
|
+
|
|
410
|
+
allowFallbacks: NotRequired[bool]
|
|
411
|
+
"""Optional, default true. When false, only the sources listed in `source` may serve; the request is refused with no charge if none of them can. When true, the listed sources are tried first and any other source may serve after them, at the normal price. Default: true."""
|
|
412
|
+
ignoreSources: NotRequired[list[str]]
|
|
413
|
+
"""Optional. Source ids to skip for this request, taken from this endpoint's `lanes[].source.id`. The cheapest remaining source serves and the price is that of the dearest remaining source. An id that does not serve this endpoint, or that is also in `source`, is rejected as invalid input with no charge; skipping every source is rejected the same way."""
|
|
414
|
+
preferLatencyUnderMs: NotRequired[int]
|
|
415
|
+
"""Optional; omit it and routing is unchanged, with the cheapest source serving. Prefer sources whose typical response time (median over the trailing 30 days, as published on this endpoint's lane health) is under this many milliseconds; among those, the cheapest serves. This can raise your price: when the cheapest source misses the target, a faster and dearer one serves, and you are quoted and charged its price. If no source is that fast the request is still served, by whichever source offers the best speed for its price - it is never refused for being slow. Sources we have not timed are tried last. This is a preference, not a guarantee: the median describes past requests and is not a ceiling on this one, and it excludes any wait this request itself asks for. On a paginated walk it applies to the first page only: later pages stay with the source that page chose, at the price it was quoted. Minimum: 1."""
|
|
416
|
+
query: Required[str]
|
|
417
|
+
"""Name or username text to look for among this account's followers (e.g. john). Instagram matches loosely, and on large accounts it does not search followers at all, so the most recent followers come back instead."""
|
|
418
|
+
source: NotRequired[list[str]]
|
|
419
|
+
"""Optional. Source ids to prefer, in order, taken from this endpoint's `lanes[].source.id` in /catalog or /apis. Omit it and the cheapest source serves, with automatic failover. Listed sources are tried first in the order given, then the others, unless `allowFallbacks` is false. A single source with `allowFallbacks` false is served only by that source at its price, quoted and charged exactly, with no failover. The price is that of the dearest source that may serve. An id that does not serve this endpoint is rejected as invalid input with no charge; a listed source that is not serving right now is refused with no charge, so omit `source` to be served by another. On a paginated walk, later pages must include the source that served page one, or omit `source`."""
|
|
420
|
+
username: Required[str]
|
|
421
|
+
"""The Instagram username whose followers to search, without the leading @ (e.g. milada2788)."""
|
|
422
|
+
|
|
423
|
+
|
|
424
|
+
class InstagramSearchFollowingInput(TypedDict, total=False):
|
|
425
|
+
"""Input for Instagram Search Following."""
|
|
426
|
+
|
|
427
|
+
allowFallbacks: NotRequired[bool]
|
|
428
|
+
"""Optional, default true. When false, only the sources listed in `source` may serve; the request is refused with no charge if none of them can. When true, the listed sources are tried first and any other source may serve after them, at the normal price. Default: true."""
|
|
429
|
+
ignoreSources: NotRequired[list[str]]
|
|
430
|
+
"""Optional. Source ids to skip for this request, taken from this endpoint's `lanes[].source.id`. The cheapest remaining source serves and the price is that of the dearest remaining source. An id that does not serve this endpoint, or that is also in `source`, is rejected as invalid input with no charge; skipping every source is rejected the same way."""
|
|
431
|
+
preferLatencyUnderMs: NotRequired[int]
|
|
432
|
+
"""Optional; omit it and routing is unchanged, with the cheapest source serving. Prefer sources whose typical response time (median over the trailing 30 days, as published on this endpoint's lane health) is under this many milliseconds; among those, the cheapest serves. This can raise your price: when the cheapest source misses the target, a faster and dearer one serves, and you are quoted and charged its price. If no source is that fast the request is still served, by whichever source offers the best speed for its price - it is never refused for being slow. Sources we have not timed are tried last. This is a preference, not a guarantee: the median describes past requests and is not a ceiling on this one, and it excludes any wait this request itself asks for. On a paginated walk it applies to the first page only: later pages stay with the source that page chose, at the price it was quoted. Minimum: 1."""
|
|
433
|
+
query: Required[str]
|
|
434
|
+
"""Name or username text to look for among the accounts this user follows (e.g. skin). Instagram matches loosely, so close matches are returned too."""
|
|
435
|
+
source: NotRequired[list[str]]
|
|
436
|
+
"""Optional. Source ids to prefer, in order, taken from this endpoint's `lanes[].source.id` in /catalog or /apis. Omit it and the cheapest source serves, with automatic failover. Listed sources are tried first in the order given, then the others, unless `allowFallbacks` is false. A single source with `allowFallbacks` false is served only by that source at its price, quoted and charged exactly, with no failover. The price is that of the dearest source that may serve. An id that does not serve this endpoint is rejected as invalid input with no charge; a listed source that is not serving right now is refused with no charge, so omit `source` to be served by another. On a paginated walk, later pages must include the source that served page one, or omit `source`."""
|
|
437
|
+
username: Required[str]
|
|
438
|
+
"""The Instagram username whose following list to search, without the leading @ (e.g. moogooskincare)."""
|
|
439
|
+
|
|
440
|
+
|
|
407
441
|
class InstagramSearchHashtagInput(TypedDict, total=False):
|
|
408
442
|
"""Input for Instagram Hashtag Search."""
|
|
409
443
|
|
|
@@ -1836,6 +1870,74 @@ class InstagramSearchItem(BaseModel):
|
|
|
1836
1870
|
)
|
|
1837
1871
|
|
|
1838
1872
|
|
|
1873
|
+
class InstagramSearchFollowersData(BaseModel):
|
|
1874
|
+
items: list[InstagramSearchFollowersItem] = Field(
|
|
1875
|
+
description="Followers of the account that Instagram returned for the query, in Instagram's own order. On smaller accounts these are matches from the whole follower list, and Instagram's matching is loose, so some may not contain the exact query text. On large accounts Instagram does not search followers, so these are the account's most recent followers, whatever the query. Populated whenever the provider has data for the entity."
|
|
1876
|
+
)
|
|
1877
|
+
|
|
1878
|
+
|
|
1879
|
+
class InstagramSearchFollowersItem(BaseModel):
|
|
1880
|
+
model_config = ConfigDict(extra="allow")
|
|
1881
|
+
|
|
1882
|
+
handle: str = Field(
|
|
1883
|
+
description="The follower's username, without the @ prefix. Populated whenever the provider has data for the entity."
|
|
1884
|
+
)
|
|
1885
|
+
id: str = Field(
|
|
1886
|
+
description="The follower's numeric Instagram user ID, as a string. Populated whenever the provider has data for the entity."
|
|
1887
|
+
)
|
|
1888
|
+
image: str | None = Field(
|
|
1889
|
+
default=None,
|
|
1890
|
+
description="URL of the follower's profile picture. Instagram signs this URL in its query string, so use it as returned. Empty when the source omits it.",
|
|
1891
|
+
)
|
|
1892
|
+
name: str | None = Field(
|
|
1893
|
+
default=None,
|
|
1894
|
+
description="The follower's display name. Empty when the account has none.",
|
|
1895
|
+
)
|
|
1896
|
+
private: bool | None = Field(
|
|
1897
|
+
default=None, description="Whether the follower's account is private."
|
|
1898
|
+
)
|
|
1899
|
+
url: str | None = Field(
|
|
1900
|
+
default=None, description="Canonical URL of the follower's profile."
|
|
1901
|
+
)
|
|
1902
|
+
verified: bool | None = Field(
|
|
1903
|
+
default=None, description="Whether the follower's account is verified."
|
|
1904
|
+
)
|
|
1905
|
+
|
|
1906
|
+
|
|
1907
|
+
class InstagramSearchFollowingData(BaseModel):
|
|
1908
|
+
items: list[InstagramSearchFollowingItem] = Field(
|
|
1909
|
+
description="Accounts the user follows that Instagram matched to the query, in Instagram's own order. Instagram's matching is loose, so some results may not contain the exact query text. Populated whenever the provider has data for the entity."
|
|
1910
|
+
)
|
|
1911
|
+
|
|
1912
|
+
|
|
1913
|
+
class InstagramSearchFollowingItem(BaseModel):
|
|
1914
|
+
model_config = ConfigDict(extra="allow")
|
|
1915
|
+
|
|
1916
|
+
handle: str = Field(
|
|
1917
|
+
description="The followed account's username, without the @ prefix. Populated whenever the provider has data for the entity."
|
|
1918
|
+
)
|
|
1919
|
+
id: str = Field(
|
|
1920
|
+
description="The followed account's numeric Instagram user ID, as a string. Populated whenever the provider has data for the entity."
|
|
1921
|
+
)
|
|
1922
|
+
image: str | None = Field(
|
|
1923
|
+
default=None,
|
|
1924
|
+
description="URL of the followed account's profile picture. Instagram signs this URL in its query string, so use it as returned. Empty when the source omits it.",
|
|
1925
|
+
)
|
|
1926
|
+
name: str | None = Field(
|
|
1927
|
+
default=None,
|
|
1928
|
+
description="The followed account's display name. Empty when the account has none.",
|
|
1929
|
+
)
|
|
1930
|
+
private: bool | None = Field(
|
|
1931
|
+
default=None, description="Whether the followed account is private."
|
|
1932
|
+
)
|
|
1933
|
+
url: str | None = Field(
|
|
1934
|
+
default=None, description="Canonical URL of the followed account's profile."
|
|
1935
|
+
)
|
|
1936
|
+
verified: bool | None = Field(
|
|
1937
|
+
default=None, description="Whether the followed account is verified."
|
|
1938
|
+
)
|
|
1939
|
+
|
|
1940
|
+
|
|
1839
1941
|
class InstagramSearchHashtagData(BaseModel):
|
|
1840
1942
|
model_config = ConfigDict(populate_by_name=True)
|
|
1841
1943
|
|
|
@@ -2768,7 +2870,7 @@ class InstagramNamespace:
|
|
|
2768
2870
|
|
|
2769
2871
|
List Instagram reels that use a given audio track by audio id.
|
|
2770
2872
|
|
|
2771
|
-
Price: $0.
|
|
2873
|
+
Price: $0.0011 per request.
|
|
2772
2874
|
|
|
2773
2875
|
Example:
|
|
2774
2876
|
res = client.instagram.audio_reels(audioId="1392969992841787")
|
|
@@ -2833,7 +2935,7 @@ class InstagramNamespace:
|
|
|
2833
2935
|
List the replies to an Instagram comment with cursor pagination (text,
|
|
2834
2936
|
author, likes).
|
|
2835
2937
|
|
|
2836
|
-
Price: $0.
|
|
2938
|
+
Price: $0.0011 per request.
|
|
2837
2939
|
|
|
2838
2940
|
Example:
|
|
2839
2941
|
res = client.instagram.comment_replies(commentId="18126632131325044", url="https://www.instagram.com/p/C8rKmYvsrck/")
|
|
@@ -3061,7 +3163,7 @@ class InstagramNamespace:
|
|
|
3061
3163
|
filters use instagram.search_hashtag; for the chronological feed use
|
|
3062
3164
|
instagram.hashtag_recent_posts.
|
|
3063
3165
|
|
|
3064
|
-
Price: $0.
|
|
3166
|
+
Price: $0.0011 per request.
|
|
3065
3167
|
|
|
3066
3168
|
Example:
|
|
3067
3169
|
res = client.instagram.hashtag_top_posts(hashtag="skincare")
|
|
@@ -3301,7 +3403,7 @@ class InstagramNamespace:
|
|
|
3301
3403
|
publishes on its profile, including the address behind the profile's Email
|
|
3302
3404
|
button that public profile lookups do not return.
|
|
3303
3405
|
|
|
3304
|
-
Price: $0.
|
|
3406
|
+
Price: $0.00175 per request.
|
|
3305
3407
|
|
|
3306
3408
|
Example:
|
|
3307
3409
|
res = client.instagram.profile_contact(handle="eminenceorganics")
|
|
@@ -3355,7 +3457,7 @@ class InstagramNamespace:
|
|
|
3355
3457
|
same keyword, with a recency filter and numbered pages, use
|
|
3356
3458
|
instagram.web_reels_search.
|
|
3357
3459
|
|
|
3358
|
-
Price: $0.
|
|
3460
|
+
Price: $0.0011 per request.
|
|
3359
3461
|
|
|
3360
3462
|
Example:
|
|
3361
3463
|
res = client.instagram.reels_search(query="travel")
|
|
@@ -3409,6 +3511,54 @@ class InstagramNamespace:
|
|
|
3409
3511
|
)
|
|
3410
3512
|
return RunResult[InstagramSearchData].model_validate(raw)
|
|
3411
3513
|
|
|
3514
|
+
def search_followers(
|
|
3515
|
+
self,
|
|
3516
|
+
*,
|
|
3517
|
+
options: RequestOptions | None = None,
|
|
3518
|
+
**input: Unpack[InstagramSearchFollowersInput],
|
|
3519
|
+
) -> RunResult[InstagramSearchFollowersData]:
|
|
3520
|
+
"""Instagram Search Followers
|
|
3521
|
+
|
|
3522
|
+
Search the followers of a public Instagram account by name or username,
|
|
3523
|
+
using Instagram's own follower search. On smaller accounts it searches the
|
|
3524
|
+
whole follower list and returns close matches ranked by Instagram. On large
|
|
3525
|
+
accounts Instagram does not support searching followers, so the result is
|
|
3526
|
+
the account's most recent followers instead, whatever the query. Returns
|
|
3527
|
+
usernames, names, and profile details.
|
|
3528
|
+
|
|
3529
|
+
Price: $0.0022 per request.
|
|
3530
|
+
|
|
3531
|
+
Example:
|
|
3532
|
+
res = client.instagram.search_followers(query="john", username="milada2788")
|
|
3533
|
+
"""
|
|
3534
|
+
raw = self._client._run_raw( # pyright: ignore[reportPrivateUsage]
|
|
3535
|
+
"instagram.search_followers", dict(input), options
|
|
3536
|
+
)
|
|
3537
|
+
return RunResult[InstagramSearchFollowersData].model_validate(raw)
|
|
3538
|
+
|
|
3539
|
+
def search_following(
|
|
3540
|
+
self,
|
|
3541
|
+
*,
|
|
3542
|
+
options: RequestOptions | None = None,
|
|
3543
|
+
**input: Unpack[InstagramSearchFollowingInput],
|
|
3544
|
+
) -> RunResult[InstagramSearchFollowingData]:
|
|
3545
|
+
"""Instagram Search Following
|
|
3546
|
+
|
|
3547
|
+
Search the accounts a public Instagram user follows by name or username.
|
|
3548
|
+
Matching is Instagram's own loose search, so results are close matches
|
|
3549
|
+
ranked by Instagram and some may not contain your exact word. Returns
|
|
3550
|
+
usernames, names, and profile details.
|
|
3551
|
+
|
|
3552
|
+
Price: $0.0022 per request.
|
|
3553
|
+
|
|
3554
|
+
Example:
|
|
3555
|
+
res = client.instagram.search_following(query="skin", username="moogooskincare")
|
|
3556
|
+
"""
|
|
3557
|
+
raw = self._client._run_raw( # pyright: ignore[reportPrivateUsage]
|
|
3558
|
+
"instagram.search_following", dict(input), options
|
|
3559
|
+
)
|
|
3560
|
+
return RunResult[InstagramSearchFollowingData].model_validate(raw)
|
|
3561
|
+
|
|
3412
3562
|
def search_hashtag(
|
|
3413
3563
|
self,
|
|
3414
3564
|
*,
|
|
@@ -3469,7 +3619,7 @@ class InstagramNamespace:
|
|
|
3469
3619
|
Search Instagram locations by keyword and return each place's id, name,
|
|
3470
3620
|
address and coordinates.
|
|
3471
3621
|
|
|
3472
|
-
Price: $0.
|
|
3622
|
+
Price: $0.0011 per request.
|
|
3473
3623
|
|
|
3474
3624
|
Example:
|
|
3475
3625
|
res = client.instagram.search_locations(query="Eiffel Tower")
|
|
@@ -3601,7 +3751,7 @@ class InstagramNamespace:
|
|
|
3601
3751
|
Fetch a public Instagram account's currently live stories with media, type,
|
|
3602
3752
|
dimensions, posting time, and 24-hour expiry by username.
|
|
3603
3753
|
|
|
3604
|
-
Price: $0.
|
|
3754
|
+
Price: $0.0022 per request.
|
|
3605
3755
|
|
|
3606
3756
|
Example:
|
|
3607
3757
|
res = client.instagram.stories_full(username="natgeo")
|
|
@@ -3817,7 +3967,7 @@ class InstagramNamespace:
|
|
|
3817
3967
|
List the posts a public Instagram account has reposted to its feed, with
|
|
3818
3968
|
cursor pagination.
|
|
3819
3969
|
|
|
3820
|
-
Price: $0.
|
|
3970
|
+
Price: $0.0011 per request.
|
|
3821
3971
|
|
|
3822
3972
|
Example:
|
|
3823
3973
|
res = client.instagram.user_reposts(userId="787132")
|
|
@@ -3894,7 +4044,7 @@ class AsyncInstagramNamespace:
|
|
|
3894
4044
|
|
|
3895
4045
|
List Instagram reels that use a given audio track by audio id.
|
|
3896
4046
|
|
|
3897
|
-
Price: $0.
|
|
4047
|
+
Price: $0.0011 per request.
|
|
3898
4048
|
|
|
3899
4049
|
Example:
|
|
3900
4050
|
res = client.instagram.audio_reels(audioId="1392969992841787")
|
|
@@ -3959,7 +4109,7 @@ class AsyncInstagramNamespace:
|
|
|
3959
4109
|
List the replies to an Instagram comment with cursor pagination (text,
|
|
3960
4110
|
author, likes).
|
|
3961
4111
|
|
|
3962
|
-
Price: $0.
|
|
4112
|
+
Price: $0.0011 per request.
|
|
3963
4113
|
|
|
3964
4114
|
Example:
|
|
3965
4115
|
res = client.instagram.comment_replies(commentId="18126632131325044", url="https://www.instagram.com/p/C8rKmYvsrck/")
|
|
@@ -4189,7 +4339,7 @@ class AsyncInstagramNamespace:
|
|
|
4189
4339
|
filters use instagram.search_hashtag; for the chronological feed use
|
|
4190
4340
|
instagram.hashtag_recent_posts.
|
|
4191
4341
|
|
|
4192
|
-
Price: $0.
|
|
4342
|
+
Price: $0.0011 per request.
|
|
4193
4343
|
|
|
4194
4344
|
Example:
|
|
4195
4345
|
res = client.instagram.hashtag_top_posts(hashtag="skincare")
|
|
@@ -4429,7 +4579,7 @@ class AsyncInstagramNamespace:
|
|
|
4429
4579
|
publishes on its profile, including the address behind the profile's Email
|
|
4430
4580
|
button that public profile lookups do not return.
|
|
4431
4581
|
|
|
4432
|
-
Price: $0.
|
|
4582
|
+
Price: $0.00175 per request.
|
|
4433
4583
|
|
|
4434
4584
|
Example:
|
|
4435
4585
|
res = client.instagram.profile_contact(handle="eminenceorganics")
|
|
@@ -4483,7 +4633,7 @@ class AsyncInstagramNamespace:
|
|
|
4483
4633
|
same keyword, with a recency filter and numbered pages, use
|
|
4484
4634
|
instagram.web_reels_search.
|
|
4485
4635
|
|
|
4486
|
-
Price: $0.
|
|
4636
|
+
Price: $0.0011 per request.
|
|
4487
4637
|
|
|
4488
4638
|
Example:
|
|
4489
4639
|
res = client.instagram.reels_search(query="travel")
|
|
@@ -4537,6 +4687,54 @@ class AsyncInstagramNamespace:
|
|
|
4537
4687
|
)
|
|
4538
4688
|
return RunResult[InstagramSearchData].model_validate(raw)
|
|
4539
4689
|
|
|
4690
|
+
async def search_followers(
|
|
4691
|
+
self,
|
|
4692
|
+
*,
|
|
4693
|
+
options: RequestOptions | None = None,
|
|
4694
|
+
**input: Unpack[InstagramSearchFollowersInput],
|
|
4695
|
+
) -> RunResult[InstagramSearchFollowersData]:
|
|
4696
|
+
"""Instagram Search Followers
|
|
4697
|
+
|
|
4698
|
+
Search the followers of a public Instagram account by name or username,
|
|
4699
|
+
using Instagram's own follower search. On smaller accounts it searches the
|
|
4700
|
+
whole follower list and returns close matches ranked by Instagram. On large
|
|
4701
|
+
accounts Instagram does not support searching followers, so the result is
|
|
4702
|
+
the account's most recent followers instead, whatever the query. Returns
|
|
4703
|
+
usernames, names, and profile details.
|
|
4704
|
+
|
|
4705
|
+
Price: $0.0022 per request.
|
|
4706
|
+
|
|
4707
|
+
Example:
|
|
4708
|
+
res = client.instagram.search_followers(query="john", username="milada2788")
|
|
4709
|
+
"""
|
|
4710
|
+
raw = await self._client._arun_raw( # pyright: ignore[reportPrivateUsage]
|
|
4711
|
+
"instagram.search_followers", dict(input), options
|
|
4712
|
+
)
|
|
4713
|
+
return RunResult[InstagramSearchFollowersData].model_validate(raw)
|
|
4714
|
+
|
|
4715
|
+
async def search_following(
|
|
4716
|
+
self,
|
|
4717
|
+
*,
|
|
4718
|
+
options: RequestOptions | None = None,
|
|
4719
|
+
**input: Unpack[InstagramSearchFollowingInput],
|
|
4720
|
+
) -> RunResult[InstagramSearchFollowingData]:
|
|
4721
|
+
"""Instagram Search Following
|
|
4722
|
+
|
|
4723
|
+
Search the accounts a public Instagram user follows by name or username.
|
|
4724
|
+
Matching is Instagram's own loose search, so results are close matches
|
|
4725
|
+
ranked by Instagram and some may not contain your exact word. Returns
|
|
4726
|
+
usernames, names, and profile details.
|
|
4727
|
+
|
|
4728
|
+
Price: $0.0022 per request.
|
|
4729
|
+
|
|
4730
|
+
Example:
|
|
4731
|
+
res = client.instagram.search_following(query="skin", username="moogooskincare")
|
|
4732
|
+
"""
|
|
4733
|
+
raw = await self._client._arun_raw( # pyright: ignore[reportPrivateUsage]
|
|
4734
|
+
"instagram.search_following", dict(input), options
|
|
4735
|
+
)
|
|
4736
|
+
return RunResult[InstagramSearchFollowingData].model_validate(raw)
|
|
4737
|
+
|
|
4540
4738
|
async def search_hashtag(
|
|
4541
4739
|
self,
|
|
4542
4740
|
*,
|
|
@@ -4597,7 +4795,7 @@ class AsyncInstagramNamespace:
|
|
|
4597
4795
|
Search Instagram locations by keyword and return each place's id, name,
|
|
4598
4796
|
address and coordinates.
|
|
4599
4797
|
|
|
4600
|
-
Price: $0.
|
|
4798
|
+
Price: $0.0011 per request.
|
|
4601
4799
|
|
|
4602
4800
|
Example:
|
|
4603
4801
|
res = client.instagram.search_locations(query="Eiffel Tower")
|
|
@@ -4729,7 +4927,7 @@ class AsyncInstagramNamespace:
|
|
|
4729
4927
|
Fetch a public Instagram account's currently live stories with media, type,
|
|
4730
4928
|
dimensions, posting time, and 24-hour expiry by username.
|
|
4731
4929
|
|
|
4732
|
-
Price: $0.
|
|
4930
|
+
Price: $0.0022 per request.
|
|
4733
4931
|
|
|
4734
4932
|
Example:
|
|
4735
4933
|
res = client.instagram.stories_full(username="natgeo")
|
|
@@ -4945,7 +5143,7 @@ class AsyncInstagramNamespace:
|
|
|
4945
5143
|
List the posts a public Instagram account has reposted to its feed, with
|
|
4946
5144
|
cursor pagination.
|
|
4947
5145
|
|
|
4948
|
-
Price: $0.
|
|
5146
|
+
Price: $0.0011 per request.
|
|
4949
5147
|
|
|
4950
5148
|
Example:
|
|
4951
5149
|
res = client.instagram.user_reposts(userId="787132")
|
|
@@ -4175,7 +4175,7 @@ class LinkedinNamespace:
|
|
|
4175
4175
|
List the employees of a LinkedIn company by name or company URL, with
|
|
4176
4176
|
optional job-title filtering.
|
|
4177
4177
|
|
|
4178
|
-
Price: $0
|
|
4178
|
+
Price: $0 per request plus $0.011 per result (maximum $0.11).
|
|
4179
4179
|
|
|
4180
4180
|
Example:
|
|
4181
4181
|
res = client.linkedin.company_employees(company="stripe", limit=3)
|
|
@@ -4546,7 +4546,7 @@ class LinkedinNamespace:
|
|
|
4546
4546
|
experience detail, skills, certifications, connections, and verified flags
|
|
4547
4547
|
use linkedin.profile.
|
|
4548
4548
|
|
|
4549
|
-
Price: $0.
|
|
4549
|
+
Price: $0.0012 per request.
|
|
4550
4550
|
|
|
4551
4551
|
Example:
|
|
4552
4552
|
res = client.linkedin.profile_thin(url="https://www.linkedin.com/in/williamhgates")
|
|
@@ -4867,7 +4867,7 @@ class AsyncLinkedinNamespace:
|
|
|
4867
4867
|
List the employees of a LinkedIn company by name or company URL, with
|
|
4868
4868
|
optional job-title filtering.
|
|
4869
4869
|
|
|
4870
|
-
Price: $0
|
|
4870
|
+
Price: $0 per request plus $0.011 per result (maximum $0.11).
|
|
4871
4871
|
|
|
4872
4872
|
Example:
|
|
4873
4873
|
res = client.linkedin.company_employees(company="stripe", limit=3)
|
|
@@ -5238,7 +5238,7 @@ class AsyncLinkedinNamespace:
|
|
|
5238
5238
|
experience detail, skills, certifications, connections, and verified flags
|
|
5239
5239
|
use linkedin.profile.
|
|
5240
5240
|
|
|
5241
|
-
Price: $0.
|
|
5241
|
+
Price: $0.0012 per request.
|
|
5242
5242
|
|
|
5243
5243
|
Example:
|
|
5244
5244
|
res = client.linkedin.profile_thin(url="https://www.linkedin.com/in/williamhgates")
|
|
@@ -457,6 +457,11 @@ class RedditPostCommentsComment(BaseModel):
|
|
|
457
457
|
id: str = Field(
|
|
458
458
|
description="Reddit comment ID (base-36, without the t1_ prefix). Populated whenever the provider has data for the entity."
|
|
459
459
|
)
|
|
460
|
+
parent_id: str | None = Field(
|
|
461
|
+
default=None,
|
|
462
|
+
alias="parentId",
|
|
463
|
+
description="ID of the comment this one replies to (base-36, without the t1_ prefix). Empty for a top-level comment that replies to the post itself.",
|
|
464
|
+
)
|
|
460
465
|
score: int | None = Field(
|
|
461
466
|
default=None,
|
|
462
467
|
description="Net score (upvotes minus downvotes) on the comment at fetch time.",
|
|
@@ -1098,8 +1103,8 @@ class RedditNamespace:
|
|
|
1098
1103
|
) -> RunResult[RedditPostCommentsData]:
|
|
1099
1104
|
"""Reddit Post Comments
|
|
1100
1105
|
|
|
1101
|
-
List the
|
|
1102
|
-
|
|
1106
|
+
List the comments on a Reddit post by URL (author, body, score, timestamp,
|
|
1107
|
+
parent comment). Replies carry the parentId of the comment they answer.
|
|
1103
1108
|
|
|
1104
1109
|
Price: $0.0006 per request.
|
|
1105
1110
|
|
|
@@ -1493,8 +1498,8 @@ class AsyncRedditNamespace:
|
|
|
1493
1498
|
) -> RunResult[RedditPostCommentsData]:
|
|
1494
1499
|
"""Reddit Post Comments
|
|
1495
1500
|
|
|
1496
|
-
List the
|
|
1497
|
-
|
|
1501
|
+
List the comments on a Reddit post by URL (author, body, score, timestamp,
|
|
1502
|
+
parent comment). Replies carry the parentId of the comment they answer.
|
|
1498
1503
|
|
|
1499
1504
|
Price: $0.0006 per request.
|
|
1500
1505
|
|