getanyapi 0.65.0__tar.gz → 0.66.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.
Files changed (106) hide show
  1. {getanyapi-0.65.0 → getanyapi-0.66.0}/PKG-INFO +1 -1
  2. {getanyapi-0.65.0 → getanyapi-0.66.0}/pyproject.toml +1 -1
  3. {getanyapi-0.65.0 → getanyapi-0.66.0}/src/getanyapi/__init__.py +1 -1
  4. {getanyapi-0.65.0 → getanyapi-0.66.0}/src/getanyapi/platforms/facebook.py +63 -5
  5. {getanyapi-0.65.0 → getanyapi-0.66.0}/.gitignore +0 -0
  6. {getanyapi-0.65.0 → getanyapi-0.66.0}/README.md +0 -0
  7. {getanyapi-0.65.0 → getanyapi-0.66.0}/src/getanyapi/_account.py +0 -0
  8. {getanyapi-0.65.0 → getanyapi-0.66.0}/src/getanyapi/_async_client.py +0 -0
  9. {getanyapi-0.65.0 → getanyapi-0.66.0}/src/getanyapi/_client.py +0 -0
  10. {getanyapi-0.65.0 → getanyapi-0.66.0}/src/getanyapi/_errors.py +0 -0
  11. {getanyapi-0.65.0 → getanyapi-0.66.0}/src/getanyapi/_idempotency.py +0 -0
  12. {getanyapi-0.65.0 → getanyapi-0.66.0}/src/getanyapi/_pagination.py +0 -0
  13. {getanyapi-0.65.0 → getanyapi-0.66.0}/src/getanyapi/_transport.py +0 -0
  14. {getanyapi-0.65.0 → getanyapi-0.66.0}/src/getanyapi/discovery_types.py +0 -0
  15. {getanyapi-0.65.0 → getanyapi-0.66.0}/src/getanyapi/platforms/__init__.py +0 -0
  16. {getanyapi-0.65.0 → getanyapi-0.66.0}/src/getanyapi/platforms/ahrefs.py +0 -0
  17. {getanyapi-0.65.0 → getanyapi-0.66.0}/src/getanyapi/platforms/airbnb.py +0 -0
  18. {getanyapi-0.65.0 → getanyapi-0.66.0}/src/getanyapi/platforms/alibaba.py +0 -0
  19. {getanyapi-0.65.0 → getanyapi-0.66.0}/src/getanyapi/platforms/amazon.py +0 -0
  20. {getanyapi-0.65.0 → getanyapi-0.66.0}/src/getanyapi/platforms/apollo.py +0 -0
  21. {getanyapi-0.65.0 → getanyapi-0.66.0}/src/getanyapi/platforms/appstore.py +0 -0
  22. {getanyapi-0.65.0 → getanyapi-0.66.0}/src/getanyapi/platforms/bluesky.py +0 -0
  23. {getanyapi-0.65.0 → getanyapi-0.66.0}/src/getanyapi/platforms/booking.py +0 -0
  24. {getanyapi-0.65.0 → getanyapi-0.66.0}/src/getanyapi/platforms/capterra.py +0 -0
  25. {getanyapi-0.65.0 → getanyapi-0.66.0}/src/getanyapi/platforms/chatgpt.py +0 -0
  26. {getanyapi-0.65.0 → getanyapi-0.66.0}/src/getanyapi/platforms/coinmarketcap.py +0 -0
  27. {getanyapi-0.65.0 → getanyapi-0.66.0}/src/getanyapi/platforms/company.py +0 -0
  28. {getanyapi-0.65.0 → getanyapi-0.66.0}/src/getanyapi/platforms/company_enrichment.py +0 -0
  29. {getanyapi-0.65.0 → getanyapi-0.66.0}/src/getanyapi/platforms/company_identify.py +0 -0
  30. {getanyapi-0.65.0 → getanyapi-0.66.0}/src/getanyapi/platforms/company_search.py +0 -0
  31. {getanyapi-0.65.0 → getanyapi-0.66.0}/src/getanyapi/platforms/congress.py +0 -0
  32. {getanyapi-0.65.0 → getanyapi-0.66.0}/src/getanyapi/platforms/contact_enrichment.py +0 -0
  33. {getanyapi-0.65.0 → getanyapi-0.66.0}/src/getanyapi/platforms/douyin.py +0 -0
  34. {getanyapi-0.65.0 → getanyapi-0.66.0}/src/getanyapi/platforms/ebay.py +0 -0
  35. {getanyapi-0.65.0 → getanyapi-0.66.0}/src/getanyapi/platforms/email.py +0 -0
  36. {getanyapi-0.65.0 → getanyapi-0.66.0}/src/getanyapi/platforms/email_finding.py +0 -0
  37. {getanyapi-0.65.0 → getanyapi-0.66.0}/src/getanyapi/platforms/email_verification.py +0 -0
  38. {getanyapi-0.65.0 → getanyapi-0.66.0}/src/getanyapi/platforms/fiverr.py +0 -0
  39. {getanyapi-0.65.0 → getanyapi-0.66.0}/src/getanyapi/platforms/g2.py +0 -0
  40. {getanyapi-0.65.0 → getanyapi-0.66.0}/src/getanyapi/platforms/gemini.py +0 -0
  41. {getanyapi-0.65.0 → getanyapi-0.66.0}/src/getanyapi/platforms/github.py +0 -0
  42. {getanyapi-0.65.0 → getanyapi-0.66.0}/src/getanyapi/platforms/glassdoor.py +0 -0
  43. {getanyapi-0.65.0 → getanyapi-0.66.0}/src/getanyapi/platforms/google.py +0 -0
  44. {getanyapi-0.65.0 → getanyapi-0.66.0}/src/getanyapi/platforms/google_ads.py +0 -0
  45. {getanyapi-0.65.0 → getanyapi-0.66.0}/src/getanyapi/platforms/google_finance.py +0 -0
  46. {getanyapi-0.65.0 → getanyapi-0.66.0}/src/getanyapi/platforms/google_shopping.py +0 -0
  47. {getanyapi-0.65.0 → getanyapi-0.66.0}/src/getanyapi/platforms/hackernews.py +0 -0
  48. {getanyapi-0.65.0 → getanyapi-0.66.0}/src/getanyapi/platforms/indeed.py +0 -0
  49. {getanyapi-0.65.0 → getanyapi-0.66.0}/src/getanyapi/platforms/instagram.py +0 -0
  50. {getanyapi-0.65.0 → getanyapi-0.66.0}/src/getanyapi/platforms/job_search.py +0 -0
  51. {getanyapi-0.65.0 → getanyapi-0.66.0}/src/getanyapi/platforms/linkedin.py +0 -0
  52. {getanyapi-0.65.0 → getanyapi-0.66.0}/src/getanyapi/platforms/maps.py +0 -0
  53. {getanyapi-0.65.0 → getanyapi-0.66.0}/src/getanyapi/platforms/mobile_phone.py +0 -0
  54. {getanyapi-0.65.0 → getanyapi-0.66.0}/src/getanyapi/platforms/naver.py +0 -0
  55. {getanyapi-0.65.0 → getanyapi-0.66.0}/src/getanyapi/platforms/nextdoor.py +0 -0
  56. {getanyapi-0.65.0 → getanyapi-0.66.0}/src/getanyapi/platforms/people_search.py +0 -0
  57. {getanyapi-0.65.0 → getanyapi-0.66.0}/src/getanyapi/platforms/perplexity.py +0 -0
  58. {getanyapi-0.65.0 → getanyapi-0.66.0}/src/getanyapi/platforms/person.py +0 -0
  59. {getanyapi-0.65.0 → getanyapi-0.66.0}/src/getanyapi/platforms/person_enrichment.py +0 -0
  60. {getanyapi-0.65.0 → getanyapi-0.66.0}/src/getanyapi/platforms/pinterest.py +0 -0
  61. {getanyapi-0.65.0 → getanyapi-0.66.0}/src/getanyapi/platforms/playstore.py +0 -0
  62. {getanyapi-0.65.0 → getanyapi-0.66.0}/src/getanyapi/platforms/polymarket.py +0 -0
  63. {getanyapi-0.65.0 → getanyapi-0.66.0}/src/getanyapi/platforms/property_records.py +0 -0
  64. {getanyapi-0.65.0 → getanyapi-0.66.0}/src/getanyapi/platforms/realtor.py +0 -0
  65. {getanyapi-0.65.0 → getanyapi-0.66.0}/src/getanyapi/platforms/reddit.py +0 -0
  66. {getanyapi-0.65.0 → getanyapi-0.66.0}/src/getanyapi/platforms/redfin.py +0 -0
  67. {getanyapi-0.65.0 → getanyapi-0.66.0}/src/getanyapi/platforms/rednote.py +0 -0
  68. {getanyapi-0.65.0 → getanyapi-0.66.0}/src/getanyapi/platforms/sec.py +0 -0
  69. {getanyapi-0.65.0 → getanyapi-0.66.0}/src/getanyapi/platforms/semrush.py +0 -0
  70. {getanyapi-0.65.0 → getanyapi-0.66.0}/src/getanyapi/platforms/seo.py +0 -0
  71. {getanyapi-0.65.0 → getanyapi-0.66.0}/src/getanyapi/platforms/similarweb.py +0 -0
  72. {getanyapi-0.65.0 → getanyapi-0.66.0}/src/getanyapi/platforms/snapchat.py +0 -0
  73. {getanyapi-0.65.0 → getanyapi-0.66.0}/src/getanyapi/platforms/social.py +0 -0
  74. {getanyapi-0.65.0 → getanyapi-0.66.0}/src/getanyapi/platforms/spotify.py +0 -0
  75. {getanyapi-0.65.0 → getanyapi-0.66.0}/src/getanyapi/platforms/substack.py +0 -0
  76. {getanyapi-0.65.0 → getanyapi-0.66.0}/src/getanyapi/platforms/technographics.py +0 -0
  77. {getanyapi-0.65.0 → getanyapi-0.66.0}/src/getanyapi/platforms/threads.py +0 -0
  78. {getanyapi-0.65.0 → getanyapi-0.66.0}/src/getanyapi/platforms/tiktok.py +0 -0
  79. {getanyapi-0.65.0 → getanyapi-0.66.0}/src/getanyapi/platforms/tiktok_shop.py +0 -0
  80. {getanyapi-0.65.0 → getanyapi-0.66.0}/src/getanyapi/platforms/tripadvisor.py +0 -0
  81. {getanyapi-0.65.0 → getanyapi-0.66.0}/src/getanyapi/platforms/trustpilot.py +0 -0
  82. {getanyapi-0.65.0 → getanyapi-0.66.0}/src/getanyapi/platforms/truthsocial.py +0 -0
  83. {getanyapi-0.65.0 → getanyapi-0.66.0}/src/getanyapi/platforms/twitter.py +0 -0
  84. {getanyapi-0.65.0 → getanyapi-0.66.0}/src/getanyapi/platforms/upwork.py +0 -0
  85. {getanyapi-0.65.0 → getanyapi-0.66.0}/src/getanyapi/platforms/walmart.py +0 -0
  86. {getanyapi-0.65.0 → getanyapi-0.66.0}/src/getanyapi/platforms/web.py +0 -0
  87. {getanyapi-0.65.0 → getanyapi-0.66.0}/src/getanyapi/platforms/weibo.py +0 -0
  88. {getanyapi-0.65.0 → getanyapi-0.66.0}/src/getanyapi/platforms/yahoo_finance.py +0 -0
  89. {getanyapi-0.65.0 → getanyapi-0.66.0}/src/getanyapi/platforms/yelp.py +0 -0
  90. {getanyapi-0.65.0 → getanyapi-0.66.0}/src/getanyapi/platforms/youtube.py +0 -0
  91. {getanyapi-0.65.0 → getanyapi-0.66.0}/src/getanyapi/platforms/zhihu.py +0 -0
  92. {getanyapi-0.65.0 → getanyapi-0.66.0}/src/getanyapi/platforms/zillow.py +0 -0
  93. {getanyapi-0.65.0 → getanyapi-0.66.0}/src/getanyapi/py.typed +0 -0
  94. {getanyapi-0.65.0 → getanyapi-0.66.0}/src/getanyapi/types.py +0 -0
  95. {getanyapi-0.65.0 → getanyapi-0.66.0}/tests/conftest.py +0 -0
  96. {getanyapi-0.65.0 → getanyapi-0.66.0}/tests/test_account.py +0 -0
  97. {getanyapi-0.65.0 → getanyapi-0.66.0}/tests/test_client.py +0 -0
  98. {getanyapi-0.65.0 → getanyapi-0.66.0}/tests/test_durable_requests.py +0 -0
  99. {getanyapi-0.65.0 → getanyapi-0.66.0}/tests/test_envelope.py +0 -0
  100. {getanyapi-0.65.0 → getanyapi-0.66.0}/tests/test_errors.py +0 -0
  101. {getanyapi-0.65.0 → getanyapi-0.66.0}/tests/test_fixture_roundtrip.py +0 -0
  102. {getanyapi-0.65.0 → getanyapi-0.66.0}/tests/test_fixture_sweep.py +0 -0
  103. {getanyapi-0.65.0 → getanyapi-0.66.0}/tests/test_not_found_reason.py +0 -0
  104. {getanyapi-0.65.0 → getanyapi-0.66.0}/tests/test_pagination.py +0 -0
  105. {getanyapi-0.65.0 → getanyapi-0.66.0}/tests/test_transport.py +0 -0
  106. {getanyapi-0.65.0 → getanyapi-0.66.0}/uv.lock +0 -0
@@ -1,6 +1,6 @@
1
1
  Metadata-Version: 2.5
2
2
  Name: getanyapi
3
- Version: 0.65.0
3
+ Version: 0.66.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
@@ -4,7 +4,7 @@ build-backend = "hatchling.build"
4
4
 
5
5
  [project]
6
6
  name = "getanyapi"
7
- version = "0.65.0"
7
+ version = "0.66.0"
8
8
  description = "Official typed Python SDK for AnyAPI: any API, one wallet, USD, no subscriptions."
9
9
  readme = "README.md"
10
10
  requires-python = ">=3.10"
@@ -55,7 +55,7 @@ from .types import (
55
55
  unwrap,
56
56
  )
57
57
 
58
- __version__ = "0.65.0"
58
+ __version__ = "0.66.0"
59
59
 
60
60
  __all__ = [
61
61
  # clients + top-level functions
@@ -93,6 +93,29 @@ class FacebookAdsSearchInput(TypedDict, total=False):
93
93
  """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."""
94
94
  query: Required[str]
95
95
  """Keyword to search the Meta Ad Library for (e.g. "protein powder")."""
96
+ requireFields: NotRequired[
97
+ list[
98
+ Literal[
99
+ "active",
100
+ "adCount",
101
+ "ads",
102
+ "caption",
103
+ "categories",
104
+ "endDate",
105
+ "isReshared",
106
+ "linkDescription",
107
+ "media",
108
+ "nextCursor",
109
+ "pageCategories",
110
+ "pageDeleted",
111
+ "pageLikes",
112
+ "pageProfilePicture",
113
+ "pageUrl",
114
+ "totalResults",
115
+ ]
116
+ ]
117
+ ]
118
+ """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 `totalResults` or `pageLikes`, 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 an ad that genuinely lacks it. Naming a combination that no single source returns together is refused as invalid input, with no charge."""
96
119
  searchType: NotRequired[Literal["keyword_unordered", "keyword_exact_phrase"]]
97
120
  """Match mode for the query: loose keyword match (keyword_unordered, the default) or exact phrase (keyword_exact_phrase)."""
98
121
  sortBy: NotRequired[Literal["impressions", "recent"]]
@@ -430,6 +453,21 @@ class FacebookPostCommentsInput(TypedDict, total=False):
430
453
  """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
454
  preferLatencyUnderMs: NotRequired[int]
432
455
  """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."""
456
+ requireFields: NotRequired[
457
+ list[
458
+ Literal[
459
+ "authorId",
460
+ "authorImage",
461
+ "expansionToken",
462
+ "feedbackId",
463
+ "hasNextPage",
464
+ "nextCursor",
465
+ "reactions",
466
+ "replies",
467
+ ]
468
+ ]
469
+ ]
470
+ """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 `hasNextPage`, 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 comment that genuinely lacks it. Naming a combination that no single source returns together is refused as invalid input, with no charge."""
433
471
  source: NotRequired[list[str]]
434
472
  """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`."""
435
473
  url: NotRequired[str]
@@ -515,6 +553,21 @@ class FacebookProfileReelsInput(TypedDict, total=False):
515
553
  """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."""
516
554
  preferLatencyUnderMs: NotRequired[int]
517
555
  """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."""
556
+ requireFields: NotRequired[
557
+ list[
558
+ Literal[
559
+ "authorId",
560
+ "authorImage",
561
+ "authorName",
562
+ "authorVerified",
563
+ "durationSeconds",
564
+ "feedbackId",
565
+ "nextCursor",
566
+ "views",
567
+ ]
568
+ ]
569
+ ]
570
+ """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."""
518
571
  source: NotRequired[list[str]]
519
572
  """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`."""
520
573
  url: Required[str]
@@ -565,7 +618,7 @@ class FacebookSearchPostsInput(TypedDict, total=False):
565
618
  ignoreSources: NotRequired[list[str]]
566
619
  """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."""
567
620
  limit: NotRequired[int]
568
- """Maximum number of results to return (1-20, default 20). You are billed per result returned, so a lower limit costs less. Range: 1 to 20."""
621
+ """Maximum number of results to return (1-20, default 20). Range: 1 to 20."""
569
622
  location: NotRequired[str]
570
623
  """Optional location to narrow results; include both city and country for best matches (e.g. 'Paris, France')."""
571
624
  preferLatencyUnderMs: NotRequired[int]
@@ -906,7 +959,10 @@ class FacebookAdsSearchData(BaseModel):
906
959
  alias="nextCursor",
907
960
  description="Opaque cursor for the next page of ads, or null when this lane has no more. Pass it back as cursor to continue.",
908
961
  )
909
- total_results: int = Field(alias="totalResults")
962
+ total_results: int | None = Field(
963
+ alias="totalResults",
964
+ description="Total number of ads matching the search. Null when the source cannot report an exact count.",
965
+ )
910
966
 
911
967
 
912
968
  class FacebookAdsSearchAd(BaseModel):
@@ -2006,7 +2062,9 @@ class FacebookPostData(BaseModel):
2006
2062
  alias="videoId",
2007
2063
  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.",
2008
2064
  )
2009
- views: int
2065
+ views: int | None = Field(
2066
+ 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."
2067
+ )
2010
2068
 
2011
2069
 
2012
2070
  class FacebookPostCommentsData(BaseModel):
@@ -3377,7 +3435,7 @@ class FacebookNamespace:
3377
3435
  Search public Facebook posts by keyword, optionally filtered by location,
3378
3436
  and get structured post records (text, author, engagement).
3379
3437
 
3380
- Price: $0.00006 per request plus $0.0033 per result (maximum $0.0661).
3438
+ Price: $0.03 per request.
3381
3439
 
3382
3440
  Example:
3383
3441
  res = client.facebook.search_posts(limit=3, query="nike")
@@ -4232,7 +4290,7 @@ class AsyncFacebookNamespace:
4232
4290
  Search public Facebook posts by keyword, optionally filtered by location,
4233
4291
  and get structured post records (text, author, engagement).
4234
4292
 
4235
- Price: $0.00006 per request plus $0.0033 per result (maximum $0.0661).
4293
+ Price: $0.03 per request.
4236
4294
 
4237
4295
  Example:
4238
4296
  res = client.facebook.search_posts(limit=3, query="nike")
File without changes
File without changes
File without changes
File without changes