diff --git a/GENERATION_REPORT.md b/GENERATION_REPORT.md index 39ba047..f9fe3ab 100644 --- a/GENERATION_REPORT.md +++ b/GENERATION_REPORT.md @@ -1,8 +1,8 @@ # Generation Report -Generated at: 2026-06-24T08:08:48Z +Generated at: 2026-08-12T07:30:00Z -## APIs generated (48) +## APIs generated (55) - airbnb-listing - airbnb-property - amazon-product @@ -16,7 +16,9 @@ Generated at: 2026-06-24T08:08:48Z - yellowpages-place - yellowpages-search - yelp-place +- yelp-reviews - yelp-search +- duckduckgo - google-images - google-maps - google-maps-contributor-reviews @@ -35,7 +37,6 @@ Generated at: 2026-06-24T08:08:48Z - google-flights - google-hotels - google-trends -- instagram-profile - glassdoor-job - glassdoor-listing - indeed-job @@ -44,6 +45,12 @@ Generated at: 2026-06-24T08:08:48Z - redfin-property - shopify-collections - shopify-products +- instagram-posts +- instagram-profile +- tiktok-comments +- tiktok-posts +- tiktok-profile +- tiktok-search - web-scraping - youtube-channel-api - youtube-search-api diff --git a/cmd/gen_bing_serp.go b/cmd/gen_bing_serp.go index 94b5057..cefb6e3 100644 --- a/cmd/gen_bing_serp.go +++ b/cmd/gen_bing_serp.go @@ -20,7 +20,6 @@ var ( func newBingSerpCmd() *cobra.Command { var p_ccVar string - var p_countVar int var p_deviceTypeVar string var p_filtersVar string var p_firstVar int @@ -29,7 +28,8 @@ func newBingSerpCmd() *cobra.Command { var p_lonVar string var p_mktVar string var p_qVar string - var p_safeVar string + var p_safeSearchVar string + var p_setLangVar string cmd := &cobra.Command{ Use: "bing-serp", @@ -42,8 +42,8 @@ func newBingSerpCmd() *cobra.Command { return err } } - if c.Flags().Changed("safe") { - if err := validateEnumString("safe", p_safeVar, []string{"off", "moderate", "strict"}); err != nil { + if c.Flags().Changed("safe-search") { + if err := validateEnumString("safe-search", p_safeSearchVar, []string{"off", "moderate", "strict"}); err != nil { return err } } @@ -59,9 +59,6 @@ func newBingSerpCmd() *cobra.Command { if c.Flags().Changed("cc") { params.Set("cc", p_ccVar) } - if c.Flags().Changed("count") { - params.Set("count", strconv.Itoa(p_countVar)) - } if c.Flags().Changed("device-type") { params.Set("deviceType", p_deviceTypeVar) } @@ -84,8 +81,11 @@ func newBingSerpCmd() *cobra.Command { params.Set("mkt", p_mktVar) } params.Set("q", p_qVar) - if c.Flags().Changed("safe") { - params.Set("safe", p_safeVar) + if c.Flags().Changed("safe-search") { + params.Set("safeSearch", p_safeSearchVar) + } + if c.Flags().Changed("set-lang") { + params.Set("setLang", p_setLangVar) } resp, err := cli.Do(ctx, "GET", "https://api.hasdata.com/scrape/bing/serp", params, nil) if err != nil { @@ -95,7 +95,6 @@ func newBingSerpCmd() *cobra.Command { }, } cmd.Flags().StringVar(&p_ccVar, "cc", "", "cc Country: The two-letter country code for the country to search from.") - cmd.Flags().IntVar(&p_countVar, "count", 0, "count Number of Results: Number of results per page, ranging from 1 to 50.") cmd.Flags().StringVar(&p_deviceTypeVar, "device-type", "desktop", "deviceType Device: Specify the device type for the search. [allowed: desktop|mobile|tablet]") _ = cmd.RegisterFlagCompletionFunc("device-type", func(*cobra.Command, []string, string) ([]string, cobra.ShellCompDirective) { return []string{"desktop", "mobile", "tablet"}, cobra.ShellCompDirectiveNoFileComp @@ -103,15 +102,16 @@ func newBingSerpCmd() *cobra.Command { cmd.Flags().StringVar(&p_filtersVar, "filters", "", "filters Additional Filtering: Allows applying various filters to narrow search results, including date-based options:\n\n - `ex1:\"ez1\"` – past 24 hours\n - `ex1:\"ez2\"` – past week\n - `ex1:\"ez3\"` – past month\n\nFor complex filters, run a Bing search and copy the filters parameter from the URL.\n") cmd.Flags().IntVar(&p_firstVar, "first", 0, "first Result Offset: This parameter specifies the number of search results to skip and is used for implementing pagination. For example, a value of 1 (default) indicates the first page of results, 11 refers to the second page, and 21 to the third page.\n") cmd.Flags().StringVar(&p_latVar, "lat", "", "lat Latitude: GPS latitude for the search origin.") - cmd.Flags().StringVar(&p_locationVar, "location", "Austin,Texas,United States", "location Location: Defines the search’s origin location. For realistic results, set location at the city level. If omitted, the proxy’s location may be used.") + cmd.Flags().StringVar(&p_locationVar, "location", "Austin, Texas, United States", "location Location: Defines the search’s origin location as free text (e.g. `Austin, Texas`). It is resolved to coordinates to localize the results. For realistic results, set location at the city level. If both `lat` and `lon` are provided, they take precedence and `location` is ignored. If omitted, the proxy’s location may be used.") cmd.Flags().StringVar(&p_lonVar, "lon", "", "lon Longitude: GPS longitude for the search origin.") cmd.Flags().StringVar(&p_mktVar, "mkt", "", "mkt Market Code: The two-letter country code for the country to search from.") cmd.Flags().StringVar(&p_qVar, "q", "Coffee", "q Search Query: Specify the search term for which you want to scrape the SERP. (required)") _ = cmd.MarkFlagRequired("q") - cmd.Flags().StringVar(&p_safeVar, "safe", "", "safe Adult Content Filtering: Adult Content Filtering option. [allowed: off|moderate|strict]") - _ = cmd.RegisterFlagCompletionFunc("safe", func(*cobra.Command, []string, string) ([]string, cobra.ShellCompDirective) { + cmd.Flags().StringVar(&p_safeSearchVar, "safe-search", "", "safeSearch Adult Content Filtering: Adult Content Filtering option. [allowed: off|moderate|strict]") + _ = cmd.RegisterFlagCompletionFunc("safe-search", func(*cobra.Command, []string, string) ([]string, cobra.ShellCompDirective) { return []string{"off", "moderate", "strict"}, cobra.ShellCompDirectiveNoFileComp }) + cmd.Flags().StringVar(&p_setLangVar, "set-lang", "", "setLang Interface Language: The language of the user interface and preferred result language. Accepts a two-letter language code (e.g. `en`, `de`) or a locale/script variant (e.g. `en-gb`, `zh-hans`, `pt-br`).") return cmd } diff --git a/cmd/gen_booking_place.go b/cmd/gen_booking_place.go index f5b975b..e2be790 100644 --- a/cmd/gen_booking_place.go +++ b/cmd/gen_booking_place.go @@ -31,7 +31,7 @@ func newBookingPlaceCmd() *cobra.Command { cmd := &cobra.Command{ Use: "booking-place", - Short: "Booking.com Place API (10 credits/call)", + Short: "Booking.com Place Scraper API (10 credits/call)", Long: "The Booking.com Place API returns full details for a single Booking.com property along with the list of available room suites for the requested stay dates and guest composition.\n\nEndpoint: GET https://api.hasdata.com/scrape/booking/place\nCost: 10 credits per call.", Args: cobra.NoArgs, PreRunE: func(c *cobra.Command, _ []string) error { diff --git a/cmd/gen_booking_search.go b/cmd/gen_booking_search.go index 094e4c7..1945f62 100644 --- a/cmd/gen_booking_search.go +++ b/cmd/gen_booking_search.go @@ -50,7 +50,7 @@ func newBookingSearchCmd() *cobra.Command { cmd := &cobra.Command{ Use: "booking-search", - Short: "Booking.com Search API (10 credits/call)", + Short: "Booking.com Search Scraper API (10 credits/call)", Long: "The Booking.com Search API returns the collection of accommodations from a Booking.com search results page for a given destination and stay dates, with rich filtering by property type, rating, facilities, price and more.\n\nEndpoint: GET https://api.hasdata.com/scrape/booking/search\nCost: 10 credits per call.", Args: cobra.NoArgs, PreRunE: func(c *cobra.Command, _ []string) error { diff --git a/cmd/gen_duckduckgo.go b/cmd/gen_duckduckgo.go new file mode 100644 index 0000000..1608be8 --- /dev/null +++ b/cmd/gen_duckduckgo.go @@ -0,0 +1,126 @@ +// Code generated by internal/gen. DO NOT EDIT. + +package cmd + +import ( + "encoding/json" + "fmt" + "net/url" + "strconv" + + "github.com/spf13/cobra" +) + +var ( + _ = json.Marshal + _ = fmt.Sprintf + _ = url.Values{} + _ = strconv.Itoa +) + +func newDuckduckgoCmd() *cobra.Command { + var p_ccVar string + var p_deviceTypeVar string + var p_klVar string + var p_nextPageTokenVar string + var p_qVar string + var p_safeSearchVar string + var p_setLangVar string + + cmd := &cobra.Command{ + Use: "duckduckgo", + Short: "DuckDuckGo SERP API (10 credits/call)", + Long: "The DuckDuckGo SERP API provides real-time access to structured DuckDuckGo search results.\n\nEndpoint: GET https://api.hasdata.com/scrape/duckduckgo/serp\nCost: 10 credits per call.", + Args: cobra.NoArgs, + PreRunE: func(c *cobra.Command, _ []string) error { + if c.Flags().Changed("cc") { + if err := validateEnumString("cc", p_ccVar, []string{"ar", "au", "at", "be", "br", "ca", "cl", "dk", "fi", "fr", "de", "hk", "in", "id", "it", "jp", "kr", "my", "mx", "nl", "nz", "no", "cn", "pl", "pt", "ph", "ru", "sa", "za", "es", "se", "ch", "tw", "tr", "gb", "us"}); err != nil { + return err + } + } + if c.Flags().Changed("device-type") { + if err := validateEnumString("device-type", p_deviceTypeVar, []string{"desktop", "mobile", "tablet"}); err != nil { + return err + } + } + if c.Flags().Changed("kl") { + if err := validateEnumString("kl", p_klVar, []string{"ar-es", "au-en", "at-de", "be-nl", "be-fr", "br-pt", "ca-en", "ca-fr", "cl-es", "dk-da", "fi-fi", "fr-fr", "de-de", "hk-tzh", "in-en", "id-en", "it-it", "jp-jp", "kr-kr", "my-en", "mx-es", "nl-nl", "nz-en", "no-no", "cn-zh", "pl-pl", "ph-en", "ru-ru", "za-en", "es-es", "se-sv", "ch-de", "tw-tzh", "tr-tr", "uk-en", "us-en", "wt-wt"}); err != nil { + return err + } + } + if c.Flags().Changed("safe-search") { + if err := validateEnumString("safe-search", p_safeSearchVar, []string{"off", "moderate", "strict"}); err != nil { + return err + } + } + if c.Flags().Changed("set-lang") { + if err := validateEnumString("set-lang", p_setLangVar, []string{"ar", "ca", "zh-hans", "zh-hant", "hr", "cs", "da", "nl", "en", "et", "fi", "fr", "de", "he", "hu", "it", "ja", "ko", "lv", "lt", "nb", "pl", "pt", "ro", "ru", "sk", "sl", "es", "sv", "th", "tr", "uk", "vi"}); err != nil { + return err + } + } + return nil + }, + RunE: func(c *cobra.Command, _ []string) error { + ctx := c.Context() + cli, err := Client() + if err != nil { + return err + } + params := url.Values{} + if c.Flags().Changed("cc") { + params.Set("cc", p_ccVar) + } + if c.Flags().Changed("device-type") { + params.Set("deviceType", p_deviceTypeVar) + } + if c.Flags().Changed("kl") { + params.Set("kl", p_klVar) + } + if c.Flags().Changed("next-page-token") { + params.Set("nextPageToken", p_nextPageTokenVar) + } + if c.Flags().Changed("q") { + params.Set("q", p_qVar) + } + if c.Flags().Changed("safe-search") { + params.Set("safeSearch", p_safeSearchVar) + } + if c.Flags().Changed("set-lang") { + params.Set("setLang", p_setLangVar) + } + resp, err := cli.Do(ctx, "GET", "https://api.hasdata.com/scrape/duckduckgo/serp", params, nil) + if err != nil { + return err + } + return WriteResponse(c, resp) + }, + } + cmd.Flags().StringVar(&p_ccVar, "cc", "", "cc Country: The two-letter country code for the country to search from. Combined with `setLang` to form the DuckDuckGo region. Ignored if `kl` is set. [allowed: ar|au|at|be|br|ca|cl|dk|fi|fr|de|hk|in|id|it|jp|kr|my|mx|nl|nz|no|cn|pl|pt|ph|ru|sa|za|es|se|ch|tw|tr|gb|us]") + _ = cmd.RegisterFlagCompletionFunc("cc", func(*cobra.Command, []string, string) ([]string, cobra.ShellCompDirective) { + return []string{"ar", "au", "at", "be", "br", "ca", "cl", "dk", "fi", "fr", "de", "hk", "in", "id", "it", "jp", "kr", "my", "mx", "nl", "nz", "no", "cn", "pl", "pt", "ph", "ru", "sa", "za", "es", "se", "ch", "tw", "tr", "gb", "us"}, cobra.ShellCompDirectiveNoFileComp + }) + cmd.Flags().StringVar(&p_deviceTypeVar, "device-type", "desktop", "deviceType Device: Specify the device type for the search. [allowed: desktop|mobile|tablet]") + _ = cmd.RegisterFlagCompletionFunc("device-type", func(*cobra.Command, []string, string) ([]string, cobra.ShellCompDirective) { + return []string{"desktop", "mobile", "tablet"}, cobra.ShellCompDirectiveNoFileComp + }) + cmd.Flags().StringVar(&p_klVar, "kl", "", "kl Region: DuckDuckGo region code in `-` form (e.g. `us-en`, `de-de`). Sets country and interface language at once; takes precedence over `cc`/`setLang`. Use `wt-wt` for no region. [allowed: ar-es|au-en|at-de|be-nl|be-fr|br-pt|ca-en|ca-fr|cl-es|dk-da|fi-fi|fr-fr|de-de|hk-tzh|in-en|id-en|it-it|jp-jp|kr-kr|my-en|mx-es|nl-nl|nz-en|no-no|cn-zh|pl-pl|ph-en|ru-ru|za-en|es-es|se-sv|ch-de|tw-tzh|tr-tr|uk-en|us-en|wt-wt]") + _ = cmd.RegisterFlagCompletionFunc("kl", func(*cobra.Command, []string, string) ([]string, cobra.ShellCompDirective) { + return []string{"ar-es", "au-en", "at-de", "be-nl", "be-fr", "br-pt", "ca-en", "ca-fr", "cl-es", "dk-da", "fi-fi", "fr-fr", "de-de", "hk-tzh", "in-en", "id-en", "it-it", "jp-jp", "kr-kr", "my-en", "mx-es", "nl-nl", "nz-en", "no-no", "cn-zh", "pl-pl", "ph-en", "ru-ru", "za-en", "es-es", "se-sv", "ch-de", "tw-tzh", "tr-tr", "uk-en", "us-en", "wt-wt"}, cobra.ShellCompDirectiveNoFileComp + }) + cmd.Flags().StringVar(&p_nextPageTokenVar, "next-page-token", "", "nextPageToken Next Page Token: Opaque token returned in each response as `nextPageToken`. Pass it back (in place of `q`) to fetch the next page of results. It carries a pre-signed page URL bound to the original request's session, so it must be used as-is and cannot be constructed manually. Absent when there are no further pages.\n") + cmd.Flags().StringVar(&p_qVar, "q", "Coffee", "q Search Query: Specify the search term for which you want to scrape the SERP. Required unless `nextPageToken` is provided (which carries the query of the page it continues).") + cmd.Flags().StringVar(&p_safeSearchVar, "safe-search", "", "safeSearch Adult Content Filtering: Adult Content Filtering option. [allowed: off|moderate|strict]") + _ = cmd.RegisterFlagCompletionFunc("safe-search", func(*cobra.Command, []string, string) ([]string, cobra.ShellCompDirective) { + return []string{"off", "moderate", "strict"}, cobra.ShellCompDirectiveNoFileComp + }) + cmd.Flags().StringVar(&p_setLangVar, "set-lang", "", "setLang Interface Language: The preferred result/interface language code — usually two letters (e.g. `en`, `de`), with script-tag variants for some languages (e.g. `zh-hans`, `zh-hant`). Combined with `cc` to form the DuckDuckGo region. Ignored if `kl` is set. [allowed: ar|ca|zh-hans|zh-hant|hr|cs|da|nl|en|et|fi|fr|de|he|hu|it|ja|ko|lv|lt|nb|pl|pt|ro|ru|sk|sl|es|sv|th|tr|uk|vi]") + _ = cmd.RegisterFlagCompletionFunc("set-lang", func(*cobra.Command, []string, string) ([]string, cobra.ShellCompDirective) { + return []string{"ar", "ca", "zh-hans", "zh-hant", "hr", "cs", "da", "nl", "en", "et", "fi", "fr", "de", "he", "hu", "it", "ja", "ko", "lv", "lt", "nb", "pl", "pt", "ro", "ru", "sk", "sl", "es", "sv", "th", "tr", "uk", "vi"}, cobra.ShellCompDirectiveNoFileComp + }) + + return cmd +} + +func init() { + RegisterAPICommand("duckduckgo", "DuckDuckGo", newDuckduckgoCmd()) +} diff --git a/cmd/gen_google_immersive_product.go b/cmd/gen_google_immersive_product.go index 531ff95..23ae29b 100644 --- a/cmd/gen_google_immersive_product.go +++ b/cmd/gen_google_immersive_product.go @@ -54,7 +54,7 @@ func newGoogleImmersiveProductCmd() *cobra.Command { } cmd.Flags().BoolVar(&p_moreStoresVar, "more-stores", false, "moreStores Fetch More Stores: Fetch additional store results in a single search. By default it returns 3–5 stores, and when true it returns up to 13 or the maximum available for the product.") cmd.Flags().StringVar(&p_nextPageTokenVar, "next-page-token", "", "nextPageToken Stores Next Page Token: Token used to retrieve the next page of store results.") - cmd.Flags().StringVar(&p_pageTokenVar, "page-token", "eyJyZHMiOiJQQ18zMjQ1NDc2NDAwODMzNTUxOTQ4fFBST0RfUENfMzI0NTQ3NjQwMDgzMzU1MTk0OCIsInByb2R1Y3RpZCI6IjEyNTE4MTc2MDIxNjEyNzgxNzUyIiwiY2F0YWxvZ2lkIjoiMTY5MTQ4Nzc2MjUyODA5Nzc4NjUiLCJoZWFkbGluZU9mZmVyRG9jaWQiOiIxNzc2Njg4MTE3MjA4NzEzODU1NSIsImltYWdlRG9jaWQiOiIzNTQ4NDgyNzk5NTQyMzA0NzkxIiwiZ3BjaWQiOiIzMjQ1NDc2NDAwODMzNTUxOTQ4IiwibWlkIjoiNTc2NDYyNjEyMjgwMTMwNDgxIiwicSI6ImNvZmZlZSIsImhsIjoiZW4iLCJnbCI6InVzIiwiY29va2llcyI6Il9fU2VjdXJlLVNUUlA9QUVFUDdnTDhveTExMkFEcGdEZkdDVmtjdXVRMHNmal8ySlhHaktsbHVQVjhxTHBLVTg3UlN6RmJKd0FvYkNjWjVQUU8tYmJZdGRGd1JDYnBHWmFmVzdnc0ZaYjlQM3VPaF9kSTsgQUVDPUFhSm1hNXVoaGE4ZTdjUnF6cThoZG1Na3ExSmk2MGE4MU1kRkQ1Z2M0Szd4WjZaRnQ0S05RYVJLVkpJOyBOSUQ9NTMxPWcySHJDN296elVZUnVraDhFT1NzakN3QWw0cEFWN25mYkNvcVlnWEVmdVNEUWxWLW80WVZZamxvOTh3cW5taHoxWWQ4NF9jUkFhWlZBV1A4dTVkUzNOVHhKVG9ZcjlNbkI1S3h0R0NESWR4azAya2tGajhGbkdfalAzNGQwM0haR1RjNkV4SWpldlBGREQ5X2xCM1VpNmRabmhoLVlveXN6SUxLVTkwT1MxekZBdHJnNFU1NUE4YWVlVFdlQW5ieEgzSGUxTHRSSFY0UVc4Y2d3Vzc0dW45bTZpdThaaldDZVp0QUhoS0ZsbDdycTJGbG1ybDRRdTV6UGxzIiwieHNyZiI6IkFLUE9yMVM2YmtDejdIcEM0WVo0U2VmNzY4RWE0YnhLbGc6MTc3OTI2ODI0NjMxNCIsIm9hcHZmYyI6IkVvd0RDc3dDUVUxdU15MTVWR1JQTjNrNWJEWndTa1JQT0RWemVpMXJaSFF6YUU1SlVteGlSRE00Wm1WRWVVTXRjakZHYVcxM1lpMW9TRVU1T0ZJeU5UbGhTRXBvTlZKNVdrUTBjMHBKWHkxM1ZEVXhOVlowV25OdFMydFlYMUYzTlZKUmQycFNkREJtYlhWV01IcEdWSG95YVVsWWMzcGpWWGhDU0hJd2ExQmZPRW80YmpWdmNsVmFVR056UWsxMVNEUllkSGc1ZWxKSU9WbzBTMnhSZVhKTlRqZG9UMFIzUmpkT00wSjNWMUYwTmpsUFQxVkplRUZZVERKeFh6ZzBNVU4zTUZseGFqWmhkakp2VEZKSWQzbGZUVUU0WjBoUWRHMHpUMVZvU0cxRVJFbDZTMmhYTFRoa1JsRnRha1ZhVmt0d1pXZE1hMUpYT1ZrdExYbDZjMHhIZFhCSlR6VXhXa1JZTWxoU2VFaE5SRlphYVZOVE9YWklSMUpxU25WSVVsOU9RV1JOU1dSNVZYYzRiMHc1YVVkVFNsUjZSVGgwTjFaNVdHVlJiR1Y1VUZaTFpETjJhR3h2Y0djdGNUSkRhbGNTRjJ4WWIwNWhkbGd4VFUxVGVuRjBjMUJ3VFU5Mk5sRm5HaUpCU2t0TVJtMUtXV1pGU21GaGQzUktSakEwVEdOclYwTmlia281VkhwdWF6Rm4ifQ", "pageToken Page Token: Token for displaying more product info in the Google immersive pop-up, available in the Google Shopping API response as the `immersiveProductPageToken` property. (required)") + cmd.Flags().StringVar(&p_pageTokenVar, "page-token", "eyJyZHMiOiJQQ18zMjQ1NDc2NDAwODMzNTUxOTQ4fFBST0RfUENfMzI0NTQ3NjQwMDgzMzU1MTk0OCIsInByb2R1Y3RpZCI6IjE2NTYxODg2MzMwNjI5NzA1MjY5IiwiY2F0YWxvZ2lkIjoiMTA5MDU3MjEzODE1NDM1NDgwMCIsImhlYWRsaW5lT2ZmZXJEb2NpZCI6IjEwNTQwMDUxMzg0NjEzOTczOTg1IiwiaW1hZ2VEb2NpZCI6IjE3MjMwMzM3NDkwMTYzODIyNjMiLCJncGNpZCI6IjgyOTk1MTI3NTExOTg2NzE2MjIiLCJtaWQiOiI1NzY0NjI2MTIyODAxMzA0ODEiLCJxIjoiYnV5IGNvZmZlZSIsImhsIjoiZW4iLCJnbCI6InVzIiwiY29va2llcyI6Il9fU2VjdXJlLVNUUlA9QU5tWndhMHZsZUx5TFN3SDZKcmFHRU15RGxnbEhJN3NJelN2NFVJcXhZUDhFQk5kd1FXNTRoRHVsX3RZRl9hSFBsQjM3ajhNMWZRY1NwOVhTMy1icmVOdzIwa1RybjhnajhCaDsgQUVDPUFkSlZFYXR5TE1ZbHktUk5IRGxTVm04MGkySWRhWm4yeE5mWlVBX3JzV3pDX0xyTFFTeUwzTGJ3TkJnOyBOSUQ9NTMyPWtadG5CQnpoNE02cU5lTW9VM1Rjekd1d0VKdmtkcjBZMzFFbmNPTlZUT084TmlVX0oyUTVucmR3Q0dWUU5pWVlvWUROSEdWTE9BdUd0SWI2ZjEwSDk3OHM3bk9hajFFTVN1ellIaDVTMzdDTkJDZkdwLWlmcThVenV4aHR3TTR0YmNidXdnbVBNUHJHeXBlMS1aQmZtTEVCOXpTam9aMFpGOUZHQ3ZQdkc3aGdXZzRCcndvb1RYclhnTHdhc3BtYXpUVi1YYUg1bzJjV2lUNTUwc0dHNG5pRVpYLUI1aFZsbllYQ1QxZU91LXU0Tjk4MXQtUnYzYi1RZS1nTGV2NmV4ZGNFdlE7IERWPU02U2J0ZDljdGtvc1VKSEhKMHhOMXZfa3lxX0M5Tm42MHAxSjhPd3dCd1FBQUFBIiwieHNyZiI6IkFGNXRTTzRGb3VnZDItOVJPN09YU29oMzlvWnhLUzZGNVE6MTc4MzY4OTMxMzM5MiIsIm9hcHZmYyI6IkVvc0RDc3dDUVVwcFZEUjBTMGMwTmxObk16TktTRmxmYW05SlpUbFNNM1ZaVTFJeWJ6ZENlRGgwWm5kRVNGWTFja2hzZFVZNVMzWnVOMVUxYkVSSU1YTlVSMUpyV1VwWFpVWlNUVVY0Y2s5ak1EaElYMWd3UVRaR1RVbzJTVmxpZVdGdU5IRklVV1o0WTJ4d1RVUm1hRFZPT1dSbGFXOVZaVFpNT1ZaT1VXZHJNMlJTTlZNMlQzWlhiSEI1UW01aU5DMHlUR0psYnpWTVJEVkhSazVoYlZkZlVFUmxlbkIwTlc1U2FtRjJOVUprVWkxTloxcFJhbHBsY21kc1VXbDNXVWcxY1dKeFdtTjZWR0ZEVDB0a2RISldTekYwYzB0MVlqaHBiR1o2TFc1cFZsODNjV296VTI5RVgydDVkSE13WlVNNVJVaGhhRTU0WHpKT2ExY3plR3BXY1VGMlJXVjBhVmN5T1ZkNk9WaEVialV5VldVNGNtdHlPVUV4Ym1ZdFNYRjRkM1J3VUMxdFNYUjZORUk0Y3pCV1REUlhkbTVHUldodE1ETnVaaTFNTFZSUlRuUm9PVmRDWDNoaVoyNXVkVWtTRmxsUVFsRmhjV1ZrVFZCWGRIRjBjMUEwV1U5elRWRWFJa0ZFYzNJNVpsRjZSMVpNTkZKR2IwRmhZbmhQWmpSRFRqbHBNRTVCWjAxcFowRSIsInZlcnNpb24iOjJ9", "pageToken Page Token: Token for displaying more product info in the Google immersive pop-up, available in the Google Shopping API response as the `immersiveProductPageToken` property. (required)") _ = cmd.MarkFlagRequired("page-token") return cmd diff --git a/cmd/gen_google_maps_reviews.go b/cmd/gen_google_maps_reviews.go index f666592..6faa371 100644 --- a/cmd/gen_google_maps_reviews.go +++ b/cmd/gen_google_maps_reviews.go @@ -33,7 +33,7 @@ func newGoogleMapsReviewsCmd() *cobra.Command { Args: cobra.NoArgs, PreRunE: func(c *cobra.Command, _ []string) error { if c.Flags().Changed("sort-by") { - if err := validateEnumString("sort-by", p_sortByVar, []string{"qualityScore", "newestFirst", "ratingHigh", "ratingLow"}); err != nil { + if err := validateEnumString("sort-by", p_sortByVar, []string{"mostRelevant", "newestFirst", "ratingHigh", "ratingLow"}); err != nil { return err } } @@ -75,9 +75,9 @@ func newGoogleMapsReviewsCmd() *cobra.Command { cmd.Flags().StringVar(&p_hlVar, "hl", "", "hl Language: The two-letter language code for the language you want to use for the search.") cmd.Flags().StringVar(&p_nextPageTokenVar, "next-page-token", "", "nextPageToken Next Page Token: Defines the next page token. It is used for retrieving the next page results.") cmd.Flags().StringVar(&p_placeIdVar, "place-id", "", "placeId Place ID: Unique reference to a place on a Google Map. Either dataId or placeId should be set.") - cmd.Flags().StringVar(&p_sortByVar, "sort-by", "", "sortBy Sort By: Parameter used for sorting and refining results. [allowed: qualityScore|newestFirst|ratingHigh|ratingLow]") + cmd.Flags().StringVar(&p_sortByVar, "sort-by", "", "sortBy Sort By: Parameter used for sorting and refining results. [allowed: mostRelevant|newestFirst|ratingHigh|ratingLow]") _ = cmd.RegisterFlagCompletionFunc("sort-by", func(*cobra.Command, []string, string) ([]string, cobra.ShellCompDirective) { - return []string{"qualityScore", "newestFirst", "ratingHigh", "ratingLow"}, cobra.ShellCompDirectiveNoFileComp + return []string{"mostRelevant", "newestFirst", "ratingHigh", "ratingLow"}, cobra.ShellCompDirectiveNoFileComp }) cmd.Flags().StringVar(&p_topicIdVar, "topic-id", "", "topicId Topic ID: Defines the ID of the topic you want to use for filtering reviews.") diff --git a/cmd/gen_instagram_posts.go b/cmd/gen_instagram_posts.go new file mode 100644 index 0000000..1dfe59d --- /dev/null +++ b/cmd/gen_instagram_posts.go @@ -0,0 +1,65 @@ +// Code generated by internal/gen. DO NOT EDIT. + +package cmd + +import ( + "encoding/json" + "fmt" + "net/url" + "strconv" + + "github.com/spf13/cobra" +) + +var ( + _ = json.Marshal + _ = fmt.Sprintf + _ = url.Values{} + _ = strconv.Itoa +) + +func newInstagramPostsCmd() *cobra.Command { + var p_handleVar string + var p_limitVar int + var p_nextPageTokenVar string + + cmd := &cobra.Command{ + Use: "instagram-posts", + Short: "Instagram Posts Scraper API (5 credits/call)", + Long: "The Instagram Posts Scraper API lets you retrieve the latest posts of a public Instagram account using its handle. It returns posts with captions, hashtags, mentions, likes, comments, and plays counts, image and video URLs, and timestamps, with token-based pagination for retrieving older posts.\n\nEndpoint: GET https://api.hasdata.com/scrape/instagram/posts\nCost: 5 credits per call.", + Args: cobra.NoArgs, + PreRunE: func(c *cobra.Command, _ []string) error { + return nil + }, + RunE: func(c *cobra.Command, _ []string) error { + ctx := c.Context() + cli, err := Client() + if err != nil { + return err + } + params := url.Values{} + params.Set("handle", p_handleVar) + if c.Flags().Changed("limit") { + params.Set("limit", strconv.Itoa(p_limitVar)) + } + if c.Flags().Changed("next-page-token") { + params.Set("nextPageToken", p_nextPageTokenVar) + } + resp, err := cli.Do(ctx, "GET", "https://api.hasdata.com/scrape/instagram/posts", params, nil) + if err != nil { + return err + } + return WriteResponse(c, resp) + }, + } + cmd.Flags().StringVar(&p_handleVar, "handle", "hasdatadotcom", "handle Instagram Handle: The Instagram username of the account whose posts you want to scrape, without the `@` symbol. (required)") + _ = cmd.MarkFlagRequired("handle") + cmd.Flags().IntVar(&p_limitVar, "limit", 12, "limit Results Limit: The maximum number of posts to retrieve per request. Defaults to 12.") + cmd.Flags().StringVar(&p_nextPageTokenVar, "next-page-token", "", "nextPageToken Next Page Token: Defines the next page token. It is used for retrieving the next page results. Use the `nextPageToken` value returned by the previous response.") + + return cmd +} + +func init() { + RegisterAPICommand("social", "Social", newInstagramPostsCmd()) +} diff --git a/cmd/gen_instagram_profile.go b/cmd/gen_instagram_profile.go index 7303fd0..d3a9567 100644 --- a/cmd/gen_instagram_profile.go +++ b/cmd/gen_instagram_profile.go @@ -51,5 +51,5 @@ func newInstagramProfileCmd() *cobra.Command { } func init() { - RegisterAPICommand("instagram", "Instagram", newInstagramProfileCmd()) + RegisterAPICommand("social", "Social", newInstagramProfileCmd()) } diff --git a/cmd/gen_redfin_listing.go b/cmd/gen_redfin_listing.go index 547e16f..1556c1a 100644 --- a/cmd/gen_redfin_listing.go +++ b/cmd/gen_redfin_listing.go @@ -497,7 +497,7 @@ func newRedfinListingCmd() *cobra.Command { _ = cmd.RegisterFlagCompletionFunc("home-types", func(*cobra.Command, []string, string) ([]string, cobra.ShellCompDirective) { return []string{"house", "townhouse", "townhome", "condo", "land", "multiFamily", "mobile", "coOp", "other", "apartment"}, cobra.ShellCompDirectiveNoFileComp }) - cmd.Flags().StringVar(&p_keywordVar, "keyword", "33321", "keyword Location: The zipcode used to search for listings. (required)") + cmd.Flags().StringVar(&p_keywordVar, "keyword", "33321", "keyword Location: The location to search for listings. Accepts a zipcode (`33321`), a city (`Austin` or `Austin, TX`), a neighborhood (`East Austin`), a school (`BASIS Austin`), a school district (`Austin Independent School District`), an apartment building by its name (`Maizon Brickell`), or a full street address (`5805 Woodview Ave, Austin, TX 78756`), including a single unit (`221 SW 12th St Unit 1716, Miami, FL`). An address or a building returns a single property card instead of a list of listings, and the `type` parameter does not apply to it. (required)") _ = cmd.MarkFlagRequired("keyword") cmd.Flags().StringSliceVar(&p_listingType_categoryVar, "listing-type-category", nil, "listingType[category][] Listing Category: An array of listing categories.") _ = cmd.RegisterFlagCompletionFunc("listing-type-category", func(*cobra.Command, []string, string) ([]string, cobra.ShellCompDirective) { diff --git a/cmd/gen_tiktok_comments.go b/cmd/gen_tiktok_comments.go new file mode 100644 index 0000000..2f6e0a2 --- /dev/null +++ b/cmd/gen_tiktok_comments.go @@ -0,0 +1,65 @@ +// Code generated by internal/gen. DO NOT EDIT. + +package cmd + +import ( + "encoding/json" + "fmt" + "net/url" + "strconv" + + "github.com/spf13/cobra" +) + +var ( + _ = json.Marshal + _ = fmt.Sprintf + _ = url.Values{} + _ = strconv.Itoa +) + +func newTiktokCommentsCmd() *cobra.Command { + var p_commentIdVar string + var p_nextPageTokenVar string + var p_videoIdVar string + + cmd := &cobra.Command{ + Use: "tiktok-comments", + Short: "TikTok Comments Scraper API (10 credits/call)", + Long: "The TikTok Comments Scraper API returns the comments on a public TikTok video, or the replies to a specific comment. Each comment includes its text, like count, timestamp, reply count, and author (with links to the author's profile and posts). Results are paginated with a token.\n\nEndpoint: GET https://api.hasdata.com/scrape/tiktok/comments\nCost: 10 credits per call.", + Args: cobra.NoArgs, + PreRunE: func(c *cobra.Command, _ []string) error { + return nil + }, + RunE: func(c *cobra.Command, _ []string) error { + ctx := c.Context() + cli, err := Client() + if err != nil { + return err + } + params := url.Values{} + if c.Flags().Changed("comment-id") { + params.Set("commentId", p_commentIdVar) + } + if c.Flags().Changed("next-page-token") { + params.Set("nextPageToken", p_nextPageTokenVar) + } + params.Set("videoId", p_videoIdVar) + resp, err := cli.Do(ctx, "GET", "https://api.hasdata.com/scrape/tiktok/comments", params, nil) + if err != nil { + return err + } + return WriteResponse(c, resp) + }, + } + cmd.Flags().StringVar(&p_commentIdVar, "comment-id", "", "commentId Comment ID: When provided, returns the replies to this comment instead of the video's top-level comments.") + cmd.Flags().StringVar(&p_nextPageTokenVar, "next-page-token", "", "nextPageToken Next Page Token: Defines the next page token. Use the `nextPageToken` value returned by the previous response. Omit it to fetch the first page.") + cmd.Flags().StringVar(&p_videoIdVar, "video-id", "7667749432279977230", "videoId Video ID: The numeric id of the video (the number after `/video/` in a TikTok URL). (required)") + _ = cmd.MarkFlagRequired("video-id") + + return cmd +} + +func init() { + RegisterAPICommand("social", "Social", newTiktokCommentsCmd()) +} diff --git a/cmd/gen_tiktok_posts.go b/cmd/gen_tiktok_posts.go new file mode 100644 index 0000000..8453b3a --- /dev/null +++ b/cmd/gen_tiktok_posts.go @@ -0,0 +1,60 @@ +// Code generated by internal/gen. DO NOT EDIT. + +package cmd + +import ( + "encoding/json" + "fmt" + "net/url" + "strconv" + + "github.com/spf13/cobra" +) + +var ( + _ = json.Marshal + _ = fmt.Sprintf + _ = url.Values{} + _ = strconv.Itoa +) + +func newTiktokPostsCmd() *cobra.Command { + var p_handleVar string + var p_nextPageTokenVar string + + cmd := &cobra.Command{ + Use: "tiktok-posts", + Short: "TikTok Posts Scraper API (10 credits/call)", + Long: "The TikTok Posts Scraper API lets you retrieve the videos of a public TikTok account using its handle. It returns each video with description, hashtags, mentions, like/comment/share/play counts, cover and playable video URLs, music, and timestamp. Results are paginated with a token — pass the `nextPageToken` from a response to fetch the next page.\n\nEndpoint: GET https://api.hasdata.com/scrape/tiktok/posts\nCost: 10 credits per call.", + Args: cobra.NoArgs, + PreRunE: func(c *cobra.Command, _ []string) error { + return nil + }, + RunE: func(c *cobra.Command, _ []string) error { + ctx := c.Context() + cli, err := Client() + if err != nil { + return err + } + params := url.Values{} + params.Set("handle", p_handleVar) + if c.Flags().Changed("next-page-token") { + params.Set("nextPageToken", p_nextPageTokenVar) + } + resp, err := cli.Do(ctx, "GET", "https://api.hasdata.com/scrape/tiktok/posts", params, nil) + if err != nil { + return err + } + return WriteResponse(c, resp) + }, + } + cmd.Flags().StringVar(&p_handleVar, "handle", "tiktok", "handle TikTok Handle: The TikTok username of the account whose videos you want to scrape, with or without the `@` symbol. (required)") + _ = cmd.MarkFlagRequired("handle") + cmd.Flags().StringVar(&p_nextPageTokenVar, "next-page-token", "", "nextPageToken Next Page Token: Defines the next page token. It is used for retrieving the next page of results. Use the `nextPageToken` value returned by the previous response. Omit it to fetch the first page.") + + return cmd +} + +func init() { + RegisterAPICommand("social", "Social", newTiktokPostsCmd()) +} diff --git a/cmd/gen_tiktok_profile.go b/cmd/gen_tiktok_profile.go new file mode 100644 index 0000000..e268441 --- /dev/null +++ b/cmd/gen_tiktok_profile.go @@ -0,0 +1,55 @@ +// Code generated by internal/gen. DO NOT EDIT. + +package cmd + +import ( + "encoding/json" + "fmt" + "net/url" + "strconv" + + "github.com/spf13/cobra" +) + +var ( + _ = json.Marshal + _ = fmt.Sprintf + _ = url.Values{} + _ = strconv.Itoa +) + +func newTiktokProfileCmd() *cobra.Command { + var p_handleVar string + + cmd := &cobra.Command{ + Use: "tiktok-profile", + Short: "TikTok Profile Scraper API (10 credits/call)", + Long: "The TikTok Profile Scraper API lets you retrieve public profile information for a specific TikTok account using its handle. It returns data such as nickname, bio, followers, likes, videos count, and other visible profile details.\n\nEndpoint: GET https://api.hasdata.com/scrape/tiktok/profile\nCost: 10 credits per call.", + Args: cobra.NoArgs, + PreRunE: func(c *cobra.Command, _ []string) error { + return nil + }, + RunE: func(c *cobra.Command, _ []string) error { + ctx := c.Context() + cli, err := Client() + if err != nil { + return err + } + params := url.Values{} + params.Set("handle", p_handleVar) + resp, err := cli.Do(ctx, "GET", "https://api.hasdata.com/scrape/tiktok/profile", params, nil) + if err != nil { + return err + } + return WriteResponse(c, resp) + }, + } + cmd.Flags().StringVar(&p_handleVar, "handle", "nasa", "handle TikTok Handle: The TikTok username of the profile you want to scrape, with or without the `@` symbol. (required)") + _ = cmd.MarkFlagRequired("handle") + + return cmd +} + +func init() { + RegisterAPICommand("social", "Social", newTiktokProfileCmd()) +} diff --git a/cmd/gen_tiktok_search.go b/cmd/gen_tiktok_search.go new file mode 100644 index 0000000..be86812 --- /dev/null +++ b/cmd/gen_tiktok_search.go @@ -0,0 +1,73 @@ +// Code generated by internal/gen. DO NOT EDIT. + +package cmd + +import ( + "encoding/json" + "fmt" + "net/url" + "strconv" + + "github.com/spf13/cobra" +) + +var ( + _ = json.Marshal + _ = fmt.Sprintf + _ = url.Values{} + _ = strconv.Itoa +) + +func newTiktokSearchCmd() *cobra.Command { + var p_keywordVar string + var p_nextPageTokenVar string + var p_typeVar string + + cmd := &cobra.Command{ + Use: "tiktok-search", + Short: "TikTok Search Scraper API (10 credits/call)", + Long: "The TikTok Search Scraper API lets you search TikTok by keyword for videos or users. Video results include description, hashtags, stats, cover and playable URLs, and author info; user results include nickname, bio, avatar, verified flag, and follower count. Results are paginated with a token.\n\nEndpoint: GET https://api.hasdata.com/scrape/tiktok/search\nCost: 10 credits per call.", + Args: cobra.NoArgs, + PreRunE: func(c *cobra.Command, _ []string) error { + if c.Flags().Changed("type") { + if err := validateEnumString("type", p_typeVar, []string{"video", "user"}); err != nil { + return err + } + } + return nil + }, + RunE: func(c *cobra.Command, _ []string) error { + ctx := c.Context() + cli, err := Client() + if err != nil { + return err + } + params := url.Values{} + params.Set("keyword", p_keywordVar) + if c.Flags().Changed("next-page-token") { + params.Set("nextPageToken", p_nextPageTokenVar) + } + if c.Flags().Changed("type") { + params.Set("type", p_typeVar) + } + resp, err := cli.Do(ctx, "GET", "https://api.hasdata.com/scrape/tiktok/search", params, nil) + if err != nil { + return err + } + return WriteResponse(c, resp) + }, + } + cmd.Flags().StringVar(&p_keywordVar, "keyword", "dance", "keyword Keyword: The phrase to search for on TikTok. (required)") + _ = cmd.MarkFlagRequired("keyword") + cmd.Flags().StringVar(&p_nextPageTokenVar, "next-page-token", "", "nextPageToken Next Page Token: Defines the next page token. Use the `nextPageToken` value returned by the previous response. Omit it to fetch the first page.") + cmd.Flags().StringVar(&p_typeVar, "type", "", "type Result Type: What to search for — videos or users. Defaults to video. [allowed: video|user]") + _ = cmd.RegisterFlagCompletionFunc("type", func(*cobra.Command, []string, string) ([]string, cobra.ShellCompDirective) { + return []string{"video", "user"}, cobra.ShellCompDirectiveNoFileComp + }) + + return cmd +} + +func init() { + RegisterAPICommand("social", "Social", newTiktokSearchCmd()) +} diff --git a/cmd/gen_yelp_reviews.go b/cmd/gen_yelp_reviews.go new file mode 100644 index 0000000..e416283 --- /dev/null +++ b/cmd/gen_yelp_reviews.go @@ -0,0 +1,111 @@ +// Code generated by internal/gen. DO NOT EDIT. + +package cmd + +import ( + "encoding/json" + "fmt" + "net/url" + "strconv" + + "github.com/spf13/cobra" +) + +var ( + _ = json.Marshal + _ = fmt.Sprintf + _ = url.Values{} + _ = strconv.Itoa +) + +func newYelpReviewsCmd() *cobra.Command { + var p_domainVar string + var p_languageCodeVar string + var p_notRecommendedVar bool + var p_numVar int + var p_placeIdVar string + var p_queryVar string + var p_ratingVar string + var p_sortByVar string + var p_startVar int + + cmd := &cobra.Command{ + Use: "yelp-reviews", + Short: "Yelp Reviews Scraper API (10 credits/call)", + Long: "The Yelp Reviews Scraper API allows users to retrieve the review feed of a specific place on Yelp, with filtering by rating, language and keyword.\n\nEndpoint: GET https://api.hasdata.com/scrape/yelp/reviews\nCost: 10 credits per call.", + Args: cobra.NoArgs, + PreRunE: func(c *cobra.Command, _ []string) error { + if c.Flags().Changed("domain") { + if err := validateEnumString("domain", p_domainVar, []string{"www.yelp.com", "www.yelp.co.uk", "www.yelp.ca", "www.yelp.com.au", "ms.yelp.my", "www.yelp.cz", "www.yelp.dk", "www.yelp.de", "www.yelp.at", "de.yelp.ch", "en.yelp.be", "en.yelp.com.hk", "en.yelp.my", "www.yelp.co.nz", "en.yelp.com.ph", "www.yelp.ie", "www.yelp.com.sg", "en.yelp.ch", "www.yelp.com.ar", "www.yelp.cl", "www.yelp.es", "www.yelp.com.mx", "fil.yelp.com.ph", "fr.yelp.be", "fr.yelp.ca", "www.yelp.fr", "fr.yelp.ch", "www.yelp.it", "it.yelp.ch", "nl.yelp.be", "www.yelp.nl", "www.yelp.no", "www.yelp.pl", "www.yelp.com.br", "www.yelp.pt", "fi.yelp.fi", "sv.yelp.fi", "www.yelp.com.tr", "www.yelp.co.jp", "zh.yelp.com.hk", "www.yelp.com.tw"}); err != nil { + return err + } + } + if c.Flags().Changed("sort-by") { + if err := validateEnumString("sort-by", p_sortByVar, []string{"relevanceDesc", "dateDesc", "dateAsc", "ratingDesc", "ratingAsc", "elitesDesc"}); err != nil { + return err + } + } + return nil + }, + RunE: func(c *cobra.Command, _ []string) error { + ctx := c.Context() + cli, err := Client() + if err != nil { + return err + } + params := url.Values{} + if c.Flags().Changed("domain") { + params.Set("domain", p_domainVar) + } + if c.Flags().Changed("language-code") { + params.Set("languageCode", p_languageCodeVar) + } + if c.Flags().Changed("not-recommended") { + params.Set("notRecommended", strconv.FormatBool(p_notRecommendedVar)) + } + if c.Flags().Changed("num") { + params.Set("num", strconv.Itoa(p_numVar)) + } + params.Set("placeId", p_placeIdVar) + if c.Flags().Changed("query") { + params.Set("query", p_queryVar) + } + if c.Flags().Changed("rating") { + params.Set("rating", p_ratingVar) + } + if c.Flags().Changed("sort-by") { + params.Set("sortBy", p_sortByVar) + } + if c.Flags().Changed("start") { + params.Set("start", strconv.Itoa(p_startVar)) + } + resp, err := cli.Do(ctx, "GET", "https://api.hasdata.com/scrape/yelp/reviews", params, nil) + if err != nil { + return err + } + return WriteResponse(c, resp) + }, + } + cmd.Flags().StringVar(&p_domainVar, "domain", "", "domain Domain: Yelp domain to use. Default is `www.yelp.com`. [allowed: www.yelp.com|www.yelp.co.uk|www.yelp.ca|www.yelp.com.au|ms.yelp.my|www.yelp.cz|www.yelp.dk|www.yelp.de|www.yelp.at|de.yelp.ch|en.yelp.be|en.yelp.com.hk|en.yelp.my|www.yelp.co.nz|en.yelp.com.ph|www.yelp.ie|www.yelp.com.sg|en.yelp.ch|www.yelp.com.ar|www.yelp.cl|www.yelp.es|www.yelp.com.mx|fil.yelp.com.ph|fr.yelp.be|fr.yelp.ca|www.yelp.fr|fr.yelp.ch|www.yelp.it|it.yelp.ch|nl.yelp.be|www.yelp.nl|www.yelp.no|www.yelp.pl|www.yelp.com.br|www.yelp.pt|fi.yelp.fi|sv.yelp.fi|www.yelp.com.tr|www.yelp.co.jp|zh.yelp.com.hk|www.yelp.com.tw]") + _ = cmd.RegisterFlagCompletionFunc("domain", func(*cobra.Command, []string, string) ([]string, cobra.ShellCompDirective) { + return []string{"www.yelp.com", "www.yelp.co.uk", "www.yelp.ca", "www.yelp.com.au", "ms.yelp.my", "www.yelp.cz", "www.yelp.dk", "www.yelp.de", "www.yelp.at", "de.yelp.ch", "en.yelp.be", "en.yelp.com.hk", "en.yelp.my", "www.yelp.co.nz", "en.yelp.com.ph", "www.yelp.ie", "www.yelp.com.sg", "en.yelp.ch", "www.yelp.com.ar", "www.yelp.cl", "www.yelp.es", "www.yelp.com.mx", "fil.yelp.com.ph", "fr.yelp.be", "fr.yelp.ca", "www.yelp.fr", "fr.yelp.ch", "www.yelp.it", "it.yelp.ch", "nl.yelp.be", "www.yelp.nl", "www.yelp.no", "www.yelp.pl", "www.yelp.com.br", "www.yelp.pt", "fi.yelp.fi", "sv.yelp.fi", "www.yelp.com.tr", "www.yelp.co.jp", "zh.yelp.com.hk", "www.yelp.com.tw"}, cobra.ShellCompDirectiveNoFileComp + }) + cmd.Flags().StringVar(&p_languageCodeVar, "language-code", "en", "languageCode Language: Language of the reviews to return, as a two-letter code (e.g., 'en', 'es', 'fr'). Defaults to en.") + cmd.Flags().BoolVar(&p_notRecommendedVar, "not-recommended", false, "notRecommended Not Recommended: Returns the reviews Yelp does not currently recommend (filtered out of the main feed by its recommendation software) instead of the recommended ones. These reviews carry no photos, videos or reactions, and are paginated ten at a time. Defaults to false.\n") + cmd.Flags().IntVar(&p_numVar, "num", 0, "num Number of Results: Number of reviews to return per page. The maximum is 49. Defaults to 49 for the recommended feed and to 10 when `notRecommended` is set.\n") + cmd.Flags().StringVar(&p_placeIdVar, "place-id", "-4ofMtrD7pSpZIX5pnDkig", "placeId Place ID: The Yelp ID of the place. For example, '-4ofMtrD7pSpZIX5pnDkig'. Yelp IDs can be obtained from the Yelp Search Scraper API. (required)") + _ = cmd.MarkFlagRequired("place-id") + cmd.Flags().StringVar(&p_queryVar, "query", "", "query Search Query: Note: Yelp ignores the `rating` filter while searching, so a query returns matching reviews of every star rating. Free-text query to search within the reviews of the place.\n") + cmd.Flags().StringVar(&p_ratingVar, "rating", "5,4", "rating Rating: Note: Yelp ignores this filter when `query` is set, so a search returns matching reviews of every star rating. Filters the reviews by star rating. Possible values are 5, 4, 3, 2 and 1. To return only five-star reviews, set it to `5`. To include several ratings, pass them comma-separated, for example `5,4,3`. When omitted, reviews with any rating are returned.\n") + cmd.Flags().StringVar(&p_sortByVar, "sort-by", "", "sortBy Sort By: The order in which the reviews are returned. Defaults to relevanceDesc. [allowed: relevanceDesc|dateDesc|dateAsc|ratingDesc|ratingAsc|elitesDesc]") + _ = cmd.RegisterFlagCompletionFunc("sort-by", func(*cobra.Command, []string, string) ([]string, cobra.ShellCompDirective) { + return []string{"relevanceDesc", "dateDesc", "dateAsc", "ratingDesc", "ratingAsc", "elitesDesc"}, cobra.ShellCompDirectiveNoFileComp + }) + cmd.Flags().IntVar(&p_startVar, "start", 0, "start Result Offset: Result offset for pagination. It skips the given number of reviews, so the step matches `num` (e.g., 0, 49, 98 for the recommended feed, or 0, 10, 20 when `notRecommended` is set).\n") + + return cmd +} + +func init() { + RegisterAPICommand("business", "Business", newYelpReviewsCmd()) +} diff --git a/internal/gen/spec-hash.txt b/internal/gen/spec-hash.txt index 1c478f1..1d694f6 100644 --- a/internal/gen/spec-hash.txt +++ b/internal/gen/spec-hash.txt @@ -1 +1 @@ -f7e64a0a67b5fb781a2a160750b3fee18cd4361c9b3a5107c489d01a168df16f +f62469538a12a2a7ca2aeae36d9447fac7f1468aef04469d4266411d85a5c6bf diff --git a/pr-body.md b/pr-body.md index 41e4911..72c6220 100644 --- a/pr-body.md +++ b/pr-body.md @@ -1,44 +1,23 @@ ## Changes - GENERATION_REPORT.md | 2 +- - cmd/gen_airbnb_listing.go | 4 +-- - cmd/gen_airbnb_property.go | 4 +-- - cmd/gen_amazon_product.go | 4 +-- - cmd/gen_amazon_reviews.go | 4 +-- - cmd/gen_amazon_search.go | 4 +-- - cmd/gen_amazon_seller.go | 4 +-- - cmd/gen_amazon_seller_products.go | 4 +-- - cmd/gen_booking_place.go | 4 +-- - cmd/gen_booking_search.go | 4 +-- - cmd/gen_glassdoor_job.go | 4 +-- - cmd/gen_glassdoor_listing.go | 4 +-- - cmd/gen_indeed_job.go | 4 +-- - cmd/gen_indeed_listing.go | 4 +-- - cmd/gen_instagram_profile.go | 4 +-- - cmd/gen_redfin_listing.go | 4 +-- - cmd/gen_redfin_property.go | 4 +-- - cmd/gen_shopify_collections.go | 4 +-- - cmd/gen_shopify_products.go | 4 +-- - cmd/gen_yellowpages_place.go | 4 +-- - cmd/gen_yellowpages_search.go | 4 +-- - cmd/gen_yelp_place.go | 4 +-- - cmd/gen_yelp_search.go | 4 +-- - cmd/gen_youtube_channel_api.go | 4 +-- - cmd/gen_youtube_search_api.go | 4 +-- - cmd/gen_youtube_transcript_api.go | 4 +-- - cmd/gen_youtube_video_api.go | 4 +-- - cmd/gen_zillow_listing.go | 4 +-- - cmd/gen_zillow_property.go | 4 +-- - internal/gen/spec-hash.txt | 2 +- - pr-body.md | 64 --------------------------------------- - 31 files changed, 58 insertions(+), 122 deletions(-) + GENERATION_REPORT.md | 13 ++++-- + cmd/gen_bing_serp.go | 26 +++++------ + cmd/gen_booking_place.go | 2 +- + cmd/gen_booking_search.go | 2 +- + cmd/gen_google_immersive_product.go | 2 +- + cmd/gen_google_maps_reviews.go | 6 +-- + cmd/gen_instagram_profile.go | 2 +- + cmd/gen_redfin_listing.go | 2 +- + internal/gen/spec-hash.txt | 2 +- + pr-body.md | 90 ------------------------------------- + 10 files changed, 32 insertions(+), 115 deletions(-) ## Generation Report # Generation Report -Generated at: 2026-06-24T08:08:48Z +Generated at: 2026-08-12T07:30:00Z -## APIs generated (48) +## APIs generated (55) - airbnb-listing - airbnb-property - amazon-product @@ -52,7 +31,9 @@ Generated at: 2026-06-24T08:08:48Z - yellowpages-place - yellowpages-search - yelp-place +- yelp-reviews - yelp-search +- duckduckgo - google-images - google-maps - google-maps-contributor-reviews @@ -71,7 +52,6 @@ Generated at: 2026-06-24T08:08:48Z - google-flights - google-hotels - google-trends -- instagram-profile - glassdoor-job - glassdoor-listing - indeed-job @@ -80,6 +60,12 @@ Generated at: 2026-06-24T08:08:48Z - redfin-property - shopify-collections - shopify-products +- instagram-posts +- instagram-profile +- tiktok-comments +- tiktok-posts +- tiktok-profile +- tiktok-search - web-scraping - youtube-channel-api - youtube-search-api