diff --git a/GENERATION_REPORT.md b/GENERATION_REPORT.md index 39ba047..bb50cf8 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-07-29T07:54:06Z -## APIs generated (48) +## APIs generated (50) - airbnb-listing - airbnb-property - amazon-product @@ -17,6 +17,7 @@ Generated at: 2026-06-24T08:08:48Z - yellowpages-search - yelp-place - yelp-search +- duckduckgo - google-images - google-maps - google-maps-contributor-reviews @@ -35,6 +36,7 @@ Generated at: 2026-06-24T08:08:48Z - google-flights - google-hotels - google-trends +- instagram-posts - instagram-profile - glassdoor-job - glassdoor-listing 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_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..2fae8b0 --- /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("instagram", "Instagram", newInstagramPostsCmd()) +} diff --git a/internal/gen/spec-hash.txt b/internal/gen/spec-hash.txt index 1c478f1..a8ff2a8 100644 --- a/internal/gen/spec-hash.txt +++ b/internal/gen/spec-hash.txt @@ -1 +1 @@ -f7e64a0a67b5fb781a2a160750b3fee18cd4361c9b3a5107c489d01a168df16f +9abf03555ad61f9625c28100161ecd6035c036f4194b4577033298b8b39a561a diff --git a/pr-body.md b/pr-body.md index 41e4911..8583e0e 100644 --- a/pr-body.md +++ b/pr-body.md @@ -1,44 +1,19 @@ ## 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 | 6 ++- + cmd/gen_bing_serp.go | 26 +++++------ + cmd/gen_google_immersive_product.go | 2 +- + cmd/gen_google_maps_reviews.go | 6 +-- + internal/gen/spec-hash.txt | 2 +- + pr-body.md | 90 ------------------------------------- + 6 files changed, 22 insertions(+), 110 deletions(-) ## Generation Report # Generation Report -Generated at: 2026-06-24T08:08:48Z +Generated at: 2026-07-29T07:54:06Z -## APIs generated (48) +## APIs generated (50) - airbnb-listing - airbnb-property - amazon-product @@ -53,6 +28,7 @@ Generated at: 2026-06-24T08:08:48Z - yellowpages-search - yelp-place - yelp-search +- duckduckgo - google-images - google-maps - google-maps-contributor-reviews @@ -71,6 +47,7 @@ Generated at: 2026-06-24T08:08:48Z - google-flights - google-hotels - google-trends +- instagram-posts - instagram-profile - glassdoor-job - glassdoor-listing