scrapebadger-cli 0.16.0__tar.gz → 0.18.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.
- {scrapebadger_cli-0.16.0 → scrapebadger_cli-0.18.0}/PKG-INFO +1 -1
- {scrapebadger_cli-0.16.0 → scrapebadger_cli-0.18.0}/pyproject.toml +1 -1
- {scrapebadger_cli-0.16.0 → scrapebadger_cli-0.18.0}/src/scrapebadger_cli/commands/facebook.py +13 -0
- {scrapebadger_cli-0.16.0 → scrapebadger_cli-0.18.0}/src/scrapebadger_cli/commands/google.py +39 -6
- scrapebadger_cli-0.18.0/src/scrapebadger_cli/commands/naver.py +984 -0
- {scrapebadger_cli-0.16.0 → scrapebadger_cli-0.18.0}/src/scrapebadger_cli/commands/web.py +31 -33
- {scrapebadger_cli-0.16.0 → scrapebadger_cli-0.18.0}/src/scrapebadger_cli/main.py +2 -0
- scrapebadger_cli-0.18.0/tests/test_naver.py +440 -0
- {scrapebadger_cli-0.16.0 → scrapebadger_cli-0.18.0}/uv.lock +1 -1
- {scrapebadger_cli-0.16.0 → scrapebadger_cli-0.18.0}/.gitignore +0 -0
- {scrapebadger_cli-0.16.0 → scrapebadger_cli-0.18.0}/README.md +0 -0
- {scrapebadger_cli-0.16.0 → scrapebadger_cli-0.18.0}/src/scrapebadger_cli/__init__.py +0 -0
- {scrapebadger_cli-0.16.0 → scrapebadger_cli-0.18.0}/src/scrapebadger_cli/client.py +0 -0
- {scrapebadger_cli-0.16.0 → scrapebadger_cli-0.18.0}/src/scrapebadger_cli/commands/__init__.py +0 -0
- {scrapebadger_cli-0.16.0 → scrapebadger_cli-0.18.0}/src/scrapebadger_cli/commands/airbnb.py +0 -0
- {scrapebadger_cli-0.16.0 → scrapebadger_cli-0.18.0}/src/scrapebadger_cli/commands/amazon.py +0 -0
- {scrapebadger_cli-0.16.0 → scrapebadger_cli-0.18.0}/src/scrapebadger_cli/commands/apartments.py +0 -0
- {scrapebadger_cli-0.16.0 → scrapebadger_cli-0.18.0}/src/scrapebadger_cli/commands/app_store.py +0 -0
- {scrapebadger_cli-0.16.0 → scrapebadger_cli-0.18.0}/src/scrapebadger_cli/commands/auth.py +0 -0
- {scrapebadger_cli-0.16.0 → scrapebadger_cli-0.18.0}/src/scrapebadger_cli/commands/baidu.py +0 -0
- {scrapebadger_cli-0.16.0 → scrapebadger_cli-0.18.0}/src/scrapebadger_cli/commands/bing.py +0 -0
- {scrapebadger_cli-0.16.0 → scrapebadger_cli-0.18.0}/src/scrapebadger_cli/commands/booking.py +0 -0
- {scrapebadger_cli-0.16.0 → scrapebadger_cli-0.18.0}/src/scrapebadger_cli/commands/chatgpt.py +0 -0
- {scrapebadger_cli-0.16.0 → scrapebadger_cli-0.18.0}/src/scrapebadger_cli/commands/depop.py +0 -0
- {scrapebadger_cli-0.16.0 → scrapebadger_cli-0.18.0}/src/scrapebadger_cli/commands/duckduckgo.py +0 -0
- {scrapebadger_cli-0.16.0 → scrapebadger_cli-0.18.0}/src/scrapebadger_cli/commands/ebay.py +0 -0
- {scrapebadger_cli-0.16.0 → scrapebadger_cli-0.18.0}/src/scrapebadger_cli/commands/gemini.py +0 -0
- {scrapebadger_cli-0.16.0 → scrapebadger_cli-0.18.0}/src/scrapebadger_cli/commands/google_play.py +0 -0
- {scrapebadger_cli-0.16.0 → scrapebadger_cli-0.18.0}/src/scrapebadger_cli/commands/idealista.py +0 -0
- {scrapebadger_cli-0.16.0 → scrapebadger_cli-0.18.0}/src/scrapebadger_cli/commands/immobiliare.py +0 -0
- {scrapebadger_cli-0.16.0 → scrapebadger_cli-0.18.0}/src/scrapebadger_cli/commands/instagram.py +0 -0
- {scrapebadger_cli-0.16.0 → scrapebadger_cli-0.18.0}/src/scrapebadger_cli/commands/leboncoin.py +0 -0
- {scrapebadger_cli-0.16.0 → scrapebadger_cli-0.18.0}/src/scrapebadger_cli/commands/linkedin.py +0 -0
- {scrapebadger_cli-0.16.0 → scrapebadger_cli-0.18.0}/src/scrapebadger_cli/commands/loopnet.py +0 -0
- {scrapebadger_cli-0.16.0 → scrapebadger_cli-0.18.0}/src/scrapebadger_cli/commands/perplexity.py +0 -0
- {scrapebadger_cli-0.16.0 → scrapebadger_cli-0.18.0}/src/scrapebadger_cli/commands/realtor.py +0 -0
- {scrapebadger_cli-0.16.0 → scrapebadger_cli-0.18.0}/src/scrapebadger_cli/commands/reddit.py +0 -0
- {scrapebadger_cli-0.16.0 → scrapebadger_cli-0.18.0}/src/scrapebadger_cli/commands/redfin.py +0 -0
- {scrapebadger_cli-0.16.0 → scrapebadger_cli-0.18.0}/src/scrapebadger_cli/commands/stream.py +0 -0
- {scrapebadger_cli-0.16.0 → scrapebadger_cli-0.18.0}/src/scrapebadger_cli/commands/tiktok.py +0 -0
- {scrapebadger_cli-0.16.0 → scrapebadger_cli-0.18.0}/src/scrapebadger_cli/commands/twitter.py +0 -0
- {scrapebadger_cli-0.16.0 → scrapebadger_cli-0.18.0}/src/scrapebadger_cli/commands/vinted.py +0 -0
- {scrapebadger_cli-0.16.0 → scrapebadger_cli-0.18.0}/src/scrapebadger_cli/commands/walmart.py +0 -0
- {scrapebadger_cli-0.16.0 → scrapebadger_cli-0.18.0}/src/scrapebadger_cli/commands/yahoo.py +0 -0
- {scrapebadger_cli-0.16.0 → scrapebadger_cli-0.18.0}/src/scrapebadger_cli/commands/yandex.py +0 -0
- {scrapebadger_cli-0.16.0 → scrapebadger_cli-0.18.0}/src/scrapebadger_cli/commands/youtube.py +0 -0
- {scrapebadger_cli-0.16.0 → scrapebadger_cli-0.18.0}/src/scrapebadger_cli/commands/zillow.py +0 -0
- {scrapebadger_cli-0.16.0 → scrapebadger_cli-0.18.0}/src/scrapebadger_cli/config.py +0 -0
- {scrapebadger_cli-0.16.0 → scrapebadger_cli-0.18.0}/src/scrapebadger_cli/output.py +0 -0
- {scrapebadger_cli-0.16.0 → scrapebadger_cli-0.18.0}/tests/test_tiktok_pagination.py +0 -0
- {scrapebadger_cli-0.16.0 → scrapebadger_cli-0.18.0}/tests/test_vinted_image_search.py +0 -0
{scrapebadger_cli-0.16.0 → scrapebadger_cli-0.18.0}/src/scrapebadger_cli/commands/facebook.py
RENAMED
|
@@ -163,6 +163,19 @@ def group(
|
|
|
163
163
|
render(data, fmt, fields)
|
|
164
164
|
|
|
165
165
|
|
|
166
|
+
@app.command(name="group-posts")
|
|
167
|
+
def group_posts(
|
|
168
|
+
group_id: str = typer.Argument(..., help="Group ID or vanity slug"),
|
|
169
|
+
after: str | None = AFTER,
|
|
170
|
+
sort: str = typer.Option("newest", "--sort", help="newest, relevance"),
|
|
171
|
+
fmt: str = FMT,
|
|
172
|
+
fields: str | None = FIELDS,
|
|
173
|
+
) -> None:
|
|
174
|
+
"""Get a public Facebook group's post feed, 3 posts per page."""
|
|
175
|
+
data = api_get(f"/v1/facebook/groups/{group_id}/posts", {"after": after, "sort": sort})
|
|
176
|
+
render(data, fmt, fields)
|
|
177
|
+
|
|
178
|
+
|
|
166
179
|
@app.command()
|
|
167
180
|
def post(
|
|
168
181
|
post_id: str = typer.Argument(..., help="Post ID"),
|
|
@@ -936,12 +936,16 @@ def lens(
|
|
|
936
936
|
language: str | None = typer.Option(None, "--language", help="Language code (alias for --hl)"),
|
|
937
937
|
gl: str | None = typer.Option(None, "--gl", help="Country code"),
|
|
938
938
|
hl: str | None = typer.Option(None, "--hl", help="Language code"),
|
|
939
|
-
product: bool = typer.Option(
|
|
939
|
+
product: bool = typer.Option(
|
|
940
|
+
False, "--product", help="Only the tiles Google marked buyable (price + stock)"
|
|
941
|
+
),
|
|
940
942
|
visual_matches: bool = typer.Option(
|
|
941
|
-
True,
|
|
943
|
+
True,
|
|
944
|
+
"--visual-matches/--no-visual-matches",
|
|
945
|
+
help="Always returned; --no-visual-matches is reported back in warnings",
|
|
942
946
|
),
|
|
943
947
|
exact_matches: bool = typer.Option(
|
|
944
|
-
False, "--exact-matches", help="
|
|
948
|
+
False, "--exact-matches", help="Only the pages hosting this image; falls back to the grid"
|
|
945
949
|
),
|
|
946
950
|
fmt: str = FMT,
|
|
947
951
|
fields: str | None = FIELDS,
|
|
@@ -953,6 +957,14 @@ def lens(
|
|
|
953
957
|
`price` ({value, currency, extracted}) and the raw `tag` chip on
|
|
954
958
|
shoppable matches, and `related_searches` chips. Legacy `results`
|
|
955
959
|
alias kept for backwards compat.
|
|
960
|
+
|
|
961
|
+
`--exact-matches` returns just the pages hosting the image, flagged
|
|
962
|
+
`exact_match`, instead of the broad grid. Available for most images;
|
|
963
|
+
otherwise the full grid comes back and `warnings` says so.
|
|
964
|
+
|
|
965
|
+
Also carries `warnings`: any parameter that could not be applied is named
|
|
966
|
+
there, including an exact-match lookup that came back empty. Note that
|
|
967
|
+
`--fields` filters it out unless you ask for it.
|
|
956
968
|
"""
|
|
957
969
|
data = api_get(
|
|
958
970
|
"/v1/google/lens/search",
|
|
@@ -1250,13 +1262,34 @@ def ads_creative(
|
|
|
1250
1262
|
@app.command(name="ads-advertisers")
|
|
1251
1263
|
def ads_advertisers(
|
|
1252
1264
|
query: str = typer.Argument(..., help="Advertiser name or domain (min 2 chars)"),
|
|
1253
|
-
region: str = typer.Option("US", "--region"),
|
|
1254
|
-
num: int = typer.Option(10, "--num", help="1-
|
|
1265
|
+
region: str = typer.Option("US", "--region", help="Echoed only; --country filters"),
|
|
1266
|
+
num: int = typer.Option(10, "--num", help="Advertisers, 1-3000"),
|
|
1267
|
+
num_domains: int = typer.Option(10, "--num-domains", help="Domain rows, 0-100"),
|
|
1268
|
+
country: str | None = typer.Option(
|
|
1269
|
+
None, "--country", help="ISO2: only advertisers registered there"
|
|
1270
|
+
),
|
|
1271
|
+
fuzzy: bool = typer.Option(
|
|
1272
|
+
False,
|
|
1273
|
+
"--fuzzy",
|
|
1274
|
+
help="Also find misspelled / look-alike advertisers, ranked by similarity (15 credits)",
|
|
1275
|
+
),
|
|
1276
|
+
cursor: str | None = typer.Option(None, "--cursor", help="next_page_token: more domains"),
|
|
1255
1277
|
fmt: str = FMT,
|
|
1256
1278
|
fields: str | None = FIELDS,
|
|
1257
1279
|
) -> None:
|
|
1258
1280
|
"""Search Ads Transparency advertisers (autocomplete)."""
|
|
1259
|
-
data = api_get(
|
|
1281
|
+
data = api_get(
|
|
1282
|
+
"/v1/google/ads/advertisers",
|
|
1283
|
+
{
|
|
1284
|
+
"query": query,
|
|
1285
|
+
"region": region,
|
|
1286
|
+
"num": num,
|
|
1287
|
+
"num_domains": num_domains,
|
|
1288
|
+
"country": country,
|
|
1289
|
+
"fuzzy": fuzzy,
|
|
1290
|
+
"cursor": cursor,
|
|
1291
|
+
},
|
|
1292
|
+
)
|
|
1260
1293
|
render(data, fmt, fields)
|
|
1261
1294
|
|
|
1262
1295
|
|