getanyapi 0.102.0__tar.gz → 0.103.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.102.0 → getanyapi-0.103.0}/PKG-INFO +1 -1
- {getanyapi-0.102.0 → getanyapi-0.103.0}/pyproject.toml +1 -1
- {getanyapi-0.102.0 → getanyapi-0.103.0}/src/getanyapi/__init__.py +1 -1
- {getanyapi-0.102.0 → getanyapi-0.103.0}/src/getanyapi/platforms/facebook.py +302 -9
- {getanyapi-0.102.0 → getanyapi-0.103.0}/src/getanyapi/platforms/linkedin.py +2 -2
- {getanyapi-0.102.0 → getanyapi-0.103.0}/src/getanyapi/platforms/youtube.py +2 -2
- {getanyapi-0.102.0 → getanyapi-0.103.0}/.gitignore +0 -0
- {getanyapi-0.102.0 → getanyapi-0.103.0}/README.md +0 -0
- {getanyapi-0.102.0 → getanyapi-0.103.0}/src/getanyapi/_account.py +0 -0
- {getanyapi-0.102.0 → getanyapi-0.103.0}/src/getanyapi/_async_client.py +0 -0
- {getanyapi-0.102.0 → getanyapi-0.103.0}/src/getanyapi/_client.py +0 -0
- {getanyapi-0.102.0 → getanyapi-0.103.0}/src/getanyapi/_errors.py +0 -0
- {getanyapi-0.102.0 → getanyapi-0.103.0}/src/getanyapi/_idempotency.py +0 -0
- {getanyapi-0.102.0 → getanyapi-0.103.0}/src/getanyapi/_pagination.py +0 -0
- {getanyapi-0.102.0 → getanyapi-0.103.0}/src/getanyapi/_transport.py +0 -0
- {getanyapi-0.102.0 → getanyapi-0.103.0}/src/getanyapi/discovery_types.py +0 -0
- {getanyapi-0.102.0 → getanyapi-0.103.0}/src/getanyapi/platforms/__init__.py +0 -0
- {getanyapi-0.102.0 → getanyapi-0.103.0}/src/getanyapi/platforms/ahrefs.py +0 -0
- {getanyapi-0.102.0 → getanyapi-0.103.0}/src/getanyapi/platforms/airbnb.py +0 -0
- {getanyapi-0.102.0 → getanyapi-0.103.0}/src/getanyapi/platforms/alibaba.py +0 -0
- {getanyapi-0.102.0 → getanyapi-0.103.0}/src/getanyapi/platforms/amazon.py +0 -0
- {getanyapi-0.102.0 → getanyapi-0.103.0}/src/getanyapi/platforms/apollo.py +0 -0
- {getanyapi-0.102.0 → getanyapi-0.103.0}/src/getanyapi/platforms/appstore.py +0 -0
- {getanyapi-0.102.0 → getanyapi-0.103.0}/src/getanyapi/platforms/bluesky.py +0 -0
- {getanyapi-0.102.0 → getanyapi-0.103.0}/src/getanyapi/platforms/booking.py +0 -0
- {getanyapi-0.102.0 → getanyapi-0.103.0}/src/getanyapi/platforms/capterra.py +0 -0
- {getanyapi-0.102.0 → getanyapi-0.103.0}/src/getanyapi/platforms/chatgpt.py +0 -0
- {getanyapi-0.102.0 → getanyapi-0.103.0}/src/getanyapi/platforms/coinmarketcap.py +0 -0
- {getanyapi-0.102.0 → getanyapi-0.103.0}/src/getanyapi/platforms/company.py +0 -0
- {getanyapi-0.102.0 → getanyapi-0.103.0}/src/getanyapi/platforms/company_enrichment.py +0 -0
- {getanyapi-0.102.0 → getanyapi-0.103.0}/src/getanyapi/platforms/company_identify.py +0 -0
- {getanyapi-0.102.0 → getanyapi-0.103.0}/src/getanyapi/platforms/company_search.py +0 -0
- {getanyapi-0.102.0 → getanyapi-0.103.0}/src/getanyapi/platforms/congress.py +0 -0
- {getanyapi-0.102.0 → getanyapi-0.103.0}/src/getanyapi/platforms/contact_enrichment.py +0 -0
- {getanyapi-0.102.0 → getanyapi-0.103.0}/src/getanyapi/platforms/douyin.py +0 -0
- {getanyapi-0.102.0 → getanyapi-0.103.0}/src/getanyapi/platforms/ebay.py +0 -0
- {getanyapi-0.102.0 → getanyapi-0.103.0}/src/getanyapi/platforms/email.py +0 -0
- {getanyapi-0.102.0 → getanyapi-0.103.0}/src/getanyapi/platforms/email_finding.py +0 -0
- {getanyapi-0.102.0 → getanyapi-0.103.0}/src/getanyapi/platforms/email_verification.py +0 -0
- {getanyapi-0.102.0 → getanyapi-0.103.0}/src/getanyapi/platforms/fiverr.py +0 -0
- {getanyapi-0.102.0 → getanyapi-0.103.0}/src/getanyapi/platforms/g2.py +0 -0
- {getanyapi-0.102.0 → getanyapi-0.103.0}/src/getanyapi/platforms/gemini.py +0 -0
- {getanyapi-0.102.0 → getanyapi-0.103.0}/src/getanyapi/platforms/github.py +0 -0
- {getanyapi-0.102.0 → getanyapi-0.103.0}/src/getanyapi/platforms/glassdoor.py +0 -0
- {getanyapi-0.102.0 → getanyapi-0.103.0}/src/getanyapi/platforms/google.py +0 -0
- {getanyapi-0.102.0 → getanyapi-0.103.0}/src/getanyapi/platforms/google_ads.py +0 -0
- {getanyapi-0.102.0 → getanyapi-0.103.0}/src/getanyapi/platforms/google_finance.py +0 -0
- {getanyapi-0.102.0 → getanyapi-0.103.0}/src/getanyapi/platforms/google_hotels.py +0 -0
- {getanyapi-0.102.0 → getanyapi-0.103.0}/src/getanyapi/platforms/google_shopping.py +0 -0
- {getanyapi-0.102.0 → getanyapi-0.103.0}/src/getanyapi/platforms/hackernews.py +0 -0
- {getanyapi-0.102.0 → getanyapi-0.103.0}/src/getanyapi/platforms/indeed.py +0 -0
- {getanyapi-0.102.0 → getanyapi-0.103.0}/src/getanyapi/platforms/instagram.py +0 -0
- {getanyapi-0.102.0 → getanyapi-0.103.0}/src/getanyapi/platforms/job_search.py +0 -0
- {getanyapi-0.102.0 → getanyapi-0.103.0}/src/getanyapi/platforms/maps.py +0 -0
- {getanyapi-0.102.0 → getanyapi-0.103.0}/src/getanyapi/platforms/mobile_phone.py +0 -0
- {getanyapi-0.102.0 → getanyapi-0.103.0}/src/getanyapi/platforms/naver.py +0 -0
- {getanyapi-0.102.0 → getanyapi-0.103.0}/src/getanyapi/platforms/nextdoor.py +0 -0
- {getanyapi-0.102.0 → getanyapi-0.103.0}/src/getanyapi/platforms/people_search.py +0 -0
- {getanyapi-0.102.0 → getanyapi-0.103.0}/src/getanyapi/platforms/perplexity.py +0 -0
- {getanyapi-0.102.0 → getanyapi-0.103.0}/src/getanyapi/platforms/person.py +0 -0
- {getanyapi-0.102.0 → getanyapi-0.103.0}/src/getanyapi/platforms/person_enrichment.py +0 -0
- {getanyapi-0.102.0 → getanyapi-0.103.0}/src/getanyapi/platforms/pexels.py +0 -0
- {getanyapi-0.102.0 → getanyapi-0.103.0}/src/getanyapi/platforms/pinterest.py +0 -0
- {getanyapi-0.102.0 → getanyapi-0.103.0}/src/getanyapi/platforms/playstore.py +0 -0
- {getanyapi-0.102.0 → getanyapi-0.103.0}/src/getanyapi/platforms/polymarket.py +0 -0
- {getanyapi-0.102.0 → getanyapi-0.103.0}/src/getanyapi/platforms/property_records.py +0 -0
- {getanyapi-0.102.0 → getanyapi-0.103.0}/src/getanyapi/platforms/realtor.py +0 -0
- {getanyapi-0.102.0 → getanyapi-0.103.0}/src/getanyapi/platforms/reddit.py +0 -0
- {getanyapi-0.102.0 → getanyapi-0.103.0}/src/getanyapi/platforms/redfin.py +0 -0
- {getanyapi-0.102.0 → getanyapi-0.103.0}/src/getanyapi/platforms/rednote.py +0 -0
- {getanyapi-0.102.0 → getanyapi-0.103.0}/src/getanyapi/platforms/sec.py +0 -0
- {getanyapi-0.102.0 → getanyapi-0.103.0}/src/getanyapi/platforms/semrush.py +0 -0
- {getanyapi-0.102.0 → getanyapi-0.103.0}/src/getanyapi/platforms/seo.py +0 -0
- {getanyapi-0.102.0 → getanyapi-0.103.0}/src/getanyapi/platforms/similarweb.py +0 -0
- {getanyapi-0.102.0 → getanyapi-0.103.0}/src/getanyapi/platforms/snapchat.py +0 -0
- {getanyapi-0.102.0 → getanyapi-0.103.0}/src/getanyapi/platforms/social.py +0 -0
- {getanyapi-0.102.0 → getanyapi-0.103.0}/src/getanyapi/platforms/spotify.py +0 -0
- {getanyapi-0.102.0 → getanyapi-0.103.0}/src/getanyapi/platforms/substack.py +0 -0
- {getanyapi-0.102.0 → getanyapi-0.103.0}/src/getanyapi/platforms/technographics.py +0 -0
- {getanyapi-0.102.0 → getanyapi-0.103.0}/src/getanyapi/platforms/threads.py +0 -0
- {getanyapi-0.102.0 → getanyapi-0.103.0}/src/getanyapi/platforms/tiktok.py +0 -0
- {getanyapi-0.102.0 → getanyapi-0.103.0}/src/getanyapi/platforms/tiktok_shop.py +0 -0
- {getanyapi-0.102.0 → getanyapi-0.103.0}/src/getanyapi/platforms/tripadvisor.py +0 -0
- {getanyapi-0.102.0 → getanyapi-0.103.0}/src/getanyapi/platforms/trustpilot.py +0 -0
- {getanyapi-0.102.0 → getanyapi-0.103.0}/src/getanyapi/platforms/truthsocial.py +0 -0
- {getanyapi-0.102.0 → getanyapi-0.103.0}/src/getanyapi/platforms/twitter.py +0 -0
- {getanyapi-0.102.0 → getanyapi-0.103.0}/src/getanyapi/platforms/unsplash.py +0 -0
- {getanyapi-0.102.0 → getanyapi-0.103.0}/src/getanyapi/platforms/upwork.py +0 -0
- {getanyapi-0.102.0 → getanyapi-0.103.0}/src/getanyapi/platforms/walmart.py +0 -0
- {getanyapi-0.102.0 → getanyapi-0.103.0}/src/getanyapi/platforms/web.py +0 -0
- {getanyapi-0.102.0 → getanyapi-0.103.0}/src/getanyapi/platforms/weibo.py +0 -0
- {getanyapi-0.102.0 → getanyapi-0.103.0}/src/getanyapi/platforms/yahoo_finance.py +0 -0
- {getanyapi-0.102.0 → getanyapi-0.103.0}/src/getanyapi/platforms/yelp.py +0 -0
- {getanyapi-0.102.0 → getanyapi-0.103.0}/src/getanyapi/platforms/zhihu.py +0 -0
- {getanyapi-0.102.0 → getanyapi-0.103.0}/src/getanyapi/platforms/zillow.py +0 -0
- {getanyapi-0.102.0 → getanyapi-0.103.0}/src/getanyapi/py.typed +0 -0
- {getanyapi-0.102.0 → getanyapi-0.103.0}/src/getanyapi/types.py +0 -0
- {getanyapi-0.102.0 → getanyapi-0.103.0}/tests/conftest.py +0 -0
- {getanyapi-0.102.0 → getanyapi-0.103.0}/tests/test_account.py +0 -0
- {getanyapi-0.102.0 → getanyapi-0.103.0}/tests/test_client.py +0 -0
- {getanyapi-0.102.0 → getanyapi-0.103.0}/tests/test_durable_requests.py +0 -0
- {getanyapi-0.102.0 → getanyapi-0.103.0}/tests/test_envelope.py +0 -0
- {getanyapi-0.102.0 → getanyapi-0.103.0}/tests/test_errors.py +0 -0
- {getanyapi-0.102.0 → getanyapi-0.103.0}/tests/test_fixture_roundtrip.py +0 -0
- {getanyapi-0.102.0 → getanyapi-0.103.0}/tests/test_fixture_sweep.py +0 -0
- {getanyapi-0.102.0 → getanyapi-0.103.0}/tests/test_not_found_reason.py +0 -0
- {getanyapi-0.102.0 → getanyapi-0.103.0}/tests/test_pagination.py +0 -0
- {getanyapi-0.102.0 → getanyapi-0.103.0}/tests/test_transport.py +0 -0
- {getanyapi-0.102.0 → getanyapi-0.103.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.103.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
|
|
@@ -395,7 +395,18 @@ class FacebookPostInput(TypedDict, total=False):
|
|
|
395
395
|
"""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."""
|
|
396
396
|
preferLatencyUnderMs: NotRequired[int]
|
|
397
397
|
"""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."""
|
|
398
|
-
requireFields: NotRequired[
|
|
398
|
+
requireFields: NotRequired[
|
|
399
|
+
list[
|
|
400
|
+
Literal[
|
|
401
|
+
"authorVerified",
|
|
402
|
+
"feedbackId",
|
|
403
|
+
"reactions",
|
|
404
|
+
"videoId",
|
|
405
|
+
"videoUrl",
|
|
406
|
+
"views",
|
|
407
|
+
]
|
|
408
|
+
]
|
|
409
|
+
]
|
|
399
410
|
"""Optional; omit it and routing is unchanged, with the cheapest source serving. Name the output fields this request must be able to return, for example `videoId` or `views`, and it is served only by a source that returns every one of them. Fields you do not name are still returned whenever the serving source has them. This can raise your price: when the cheapest source cannot return a named field, a dearer source serves, and you are quoted and charged its price. A named field can still be absent on a post that genuinely lacks it. Naming a combination that no single source returns together is refused as invalid input, with no charge."""
|
|
400
411
|
source: NotRequired[list[str]]
|
|
401
412
|
"""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`."""
|
|
@@ -486,6 +497,8 @@ class FacebookProfilePostsInput(TypedDict, total=False):
|
|
|
486
497
|
"""Facebook page id."""
|
|
487
498
|
preferLatencyUnderMs: NotRequired[int]
|
|
488
499
|
"""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."""
|
|
500
|
+
requireFields: NotRequired[list[Literal["shares"]]]
|
|
501
|
+
"""Optional; omit it and routing is unchanged, with the cheapest source serving. Name the output fields this request must be able to return, for example `shares`, and it is served only by a source that returns every one of them. Fields you do not name are still returned whenever the serving source has them. This can raise your price: when the cheapest source cannot return a named field, a dearer source serves, and you are quoted and charged its price. A named field can still be absent on a post that genuinely lacks it. Naming a combination that no single source returns together is refused as invalid input, with no charge."""
|
|
489
502
|
source: NotRequired[list[str]]
|
|
490
503
|
"""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`."""
|
|
491
504
|
url: NotRequired[str]
|
|
@@ -503,7 +516,18 @@ class FacebookProfileReelsInput(TypedDict, total=False):
|
|
|
503
516
|
"""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."""
|
|
504
517
|
preferLatencyUnderMs: NotRequired[int]
|
|
505
518
|
"""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."""
|
|
506
|
-
requireFields: NotRequired[
|
|
519
|
+
requireFields: NotRequired[
|
|
520
|
+
list[
|
|
521
|
+
Literal[
|
|
522
|
+
"authorVerified",
|
|
523
|
+
"comments",
|
|
524
|
+
"feedbackId",
|
|
525
|
+
"likes",
|
|
526
|
+
"shares",
|
|
527
|
+
"videoUrl",
|
|
528
|
+
]
|
|
529
|
+
]
|
|
530
|
+
]
|
|
507
531
|
"""Optional; omit it and routing is unchanged, with the cheapest source serving. Name the output fields this request must be able to return, for example `feedbackId` or `authorVerified`, and it is served only by a source that returns every one of them. Fields you do not name are still returned whenever the serving source has them. This can raise your price: when the cheapest source cannot return a named field, a dearer source serves, and you are quoted and charged its price. A named field can still be absent on a reel that genuinely lacks it. Naming a combination that no single source returns together is refused as invalid input, with no charge."""
|
|
508
532
|
source: NotRequired[list[str]]
|
|
509
533
|
"""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`."""
|
|
@@ -585,6 +609,10 @@ class FacebookAdDetailsData(BaseModel):
|
|
|
585
609
|
categories: list[str] | None = Field(
|
|
586
610
|
default=None, description="Ad Library categories the ad is filed under."
|
|
587
611
|
)
|
|
612
|
+
creatives: list[FacebookAdDetailsCreative] | None = Field(
|
|
613
|
+
default=None,
|
|
614
|
+
description="One entry per card of a carousel, dynamic-product, or dynamic-creative ad, in the order Meta returns them, each with its own text and destination. Single-creative ads return an empty array. The same card images and videos also appear in media. Meta CDN media URLs are signed and expire.",
|
|
615
|
+
)
|
|
588
616
|
cta_text: str | None = Field(
|
|
589
617
|
default=None,
|
|
590
618
|
alias="ctaText",
|
|
@@ -677,6 +705,44 @@ class FacebookAdDetailsData(BaseModel):
|
|
|
677
705
|
)
|
|
678
706
|
|
|
679
707
|
|
|
708
|
+
class FacebookAdDetailsCreative(BaseModel):
|
|
709
|
+
model_config = ConfigDict(extra="allow", populate_by_name=True)
|
|
710
|
+
|
|
711
|
+
body: str | None = Field(default=None, description="Card body text.")
|
|
712
|
+
caption: str | None = Field(
|
|
713
|
+
default=None,
|
|
714
|
+
description="Card display caption, usually the destination domain.",
|
|
715
|
+
)
|
|
716
|
+
cta_text: str | None = Field(
|
|
717
|
+
default=None,
|
|
718
|
+
alias="ctaText",
|
|
719
|
+
description='Card call-to-action label (e.g. "Shop Now").',
|
|
720
|
+
)
|
|
721
|
+
cta_type: str | None = Field(
|
|
722
|
+
default=None,
|
|
723
|
+
alias="ctaType",
|
|
724
|
+
description='Card call-to-action type (e.g. "SHOP_NOW").',
|
|
725
|
+
)
|
|
726
|
+
image: str | None = Field(
|
|
727
|
+
default=None,
|
|
728
|
+
description="Card image URL. For a video card this is the poster frame.",
|
|
729
|
+
)
|
|
730
|
+
link_description: str | None = Field(
|
|
731
|
+
default=None,
|
|
732
|
+
alias="linkDescription",
|
|
733
|
+
description="Card secondary description line.",
|
|
734
|
+
)
|
|
735
|
+
link_url: str | None = Field(
|
|
736
|
+
default=None, alias="linkUrl", description="Card destination URL."
|
|
737
|
+
)
|
|
738
|
+
title: str | None = Field(default=None, description="Card headline.")
|
|
739
|
+
video_url: str | None = Field(
|
|
740
|
+
default=None,
|
|
741
|
+
alias="videoUrl",
|
|
742
|
+
description="Card video file URL (HD when supplied, otherwise SD). Present only on video cards.",
|
|
743
|
+
)
|
|
744
|
+
|
|
745
|
+
|
|
680
746
|
class FacebookAdDetailsMedia(BaseModel):
|
|
681
747
|
model_config = ConfigDict(extra="allow", populate_by_name=True)
|
|
682
748
|
|
|
@@ -917,6 +983,10 @@ class FacebookAdsSearchAd(BaseModel):
|
|
|
917
983
|
categories: list[str] | None = Field(
|
|
918
984
|
default=None, description="Ad Library categories the ad is filed under."
|
|
919
985
|
)
|
|
986
|
+
creatives: list[FacebookAdsSearchCreative] | None = Field(
|
|
987
|
+
default=None,
|
|
988
|
+
description="One entry per card of a carousel, dynamic-product, or dynamic-creative ad, in the order Meta returns them, each with its own text and destination. Single-creative ads return an empty array. The same card images and videos also appear in media. Meta CDN media URLs are signed and expire.",
|
|
989
|
+
)
|
|
920
990
|
cta_text: str = Field(
|
|
921
991
|
alias="ctaText",
|
|
922
992
|
description="Populated whenever the provider has data for the entity.",
|
|
@@ -1003,6 +1073,44 @@ class FacebookAdsSearchAd(BaseModel):
|
|
|
1003
1073
|
)
|
|
1004
1074
|
|
|
1005
1075
|
|
|
1076
|
+
class FacebookAdsSearchCreative(BaseModel):
|
|
1077
|
+
model_config = ConfigDict(extra="allow", populate_by_name=True)
|
|
1078
|
+
|
|
1079
|
+
body: str | None = Field(default=None, description="Card body text.")
|
|
1080
|
+
caption: str | None = Field(
|
|
1081
|
+
default=None,
|
|
1082
|
+
description="Card display caption, usually the destination domain.",
|
|
1083
|
+
)
|
|
1084
|
+
cta_text: str | None = Field(
|
|
1085
|
+
default=None,
|
|
1086
|
+
alias="ctaText",
|
|
1087
|
+
description='Card call-to-action label (e.g. "Shop Now").',
|
|
1088
|
+
)
|
|
1089
|
+
cta_type: str | None = Field(
|
|
1090
|
+
default=None,
|
|
1091
|
+
alias="ctaType",
|
|
1092
|
+
description='Card call-to-action type (e.g. "SHOP_NOW").',
|
|
1093
|
+
)
|
|
1094
|
+
image: str | None = Field(
|
|
1095
|
+
default=None,
|
|
1096
|
+
description="Card image URL. For a video card this is the poster frame.",
|
|
1097
|
+
)
|
|
1098
|
+
link_description: str | None = Field(
|
|
1099
|
+
default=None,
|
|
1100
|
+
alias="linkDescription",
|
|
1101
|
+
description="Card secondary description line.",
|
|
1102
|
+
)
|
|
1103
|
+
link_url: str | None = Field(
|
|
1104
|
+
default=None, alias="linkUrl", description="Card destination URL."
|
|
1105
|
+
)
|
|
1106
|
+
title: str | None = Field(default=None, description="Card headline.")
|
|
1107
|
+
video_url: str | None = Field(
|
|
1108
|
+
default=None,
|
|
1109
|
+
alias="videoUrl",
|
|
1110
|
+
description="Card video file URL (HD when supplied, otherwise SD). Present only on video cards.",
|
|
1111
|
+
)
|
|
1112
|
+
|
|
1113
|
+
|
|
1006
1114
|
class FacebookAdsSearchMedia(BaseModel):
|
|
1007
1115
|
model_config = ConfigDict(extra="allow", populate_by_name=True)
|
|
1008
1116
|
|
|
@@ -1112,6 +1220,10 @@ class FacebookCompanyAdsAd(BaseModel):
|
|
|
1112
1220
|
categories: list[str] | None = Field(
|
|
1113
1221
|
default=None, description="Ad Library categories the ad is filed under."
|
|
1114
1222
|
)
|
|
1223
|
+
creatives: list[FacebookCompanyAdsCreative] | None = Field(
|
|
1224
|
+
default=None,
|
|
1225
|
+
description="One entry per card of a carousel, dynamic-product, or dynamic-creative ad, in the order Meta returns them, each with its own text and destination. Single-creative ads return an empty array. The same card images and videos also appear in media. Meta CDN media URLs are signed and expire.",
|
|
1226
|
+
)
|
|
1115
1227
|
cta_text: str | None = Field(
|
|
1116
1228
|
default=None,
|
|
1117
1229
|
alias="ctaText",
|
|
@@ -1194,6 +1306,44 @@ class FacebookCompanyAdsAd(BaseModel):
|
|
|
1194
1306
|
title: str | None = Field(default=None, description="Headline of the ad creative.")
|
|
1195
1307
|
|
|
1196
1308
|
|
|
1309
|
+
class FacebookCompanyAdsCreative(BaseModel):
|
|
1310
|
+
model_config = ConfigDict(extra="allow", populate_by_name=True)
|
|
1311
|
+
|
|
1312
|
+
body: str | None = Field(default=None, description="Card body text.")
|
|
1313
|
+
caption: str | None = Field(
|
|
1314
|
+
default=None,
|
|
1315
|
+
description="Card display caption, usually the destination domain.",
|
|
1316
|
+
)
|
|
1317
|
+
cta_text: str | None = Field(
|
|
1318
|
+
default=None,
|
|
1319
|
+
alias="ctaText",
|
|
1320
|
+
description='Card call-to-action label (e.g. "Shop Now").',
|
|
1321
|
+
)
|
|
1322
|
+
cta_type: str | None = Field(
|
|
1323
|
+
default=None,
|
|
1324
|
+
alias="ctaType",
|
|
1325
|
+
description='Card call-to-action type (e.g. "SHOP_NOW").',
|
|
1326
|
+
)
|
|
1327
|
+
image: str | None = Field(
|
|
1328
|
+
default=None,
|
|
1329
|
+
description="Card image URL. For a video card this is the poster frame.",
|
|
1330
|
+
)
|
|
1331
|
+
link_description: str | None = Field(
|
|
1332
|
+
default=None,
|
|
1333
|
+
alias="linkDescription",
|
|
1334
|
+
description="Card secondary description line.",
|
|
1335
|
+
)
|
|
1336
|
+
link_url: str | None = Field(
|
|
1337
|
+
default=None, alias="linkUrl", description="Card destination URL."
|
|
1338
|
+
)
|
|
1339
|
+
title: str | None = Field(default=None, description="Card headline.")
|
|
1340
|
+
video_url: str | None = Field(
|
|
1341
|
+
default=None,
|
|
1342
|
+
alias="videoUrl",
|
|
1343
|
+
description="Card video file URL (HD when supplied, otherwise SD). Present only on video cards.",
|
|
1344
|
+
)
|
|
1345
|
+
|
|
1346
|
+
|
|
1197
1347
|
class FacebookCompanyAdsMedia(BaseModel):
|
|
1198
1348
|
model_config = ConfigDict(extra="allow", populate_by_name=True)
|
|
1199
1349
|
|
|
@@ -1497,7 +1647,7 @@ class FacebookFollowersItem(BaseModel):
|
|
|
1497
1647
|
)
|
|
1498
1648
|
image: str | None = Field(
|
|
1499
1649
|
default=None,
|
|
1500
|
-
description="URL of the account's profile picture,
|
|
1650
|
+
description="URL of the account's profile picture, a signed CDN URL whose query must be kept. Empty when the upstream omits it.",
|
|
1501
1651
|
)
|
|
1502
1652
|
name: str = Field(
|
|
1503
1653
|
description="The account's public display name. Populated whenever the provider has data for the entity."
|
|
@@ -1539,11 +1689,18 @@ class FacebookGroupPostsPost(BaseModel):
|
|
|
1539
1689
|
id: str = Field(
|
|
1540
1690
|
description="Populated whenever the provider has data for the entity."
|
|
1541
1691
|
)
|
|
1692
|
+
image: str | None = Field(
|
|
1693
|
+
default=None,
|
|
1694
|
+
description="URL of the post's first image. Absent when the post has no image.",
|
|
1695
|
+
)
|
|
1542
1696
|
publish_time: int = Field(
|
|
1543
1697
|
alias="publishTime",
|
|
1544
1698
|
description="Populated whenever the provider has data for the entity.",
|
|
1545
1699
|
)
|
|
1546
1700
|
reaction_count: int = Field(alias="reactionCount")
|
|
1701
|
+
reactions: FacebookGroupPostsReaction = Field(
|
|
1702
|
+
description="Reaction counts on the post, broken down by reaction type."
|
|
1703
|
+
)
|
|
1547
1704
|
text: str = Field(
|
|
1548
1705
|
description="Populated whenever the provider has data for the entity."
|
|
1549
1706
|
)
|
|
@@ -1552,6 +1709,18 @@ class FacebookGroupPostsPost(BaseModel):
|
|
|
1552
1709
|
)
|
|
1553
1710
|
|
|
1554
1711
|
|
|
1712
|
+
class FacebookGroupPostsReaction(BaseModel):
|
|
1713
|
+
model_config = ConfigDict(extra="allow")
|
|
1714
|
+
|
|
1715
|
+
angry: int | None = Field(default=None, description="Angry reactions.")
|
|
1716
|
+
care: int | None = Field(default=None, description="Care reactions.")
|
|
1717
|
+
haha: int | None = Field(default=None, description="Haha reactions.")
|
|
1718
|
+
like: int | None = Field(default=None, description="Like reactions.")
|
|
1719
|
+
love: int | None = Field(default=None, description="Love reactions.")
|
|
1720
|
+
sad: int | None = Field(default=None, description="Sad reactions.")
|
|
1721
|
+
wow: int | None = Field(default=None, description="Wow reactions.")
|
|
1722
|
+
|
|
1723
|
+
|
|
1555
1724
|
class FacebookMarketplaceData(BaseModel):
|
|
1556
1725
|
model_config = ConfigDict(populate_by_name=True)
|
|
1557
1726
|
|
|
@@ -1722,6 +1891,9 @@ class FacebookMarketplaceItemData(BaseModel):
|
|
|
1722
1891
|
alias="priceFormatted",
|
|
1723
1892
|
description="Populated whenever the provider has data for the entity.",
|
|
1724
1893
|
)
|
|
1894
|
+
seller: FacebookMarketplaceItemSeller = Field(
|
|
1895
|
+
description="The person or business selling the item. Empty when Facebook does not show the seller on the listing."
|
|
1896
|
+
)
|
|
1725
1897
|
share_url: str | None = Field(
|
|
1726
1898
|
default=None,
|
|
1727
1899
|
alias="shareUrl",
|
|
@@ -1769,6 +1941,32 @@ class FacebookMarketplaceItemPhoto(BaseModel):
|
|
|
1769
1941
|
width: int | None = Field(default=None, description="Pixel width of the photo.")
|
|
1770
1942
|
|
|
1771
1943
|
|
|
1944
|
+
class FacebookMarketplaceItemSeller(BaseModel):
|
|
1945
|
+
model_config = ConfigDict(extra="allow", populate_by_name=True)
|
|
1946
|
+
|
|
1947
|
+
id: str | None = Field(
|
|
1948
|
+
default=None, description="Facebook id of the seller, as a string."
|
|
1949
|
+
)
|
|
1950
|
+
image: str | None = Field(
|
|
1951
|
+
default=None, description="URL of the seller's profile picture."
|
|
1952
|
+
)
|
|
1953
|
+
joined_utc: float | None = Field(
|
|
1954
|
+
default=None,
|
|
1955
|
+
alias="joinedUtc",
|
|
1956
|
+
description="UTC epoch timestamp in seconds (Unix time) the seller joined Facebook. Multiply by 1000 for a JS Date in milliseconds.",
|
|
1957
|
+
)
|
|
1958
|
+
name: str | None = Field(default=None, description="The seller's display name.")
|
|
1959
|
+
rating: float | None = Field(
|
|
1960
|
+
default=None,
|
|
1961
|
+
description="The seller's average rating as a seller, out of 5. Absent when the seller has no ratings or keeps them private.",
|
|
1962
|
+
)
|
|
1963
|
+
rating_count: int | None = Field(
|
|
1964
|
+
default=None,
|
|
1965
|
+
alias="ratingCount",
|
|
1966
|
+
description="Number of ratings the seller has received as a seller. Absent when the seller has no ratings or keeps them private.",
|
|
1967
|
+
)
|
|
1968
|
+
|
|
1969
|
+
|
|
1772
1970
|
class FacebookMarketplaceLocationSearchData(BaseModel):
|
|
1773
1971
|
locations: list[FacebookMarketplaceLocationSearchLocation]
|
|
1774
1972
|
|
|
@@ -1842,8 +2040,13 @@ class FacebookPageContactData(BaseModel):
|
|
|
1842
2040
|
|
|
1843
2041
|
|
|
1844
2042
|
class FacebookPageContactItem(BaseModel):
|
|
1845
|
-
model_config = ConfigDict(extra="allow")
|
|
2043
|
+
model_config = ConfigDict(extra="allow", populate_by_name=True)
|
|
1846
2044
|
|
|
2045
|
+
ad_library_page_id: str | None = Field(
|
|
2046
|
+
default=None,
|
|
2047
|
+
alias="adLibraryPageId",
|
|
2048
|
+
description="The page's Facebook Ad Library id, the `pageId` facebook.company_ads takes. It differs from `id`. Absent when Facebook shows none.",
|
|
2049
|
+
)
|
|
1847
2050
|
address: str | None = Field(
|
|
1848
2051
|
default=None,
|
|
1849
2052
|
description="The page's public physical address. Empty when the page lists none.",
|
|
@@ -1861,7 +2064,11 @@ class FacebookPageContactItem(BaseModel):
|
|
|
1861
2064
|
)
|
|
1862
2065
|
image: str | None = Field(
|
|
1863
2066
|
default=None,
|
|
1864
|
-
description="URL of the page's profile picture,
|
|
2067
|
+
description="URL of the page's profile picture, a signed CDN URL whose query must be kept. Empty when the upstream omits it.",
|
|
2068
|
+
)
|
|
2069
|
+
links: list[str] | None = Field(
|
|
2070
|
+
default=None,
|
|
2071
|
+
description="Other social profiles the page links to, such as its Instagram account, as URLs. Empty when the page links none.",
|
|
1865
2072
|
)
|
|
1866
2073
|
phone: str | None = Field(
|
|
1867
2074
|
default=None,
|
|
@@ -1991,6 +2198,11 @@ class FacebookPostData(BaseModel):
|
|
|
1991
2198
|
alias="durationSeconds",
|
|
1992
2199
|
description="Length of the post's video in seconds, 0 when the post carries no video.",
|
|
1993
2200
|
)
|
|
2201
|
+
feedback_id: str | None = Field(
|
|
2202
|
+
default=None,
|
|
2203
|
+
alias="feedbackId",
|
|
2204
|
+
description="Facebook feedback id of the post; pass it to facebook.post_comments as feedbackId to fetch its comments. Null when this source cannot read it.",
|
|
2205
|
+
)
|
|
1994
2206
|
id: str = Field(
|
|
1995
2207
|
description="Facebook post id. For a reel or video post this is NOT the id in the /reel/ URL; that one is videoId. Populated whenever the provider has data for the entity."
|
|
1996
2208
|
)
|
|
@@ -1998,6 +2210,10 @@ class FacebookPostData(BaseModel):
|
|
|
1998
2210
|
default=None, description="Preview image or video thumbnail URL for the post."
|
|
1999
2211
|
)
|
|
2000
2212
|
likes: int
|
|
2213
|
+
reactions: FacebookPostReaction | None = Field(
|
|
2214
|
+
default=None,
|
|
2215
|
+
description="Reaction counts on the post, broken down by reaction type. Null when this source reports only the total.",
|
|
2216
|
+
)
|
|
2001
2217
|
shares: int
|
|
2002
2218
|
text: str = Field(
|
|
2003
2219
|
description="Populated whenever the provider has data for the entity."
|
|
@@ -2010,11 +2226,28 @@ class FacebookPostData(BaseModel):
|
|
|
2010
2226
|
alias="videoId",
|
|
2011
2227
|
description="Facebook video id of the post's reel or video, the id that appears in its /reel/<id> URL. Null when the post carries no video or this lane cannot read it.",
|
|
2012
2228
|
)
|
|
2229
|
+
video_url: str | None = Field(
|
|
2230
|
+
default=None,
|
|
2231
|
+
alias="videoUrl",
|
|
2232
|
+
description="Playable video file URL of the post's reel or video. Null when the post carries no video or this source cannot read it.",
|
|
2233
|
+
)
|
|
2013
2234
|
views: int | None = Field(
|
|
2014
2235
|
description="Number of views on the post's video. Null when the source cannot report an exact count, for example when it gives only a rounded figure such as 14K."
|
|
2015
2236
|
)
|
|
2016
2237
|
|
|
2017
2238
|
|
|
2239
|
+
class FacebookPostReaction(BaseModel):
|
|
2240
|
+
model_config = ConfigDict(extra="allow")
|
|
2241
|
+
|
|
2242
|
+
angry: int | None = Field(default=None, description="Angry reactions.")
|
|
2243
|
+
care: int | None = Field(default=None, description="Care reactions.")
|
|
2244
|
+
haha: int | None = Field(default=None, description="Haha reactions.")
|
|
2245
|
+
like: int | None = Field(default=None, description="Like reactions.")
|
|
2246
|
+
love: int | None = Field(default=None, description="Love reactions.")
|
|
2247
|
+
sad: int | None = Field(default=None, description="Sad reactions.")
|
|
2248
|
+
wow: int | None = Field(default=None, description="Wow reactions.")
|
|
2249
|
+
|
|
2250
|
+
|
|
2018
2251
|
class FacebookPostCommentsData(BaseModel):
|
|
2019
2252
|
model_config = ConfigDict(populate_by_name=True)
|
|
2020
2253
|
|
|
@@ -2075,6 +2308,11 @@ class FacebookPostCommentsComment(BaseModel):
|
|
|
2075
2308
|
class FacebookPostTranscriptData(BaseModel):
|
|
2076
2309
|
model_config = ConfigDict(extra="allow", populate_by_name=True)
|
|
2077
2310
|
|
|
2311
|
+
duration_seconds: float | None = Field(
|
|
2312
|
+
default=None,
|
|
2313
|
+
alias="durationSeconds",
|
|
2314
|
+
description="Length of the video in seconds, with fractional seconds. Absent when the post has no transcribable video.",
|
|
2315
|
+
)
|
|
2078
2316
|
post_id: str | None = Field(
|
|
2079
2317
|
default=None,
|
|
2080
2318
|
alias="postId",
|
|
@@ -2087,6 +2325,16 @@ class FacebookProfileData(BaseModel):
|
|
|
2087
2325
|
model_config = ConfigDict(extra="allow", populate_by_name=True)
|
|
2088
2326
|
|
|
2089
2327
|
about: str
|
|
2328
|
+
ad_library_page_id: str | None = Field(
|
|
2329
|
+
default=None,
|
|
2330
|
+
alias="adLibraryPageId",
|
|
2331
|
+
description="The page's Facebook Ad Library id, the `pageId` facebook.company_ads takes. It differs from `id`. Absent when Facebook shows none.",
|
|
2332
|
+
)
|
|
2333
|
+
ad_status: str | None = Field(
|
|
2334
|
+
default=None,
|
|
2335
|
+
alias="adStatus",
|
|
2336
|
+
description="Facebook Ad Library status sentence for the page, e.g. whether it is currently running ads. Absent when Facebook shows none.",
|
|
2337
|
+
)
|
|
2090
2338
|
avatar_url: str = Field(
|
|
2091
2339
|
alias="avatarUrl",
|
|
2092
2340
|
description="Populated whenever the provider has data for the entity.",
|
|
@@ -2211,6 +2459,13 @@ class FacebookProfilePostsPost(BaseModel):
|
|
|
2211
2459
|
default=None,
|
|
2212
2460
|
description="Photo, video, and GIF attachments on the post. Empty when the post has none.",
|
|
2213
2461
|
)
|
|
2462
|
+
reactions: FacebookProfilePostsReaction = Field(
|
|
2463
|
+
description="Reaction counts on the post, broken down by reaction type."
|
|
2464
|
+
)
|
|
2465
|
+
shares: int | None = Field(
|
|
2466
|
+
default=None,
|
|
2467
|
+
description="Number of times the post was shared. Null when this source does not report it.",
|
|
2468
|
+
)
|
|
2214
2469
|
text: str = Field(
|
|
2215
2470
|
description="Populated whenever the provider has data for the entity."
|
|
2216
2471
|
)
|
|
@@ -2241,6 +2496,18 @@ class FacebookProfilePostsMedia(BaseModel):
|
|
|
2241
2496
|
)
|
|
2242
2497
|
|
|
2243
2498
|
|
|
2499
|
+
class FacebookProfilePostsReaction(BaseModel):
|
|
2500
|
+
model_config = ConfigDict(extra="allow")
|
|
2501
|
+
|
|
2502
|
+
angry: int | None = Field(default=None, description="Angry reactions.")
|
|
2503
|
+
care: int | None = Field(default=None, description="Care reactions.")
|
|
2504
|
+
haha: int | None = Field(default=None, description="Haha reactions.")
|
|
2505
|
+
like: int | None = Field(default=None, description="Like reactions.")
|
|
2506
|
+
love: int | None = Field(default=None, description="Love reactions.")
|
|
2507
|
+
sad: int | None = Field(default=None, description="Sad reactions.")
|
|
2508
|
+
wow: int | None = Field(default=None, description="Wow reactions.")
|
|
2509
|
+
|
|
2510
|
+
|
|
2244
2511
|
class FacebookProfileReelsData(BaseModel):
|
|
2245
2512
|
model_config = ConfigDict(populate_by_name=True)
|
|
2246
2513
|
|
|
@@ -2280,6 +2547,10 @@ class FacebookProfileReelsReel(BaseModel):
|
|
|
2280
2547
|
caption: str = Field(
|
|
2281
2548
|
description="Reel caption text. Populated whenever the provider has data for the entity."
|
|
2282
2549
|
)
|
|
2550
|
+
comments: int | None = Field(
|
|
2551
|
+
default=None,
|
|
2552
|
+
description="Comment count on the reel. Null when this source does not report it.",
|
|
2553
|
+
)
|
|
2283
2554
|
created_utc: float = Field(
|
|
2284
2555
|
alias="createdUtc",
|
|
2285
2556
|
description="UTC epoch timestamp in seconds (Unix time). Multiply by 1000 for a JS Date in milliseconds. Populated whenever the provider has data for the entity.",
|
|
@@ -2295,7 +2566,15 @@ class FacebookProfileReelsReel(BaseModel):
|
|
|
2295
2566
|
description="Facebook feedback id of the reel, used to fetch its comments.",
|
|
2296
2567
|
)
|
|
2297
2568
|
id: str = Field(
|
|
2298
|
-
description="
|
|
2569
|
+
description="Facebook post id of the reel, the same id facebook.post returns for it. This is NOT the id in the reel's /reel/ URL; that one is videoId. Populated whenever the provider has data for the entity."
|
|
2570
|
+
)
|
|
2571
|
+
likes: int | None = Field(
|
|
2572
|
+
default=None,
|
|
2573
|
+
description="Total reaction count on the reel. Null when this source does not report it.",
|
|
2574
|
+
)
|
|
2575
|
+
shares: int | None = Field(
|
|
2576
|
+
default=None,
|
|
2577
|
+
description="Number of times the reel was shared. Null when this source does not report it.",
|
|
2299
2578
|
)
|
|
2300
2579
|
thumbnail: str = Field(
|
|
2301
2580
|
description="URL of the reel thumbnail image. Populated whenever the provider has data for the entity."
|
|
@@ -2303,6 +2582,15 @@ class FacebookProfileReelsReel(BaseModel):
|
|
|
2303
2582
|
url: str = Field(
|
|
2304
2583
|
description="Canonical URL of the reel. Populated whenever the provider has data for the entity."
|
|
2305
2584
|
)
|
|
2585
|
+
video_id: str = Field(
|
|
2586
|
+
alias="videoId",
|
|
2587
|
+
description="Facebook video id of the reel, the id that appears in its /reel/<id> URL.",
|
|
2588
|
+
)
|
|
2589
|
+
video_url: str | None = Field(
|
|
2590
|
+
default=None,
|
|
2591
|
+
alias="videoUrl",
|
|
2592
|
+
description="Playable video file URL of the reel. Null when this source cannot read it.",
|
|
2593
|
+
)
|
|
2306
2594
|
views: int = Field(description="Number of views on the reel.")
|
|
2307
2595
|
|
|
2308
2596
|
|
|
@@ -2370,6 +2658,11 @@ class FacebookSearchPagesItem(BaseModel):
|
|
|
2370
2658
|
model_config = ConfigDict(extra="allow", populate_by_name=True)
|
|
2371
2659
|
|
|
2372
2660
|
about: str | None = Field(default=None, description="The page's intro text.")
|
|
2661
|
+
ad_library_page_id: str | None = Field(
|
|
2662
|
+
default=None,
|
|
2663
|
+
alias="adLibraryPageId",
|
|
2664
|
+
description="The page's Facebook Ad Library id, the `pageId` facebook.company_ads takes. It differs from `id`. Absent when Facebook shows none.",
|
|
2665
|
+
)
|
|
2373
2666
|
ad_status: str | None = Field(
|
|
2374
2667
|
default=None,
|
|
2375
2668
|
alias="adStatus",
|
|
@@ -2400,7 +2693,7 @@ class FacebookSearchPagesItem(BaseModel):
|
|
|
2400
2693
|
)
|
|
2401
2694
|
image: str | None = Field(
|
|
2402
2695
|
default=None,
|
|
2403
|
-
description="URL of the page's profile picture,
|
|
2696
|
+
description="URL of the page's profile picture, a signed CDN URL whose query must be kept. Empty when the upstream omits it.",
|
|
2404
2697
|
)
|
|
2405
2698
|
likes: int | None = Field(default=None, description="The page's like count.")
|
|
2406
2699
|
owner: str | None = Field(
|
|
@@ -2507,7 +2800,7 @@ class FacebookSearchPostsItem(BaseModel):
|
|
|
2507
2800
|
)
|
|
2508
2801
|
image: str | None = Field(
|
|
2509
2802
|
default=None,
|
|
2510
|
-
description="URL of the post's primary image,
|
|
2803
|
+
description="URL of the post's primary image, a signed CDN URL whose query must be kept. Empty for text-only or video posts.",
|
|
2511
2804
|
)
|
|
2512
2805
|
reaction_count: int | None = Field(
|
|
2513
2806
|
default=None,
|
|
@@ -2523,7 +2816,7 @@ class FacebookSearchPostsItem(BaseModel):
|
|
|
2523
2816
|
description="The post's text/message. Empty for media-only posts with no caption."
|
|
2524
2817
|
)
|
|
2525
2818
|
url: str = Field(
|
|
2526
|
-
description="Canonical URL of the post
|
|
2819
|
+
description="Canonical URL of the post. A post with no page path keeps the query that identifies it (permalink.php?story_fbid=...&id=...). Populated whenever the provider has data for the entity."
|
|
2527
2820
|
)
|
|
2528
2821
|
|
|
2529
2822
|
|
|
@@ -4992,7 +4992,7 @@ class LinkedinNamespace:
|
|
|
4992
4992
|
experience detail, skills, certifications, connections, and verified flags
|
|
4993
4993
|
use linkedin.profile.
|
|
4994
4994
|
|
|
4995
|
-
Price: $0.
|
|
4995
|
+
Price: $0.0008 per request.
|
|
4996
4996
|
|
|
4997
4997
|
Example:
|
|
4998
4998
|
res = client.linkedin.profile_thin(url="https://www.linkedin.com/in/williamhgates")
|
|
@@ -5805,7 +5805,7 @@ class AsyncLinkedinNamespace:
|
|
|
5805
5805
|
experience detail, skills, certifications, connections, and verified flags
|
|
5806
5806
|
use linkedin.profile.
|
|
5807
5807
|
|
|
5808
|
-
Price: $0.
|
|
5808
|
+
Price: $0.0008 per request.
|
|
5809
5809
|
|
|
5810
5810
|
Example:
|
|
5811
5811
|
res = client.linkedin.profile_thin(url="https://www.linkedin.com/in/williamhgates")
|
|
@@ -1342,7 +1342,7 @@ class YoutubeNamespace:
|
|
|
1342
1342
|
Fetch a YouTube channel's stats (subscribers, video count, total views,
|
|
1343
1343
|
description) and the links on its About page, by handle or channel ID.
|
|
1344
1344
|
|
|
1345
|
-
Price: $0.
|
|
1345
|
+
Price: $0.00045 per request.
|
|
1346
1346
|
|
|
1347
1347
|
Example:
|
|
1348
1348
|
res = client.youtube.channel(handle="@mkbhd")
|
|
@@ -1980,7 +1980,7 @@ class AsyncYoutubeNamespace:
|
|
|
1980
1980
|
Fetch a YouTube channel's stats (subscribers, video count, total views,
|
|
1981
1981
|
description) and the links on its About page, by handle or channel ID.
|
|
1982
1982
|
|
|
1983
|
-
Price: $0.
|
|
1983
|
+
Price: $0.00045 per request.
|
|
1984
1984
|
|
|
1985
1985
|
Example:
|
|
1986
1986
|
res = client.youtube.channel(handle="@mkbhd")
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|