diff --git a/GENERATION_REPORT.md b/GENERATION_REPORT.md index 231c296..02dd26f 100644 --- a/GENERATION_REPORT.md +++ b/GENERATION_REPORT.md @@ -1,15 +1,10 @@ # Generation Report -Generated at: 2026-08-31T07:13:05Z +Generated at: 2026-09-06T07:05:57Z -## APIs generated (55) +## APIs generated (60) - airbnb-listing - airbnb-property -- amazon-product -- amazon-reviews -- amazon-search -- amazon-seller -- amazon-seller-products - bing-serp - booking-place - booking-search @@ -19,6 +14,16 @@ Generated at: 2026-08-31T07:13:05Z - yelp-reviews - yelp-search - duckduckgo +- amazon-product +- amazon-reviews +- amazon-search +- amazon-seller +- amazon-seller-products +- shopify-collections +- shopify-products +- walmart-product +- walmart-reviews +- walmart-search - google-images - google-maps - google-maps-contributor-reviews @@ -34,6 +39,8 @@ Generated at: 2026-08-31T07:13:05Z - google-serp-light - google-shopping - google-short-videos +- google-scholar +- google-scholar-cite - google-flights - google-hotels - google-trends @@ -43,8 +50,8 @@ Generated at: 2026-08-31T07:13:05Z - indeed-listing - redfin-listing - redfin-property -- shopify-collections -- shopify-products +- zillow-listing +- zillow-property - instagram-posts - instagram-profile - tiktok-comments @@ -56,8 +63,6 @@ Generated at: 2026-08-31T07:13:05Z - youtube-search-api - youtube-transcript-api - youtube-video-api -- zillow-listing -- zillow-property ## Deprecated APIs (hidden in help) - amazon-reviews diff --git a/cmd/gen_airbnb_listing.go b/cmd/gen_airbnb_listing.go index da4b0d0..8ce8078 100644 --- a/cmd/gen_airbnb_listing.go +++ b/cmd/gen_airbnb_listing.go @@ -89,9 +89,9 @@ func newAirbnbListingCmd() *cobra.Command { }, } cmd.Flags().IntVar(&p_adultsVar, "adults", 0, "adults Number of Adults: Number of adults.\n") - cmd.Flags().StringVar(&p_checkInVar, "check-in", "2026-01-01", "checkIn Check-in Date: The check-in date for the listings. (required)") + cmd.Flags().StringVar(&p_checkInVar, "check-in", "2026-09-20", "checkIn Check-in Date: The check-in date for the listings. (required)") _ = cmd.MarkFlagRequired("check-in") - cmd.Flags().StringVar(&p_checkOutVar, "check-out", "2026-01-05", "checkOut Check-out Date: The check-out date for the listings.") + cmd.Flags().StringVar(&p_checkOutVar, "check-out", "2026-09-24", "checkOut Check-out Date: The check-out date for the listings.") cmd.Flags().IntVar(&p_childrenVar, "children", 0, "children Number of Children: Number of children.\n") cmd.Flags().IntVar(&p_infantsVar, "infants", 0, "infants Number of Infants: Number of infants.\n") cmd.Flags().StringVar(&p_locationVar, "location", "", "location Location: The location to search for listings. Required unless a full map bounding box (neLat, neLng, swLat, swLng) is provided.") diff --git a/cmd/gen_amazon_product.go b/cmd/gen_amazon_product.go index 0d6ef85..e43ba91 100644 --- a/cmd/gen_amazon_product.go +++ b/cmd/gen_amazon_product.go @@ -97,5 +97,5 @@ func newAmazonProductCmd() *cobra.Command { } func init() { - RegisterAPICommand("amazon", "Amazon", newAmazonProductCmd()) + RegisterAPICommand("ecommerce", "E-commerce", newAmazonProductCmd()) } diff --git a/cmd/gen_amazon_reviews.go b/cmd/gen_amazon_reviews.go index b966e11..274d978 100644 --- a/cmd/gen_amazon_reviews.go +++ b/cmd/gen_amazon_reviews.go @@ -146,5 +146,5 @@ func newAmazonReviewsCmd() *cobra.Command { } func init() { - RegisterAPICommand("amazon", "Amazon", newAmazonReviewsCmd()) + RegisterAPICommand("ecommerce", "E-commerce", newAmazonReviewsCmd()) } diff --git a/cmd/gen_amazon_search.go b/cmd/gen_amazon_search.go index e447b95..77f934a 100644 --- a/cmd/gen_amazon_search.go +++ b/cmd/gen_amazon_search.go @@ -97,5 +97,5 @@ func newAmazonSearchCmd() *cobra.Command { } func init() { - RegisterAPICommand("amazon", "Amazon", newAmazonSearchCmd()) + RegisterAPICommand("ecommerce", "E-commerce", newAmazonSearchCmd()) } diff --git a/cmd/gen_amazon_seller.go b/cmd/gen_amazon_seller.go index 4404f14..943c004 100644 --- a/cmd/gen_amazon_seller.go +++ b/cmd/gen_amazon_seller.go @@ -69,5 +69,5 @@ func newAmazonSellerCmd() *cobra.Command { } func init() { - RegisterAPICommand("amazon", "Amazon", newAmazonSellerCmd()) + RegisterAPICommand("ecommerce", "E-commerce", newAmazonSellerCmd()) } diff --git a/cmd/gen_amazon_seller_products.go b/cmd/gen_amazon_seller_products.go index 77941a6..0352c6b 100644 --- a/cmd/gen_amazon_seller_products.go +++ b/cmd/gen_amazon_seller_products.go @@ -74,5 +74,5 @@ func newAmazonSellerProductsCmd() *cobra.Command { } func init() { - RegisterAPICommand("amazon", "Amazon", newAmazonSellerProductsCmd()) + RegisterAPICommand("ecommerce", "E-commerce", newAmazonSellerProductsCmd()) } diff --git a/cmd/gen_booking_place.go b/cmd/gen_booking_place.go index e2be790..2e5187c 100644 --- a/cmd/gen_booking_place.go +++ b/cmd/gen_booking_place.go @@ -68,9 +68,9 @@ func newBookingPlaceCmd() *cobra.Command { } cmd.Flags().IntVar(&p_adultsVar, "adults", 2, "adults Adults: Number of adult guests across all rooms. (required)") _ = cmd.MarkFlagRequired("adults") - cmd.Flags().StringVar(&p_checkInDateVar, "check-in-date", "2026-06-01", "checkInDate Check-in Date: Check-in date in `YYYY-MM-DD` format. Must be in the future and earlier than `checkOutDate`. (required)") + cmd.Flags().StringVar(&p_checkInDateVar, "check-in-date", "2026-09-20", "checkInDate Check-in Date: Check-in date in `YYYY-MM-DD` format. Must be in the future and earlier than `checkOutDate`. (required)") _ = cmd.MarkFlagRequired("check-in-date") - cmd.Flags().StringVar(&p_checkOutDateVar, "check-out-date", "2026-06-05", "checkOutDate Check-out Date: Check-out date in `YYYY-MM-DD` format. Must be later than `checkInDate`. (required)") + cmd.Flags().StringVar(&p_checkOutDateVar, "check-out-date", "2026-09-24", "checkOutDate Check-out Date: Check-out date in `YYYY-MM-DD` format. Must be later than `checkInDate`. (required)") _ = cmd.MarkFlagRequired("check-out-date") cmd.Flags().IntVar(&p_childrenVar, "children", 0, "children Children Count: Number of child guests across all rooms (0–10). Pass `0` if there are no children. (required)") _ = cmd.MarkFlagRequired("children") diff --git a/cmd/gen_booking_search.go b/cmd/gen_booking_search.go index 1945f62..fe83152 100644 --- a/cmd/gen_booking_search.go +++ b/cmd/gen_booking_search.go @@ -246,9 +246,9 @@ func newBookingSearchCmd() *cobra.Command { return []string{"twinBeds", "doubleBed"}, cobra.ShellCompDirectiveNoFileComp }) cmd.Flags().IntVar(&p_bedroomsVar, "bedrooms", 0, "bedrooms Bedrooms: Minimum number of bedrooms in the property.") - cmd.Flags().StringVar(&p_checkInDateVar, "check-in-date", "2026-06-01", "checkInDate Check-in Date: Check-in date in `YYYY-MM-DD` format. Must be in the future and earlier than `checkOutDate`. (required)") + cmd.Flags().StringVar(&p_checkInDateVar, "check-in-date", "2026-09-20", "checkInDate Check-in Date: Check-in date in `YYYY-MM-DD` format. Must be in the future and earlier than `checkOutDate`. (required)") _ = cmd.MarkFlagRequired("check-in-date") - cmd.Flags().StringVar(&p_checkOutDateVar, "check-out-date", "2026-06-05", "checkOutDate Check-out Date: Check-out date in `YYYY-MM-DD` format. Must be later than `checkInDate`. (required)") + cmd.Flags().StringVar(&p_checkOutDateVar, "check-out-date", "2026-09-24", "checkOutDate Check-out Date: Check-out date in `YYYY-MM-DD` format. Must be later than `checkInDate`. (required)") _ = cmd.MarkFlagRequired("check-out-date") cmd.Flags().IntVar(&p_childrenVar, "children", 0, "children Children Count: Number of child guests across all rooms (0–10). Pass `0` if there are no children. (required)") _ = cmd.MarkFlagRequired("children") diff --git a/cmd/gen_google_flights.go b/cmd/gen_google_flights.go index d10acb8..9df485a 100644 --- a/cmd/gen_google_flights.go +++ b/cmd/gen_google_flights.go @@ -204,10 +204,10 @@ func newGoogleFlightsCmd() *cobra.Command { cmd.Flags().IntVar(&p_maxDurationVar, "max-duration", 0, "maxDuration Maximum Flight Duration: The maximum total flight duration in minutes.\n") cmd.Flags().Float64Var(&p_maxPriceVar, "max-price", 0, "maxPrice Maximum Price: Maximum price limit for the flight search, in the selected currency.\n") cmd.Flags().StringVar(&p_multiCityJsonVar, "multi-city-json", "", "multiCityJson Multi-city JSON: This parameter specifies flight details for multi-city trips. It is a JSON string containing multiple flight objects. Each object must include the following fields:\n\n- **departureId** – The departure airport code or location KGMID. Uses the same format as the main `departureId` parameter.\n- **arrivalId** – The arrival airport code or location KGMID. Uses the same format as the main `arrivalId` parameter.\n- **date** – The flight date. Uses the same format as the `outboundDate` parameter.\n- **times** *(optional)* – The time range for the flight. Uses the same format as the `outboundTimes` parameter.\n") - cmd.Flags().StringVar(&p_outboundDateVar, "outbound-date", "2026-08-15", "outboundDate Outbound Date: The outbound travel date in 'yyyy-MM-dd' format.\n (required)") + cmd.Flags().StringVar(&p_outboundDateVar, "outbound-date", "2026-09-20", "outboundDate Outbound Date: The outbound travel date in 'yyyy-MM-dd' format.\n (required)") _ = cmd.MarkFlagRequired("outbound-date") cmd.Flags().StringVar(&p_outboundTimesVar, "outbound-times", "", "outboundTimes Outbound Times: Set up to 4 time boundaries (2 for departure, 2 for arrival) to filter flights. Each number represents the start of an hour.\n\nExamples:\n - `6,20` → 6:00 AM - 9:00 PM departure\n - `1,15` → 1:00 AM - 4:00 PM departure\n - `7,18,2,21` → 7:00 AM - 9:00 PM departure, 2:00 AM - 10:00 PM arrival\n") - cmd.Flags().StringVar(&p_returnDateVar, "return-date", "2026-08-20", "returnDate Return Date: The return travel date in 'yyyy-MM-dd' format. Required when **type** is `roundTrip`.\n") + cmd.Flags().StringVar(&p_returnDateVar, "return-date", "2026-09-27", "returnDate Return Date: The return travel date in 'yyyy-MM-dd' format. Required when **type** is `roundTrip`.\n") cmd.Flags().StringVar(&p_returnTimesVar, "return-times", "", "returnTimes Return Times: Set up to 4 time boundaries (2 for departure, 2 for arrival) to filter return flights. Each number represents the start of an hour.\n\nExamples:\n - `6,20` → 6:00 AM - 9:00 PM departure\n - `1,15` → 1:00 AM - 4:00 PM departure\n - `7,18,2,21` → 7:00 AM - 9:00 PM departure, 2:00 AM - 10:00 PM arrival\n") cmd.Flags().BoolVar(&p_showHiddenVar, "show-hidden", false, "showHidden Show Hidden Fares: Indicates whether to include hidden options in the results.\n") cmd.Flags().StringVar(&p_sortByVar, "sort-by", "", "sortBy Sort By: Sort the flight results based on price, departure time, arrival time, etc.\n [allowed: topFlights|price|departureTime|arrivalTime|duration|emissions]") diff --git a/cmd/gen_google_hotels.go b/cmd/gen_google_hotels.go index 1a4788a..7253302 100644 --- a/cmd/gen_google_hotels.go +++ b/cmd/gen_google_hotels.go @@ -168,9 +168,9 @@ func newGoogleHotelsCmd() *cobra.Command { cmd.Flags().IntVar(&p_bathroomsVar, "bathrooms", 0, "bathrooms Bathrooms: Minimum number of bathrooms (vacation rentals only).\n") cmd.Flags().IntVar(&p_bedroomsVar, "bedrooms", 0, "bedrooms Bedrooms: Minimum number of bedrooms (vacation rentals only).\n") cmd.Flags().StringVar(&p_brandsVar, "brands", "", "brands Brands: Comma-separated list of brand IDs to filter by. Brand IDs are returned in the response under `brands` for the same query.\n") - cmd.Flags().StringVar(&p_checkInDateVar, "check-in-date", "2026-08-15", "checkInDate Check-in Date: The check-in date in 'yyyy-MM-dd' format.\n (required)") + cmd.Flags().StringVar(&p_checkInDateVar, "check-in-date", "2026-09-20", "checkInDate Check-in Date: The check-in date in 'yyyy-MM-dd' format.\n (required)") _ = cmd.MarkFlagRequired("check-in-date") - cmd.Flags().StringVar(&p_checkOutDateVar, "check-out-date", "2026-08-20", "checkOutDate Check-out Date: The check-out date in 'yyyy-MM-dd' format.\n (required)") + cmd.Flags().StringVar(&p_checkOutDateVar, "check-out-date", "2026-09-24", "checkOutDate Check-out Date: The check-out date in 'yyyy-MM-dd' format.\n (required)") _ = cmd.MarkFlagRequired("check-out-date") cmd.Flags().IntVar(&p_childrenVar, "children", 0, "children Children: Number of child guests (1-5). Total guests (adults + children) cannot exceed 6.\n") cmd.Flags().StringVar(&p_childrenAgesVar, "children-ages", "", "childrenAges Children Ages: Comma-separated list of children ages (e.g., `5,8,12`). Must match the number of children.\n") diff --git a/cmd/gen_google_scholar.go b/cmd/gen_google_scholar.go new file mode 100644 index 0000000..c2f4d81 --- /dev/null +++ b/cmd/gen_google_scholar.go @@ -0,0 +1,143 @@ +// 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 newGoogleScholarCmd() *cobra.Command { + var p_asRrVar float64 + var p_asSdtVar string + var p_asVisVar float64 + var p_asYhiVar int + var p_asYloVar int + var p_citesVar string + var p_clusterVar string + var p_filterVar float64 + var p_hlVar string + var p_lrVar []string + var p_numVar int + var p_qVar string + var p_safeVar string + var p_scisbdVar int + var p_startVar int + + cmd := &cobra.Command{ + Use: "google-scholar", + Short: "Google Scholar API (5 credits/call)", + Long: "Provides real-time access to Google Scholar search results, including papers, citations, and related scholarly metadata.\n\nEndpoint: GET https://api.hasdata.com/scrape/google/scholar\nCost: 5 credits per call.", + Args: cobra.NoArgs, + PreRunE: func(c *cobra.Command, _ []string) error { + if c.Flags().Changed("lr") { + if err := validateEnumStringSlice("lr", p_lrVar, []string{"lang_ar", "lang_hy", "lang_bg", "lang_ca", "lang_cs", "lang_da", "lang_de", "lang_el", "lang_en", "lang_es", "lang_et", "lang_tl", "lang_fi", "lang_fr", "lang_hr", "lang_hi", "lang_hu", "lang_id", "lang_is", "lang_it", "lang_iw", "lang_he", "lang_ja", "lang_ko", "lang_lt", "lang_lv", "lang_nl", "lang_no", "lang_fa", "lang_pl", "lang_pt", "lang_ro", "lang_ru", "lang_sk", "lang_sl", "lang_sr", "lang_sv", "lang_th", "lang_tr", "lang_uk", "lang_vi", "lang_zh-CN", "lang_zh-TW"}); err != nil { + return err + } + } + if c.Flags().Changed("safe") { + if err := validateEnumString("safe", p_safeVar, []string{"active", "off"}); 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("as-rr") { + params.Set("asRr", strconv.FormatFloat(p_asRrVar, 'f', -1, 64)) + } + if c.Flags().Changed("as-sdt") { + params.Set("asSdt", p_asSdtVar) + } + if c.Flags().Changed("as-vis") { + params.Set("asVis", strconv.FormatFloat(p_asVisVar, 'f', -1, 64)) + } + if c.Flags().Changed("as-yhi") { + params.Set("asYhi", strconv.Itoa(p_asYhiVar)) + } + if c.Flags().Changed("as-ylo") { + params.Set("asYlo", strconv.Itoa(p_asYloVar)) + } + if c.Flags().Changed("cites") { + params.Set("cites", p_citesVar) + } + if c.Flags().Changed("cluster") { + params.Set("cluster", p_clusterVar) + } + if c.Flags().Changed("filter") { + params.Set("filter", strconv.FormatFloat(p_filterVar, 'f', -1, 64)) + } + if c.Flags().Changed("hl") { + params.Set("hl", p_hlVar) + } + if c.Flags().Changed("lr") { + for _, v := range p_lrVar { + params.Add("lr"+"[]", v) + } + } + if c.Flags().Changed("num") { + params.Set("num", strconv.Itoa(p_numVar)) + } + params.Set("q", p_qVar) + if c.Flags().Changed("safe") { + params.Set("safe", p_safeVar) + } + if c.Flags().Changed("scisbd") { + params.Set("scisbd", strconv.Itoa(p_scisbdVar)) + } + if c.Flags().Changed("start") { + params.Set("start", strconv.Itoa(p_startVar)) + } + resp, err := cli.Do(ctx, "GET", "https://api.hasdata.com/scrape/google/scholar", params, nil) + if err != nil { + return err + } + return WriteResponse(c, resp) + }, + } + cmd.Flags().Float64Var(&p_asRrVar, "as-rr", 0, "asRr Review Articles Only: Set to 1 to return review articles only, or 0 (default) to return all articles.") + cmd.Flags().StringVar(&p_asSdtVar, "as-sdt", "0,5", "asSdt Search Type / Filter: Search type/filter, e.g. `0,5` for the default Articles filter, `4` for case law with court codes, or `0`/`7` for patents.") + cmd.Flags().Float64Var(&p_asVisVar, "as-vis", 0, "asVis Exclude Citations: Set to 1 to exclude citations from the results, or 0 (default) to include them.") + cmd.Flags().IntVar(&p_asYhiVar, "as-yhi", 2024, "asYhi Year To: Return results published up to and including this year.") + cmd.Flags().IntVar(&p_asYloVar, "as-ylo", 2020, "asYlo Year From: Return results published from this year onward.") + cmd.Flags().StringVar(&p_citesVar, "cites", "", "cites Cited By Search: Unique article ID to look up articles that cite it, as returned in a result's `citedBy.citesId`.") + cmd.Flags().StringVar(&p_clusterVar, "cluster", "", "cluster All Versions Search: Unique article ID to look up all indexed versions of that article, as returned in a result's `versions.clusterId`.") + cmd.Flags().Float64Var(&p_filterVar, "filter", 0, "filter Results Filtering: Defines whether to enable or disable the filters for 'Similar Results' and 'Omitted Results'. Set to 1 (default) to enable these filters, or 0 to disable them.\n") + 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().StringSliceVar(&p_lrVar, "lr", nil, "lr Set Multiple Languages: The 'lr' parameter specifies the language of the websites to return results from. This parameter filters results based on the language of the web content.") + _ = cmd.RegisterFlagCompletionFunc("lr", func(*cobra.Command, []string, string) ([]string, cobra.ShellCompDirective) { + return []string{"lang_ar", "lang_hy", "lang_bg", "lang_ca", "lang_cs", "lang_da", "lang_de", "lang_el", "lang_en", "lang_es", "lang_et", "lang_tl", "lang_fi", "lang_fr", "lang_hr", "lang_hi", "lang_hu", "lang_id", "lang_is", "lang_it", "lang_iw", "lang_he", "lang_ja", "lang_ko", "lang_lt", "lang_lv", "lang_nl", "lang_no", "lang_fa", "lang_pl", "lang_pt", "lang_ro", "lang_ru", "lang_sk", "lang_sl", "lang_sr", "lang_sv", "lang_th", "lang_tr", "lang_uk", "lang_vi", "lang_zh-CN", "lang_zh-TW"}, cobra.ShellCompDirectiveNoFileComp + }) + cmd.Flags().IntVar(&p_numVar, "num", 0, "num Number of Results: Maximum number of results to return per page.") + cmd.Flags().StringVar(&p_qVar, "q", "machine learning", "q Search Query: Search query. Supports Google Scholar search helpers such as `author:` and `source:`. (required)") + _ = cmd.MarkFlagRequired("q") + cmd.Flags().StringVar(&p_safeVar, "safe", "", "safe Adult Content Filtering: Adult content filtering option. [allowed: active|off]") + _ = cmd.RegisterFlagCompletionFunc("safe", func(*cobra.Command, []string, string) ([]string, cobra.ShellCompDirective) { + return []string{"active", "off"}, cobra.ShellCompDirectiveNoFileComp + }) + cmd.Flags().IntVar(&p_scisbdVar, "scisbd", 0, "scisbd Sort By Date: Sort results by date instead of relevance: 1 for abstracts only, 2 for everything. Omit for relevance sorting.") + cmd.Flags().IntVar(&p_startVar, "start", 0, "start Result Offset: Result offset for pagination, where 0 is the first result.") + + return cmd +} + +func init() { + RegisterAPICommand("google_scholar", "Google Scholar", newGoogleScholarCmd()) +} diff --git a/cmd/gen_google_scholar_cite.go b/cmd/gen_google_scholar_cite.go new file mode 100644 index 0000000..da33e4c --- /dev/null +++ b/cmd/gen_google_scholar_cite.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 newGoogleScholarCiteCmd() *cobra.Command { + var p_hlVar string + var p_qVar string + + cmd := &cobra.Command{ + Use: "google-scholar-cite", + Short: "Google Scholar Cite API (5 credits/call)", + Long: "Provides real-time access to Google Scholar citation formats and reference-manager export links for a single organic search result.\n\nEndpoint: GET https://api.hasdata.com/scrape/google/scholar-cite\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{} + if c.Flags().Changed("hl") { + params.Set("hl", p_hlVar) + } + params.Set("q", p_qVar) + resp, err := cli.Do(ctx, "GET", "https://api.hasdata.com/scrape/google/scholar-cite", params, nil) + if err != nil { + return err + } + return WriteResponse(c, resp) + }, + } + 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_qVar, "q", "EQ8shYj8Ai8J", "q Result ID: The `resultId` of a Google Scholar organic result, as returned by the google/scholar endpoint. (required)") + _ = cmd.MarkFlagRequired("q") + + return cmd +} + +func init() { + RegisterAPICommand("google_scholar", "Google Scholar", newGoogleScholarCiteCmd()) +} diff --git a/cmd/gen_redfin_listing.go b/cmd/gen_redfin_listing.go index 1556c1a..a536dc1 100644 --- a/cmd/gen_redfin_listing.go +++ b/cmd/gen_redfin_listing.go @@ -596,5 +596,5 @@ func newRedfinListingCmd() *cobra.Command { } func init() { - RegisterAPICommand("redfin", "Redfin", newRedfinListingCmd()) + RegisterAPICommand("real_estate", "Real Estate", newRedfinListingCmd()) } diff --git a/cmd/gen_redfin_property.go b/cmd/gen_redfin_property.go index d28ec43..eab64ea 100644 --- a/cmd/gen_redfin_property.go +++ b/cmd/gen_redfin_property.go @@ -51,5 +51,5 @@ func newRedfinPropertyCmd() *cobra.Command { } func init() { - RegisterAPICommand("redfin", "Redfin", newRedfinPropertyCmd()) + RegisterAPICommand("real_estate", "Real Estate", newRedfinPropertyCmd()) } diff --git a/cmd/gen_shopify_collections.go b/cmd/gen_shopify_collections.go index cd6cec6..d88f90d 100644 --- a/cmd/gen_shopify_collections.go +++ b/cmd/gen_shopify_collections.go @@ -61,5 +61,5 @@ func newShopifyCollectionsCmd() *cobra.Command { } func init() { - RegisterAPICommand("shopify", "Shopify", newShopifyCollectionsCmd()) + RegisterAPICommand("ecommerce", "E-commerce", newShopifyCollectionsCmd()) } diff --git a/cmd/gen_shopify_products.go b/cmd/gen_shopify_products.go index 3d2ba7e..8475832 100644 --- a/cmd/gen_shopify_products.go +++ b/cmd/gen_shopify_products.go @@ -66,5 +66,5 @@ func newShopifyProductsCmd() *cobra.Command { } func init() { - RegisterAPICommand("shopify", "Shopify", newShopifyProductsCmd()) + RegisterAPICommand("ecommerce", "E-commerce", newShopifyProductsCmd()) } diff --git a/cmd/gen_walmart_product.go b/cmd/gen_walmart_product.go new file mode 100644 index 0000000..4e7cdd9 --- /dev/null +++ b/cmd/gen_walmart_product.go @@ -0,0 +1,92 @@ +// 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 newWalmartProductCmd() *cobra.Command { + var p_domainVar string + var p_itemIdVar string + var p_languageVar string + var p_otherOffersVar bool + var p_urlVar string + + cmd := &cobra.Command{ + Use: "walmart-product", + Short: "Walmart Product Scraper API (10 credits/call)", + Long: "The Walmart Product Scraper API returns the full detail page of a single Walmart item, and optionally the offers of other sellers competing for the same product.\n\nEndpoint: GET https://api.hasdata.com/scrape/walmart/product\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{"walmart.com", "walmart.ca"}); err != nil { + return err + } + } + if c.Flags().Changed("language") { + if err := validateEnumString("language", p_languageVar, []string{"en", "es", "fr"}); 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("item-id") { + params.Set("itemId", p_itemIdVar) + } + if c.Flags().Changed("language") { + params.Set("language", p_languageVar) + } + if c.Flags().Changed("other-offers") { + params.Set("otherOffers", strconv.FormatBool(p_otherOffersVar)) + } + if c.Flags().Changed("url") { + params.Set("url", p_urlVar) + } + resp, err := cli.Do(ctx, "GET", "https://api.hasdata.com/scrape/walmart/product", params, nil) + if err != nil { + return err + } + return WriteResponse(c, resp) + }, + } + cmd.Flags().StringVar(&p_domainVar, "domain", "", "domain Domain: Walmart storefront the item belongs to. Each storefront has its own catalog, item ids, prices and currency, so an id from one storefront does not resolve on another. Ignored when url is provided. Default is walmart.com. [allowed: walmart.com|walmart.ca]") + _ = cmd.RegisterFlagCompletionFunc("domain", func(*cobra.Command, []string, string) ([]string, cobra.ShellCompDirective) { + return []string{"walmart.com", "walmart.ca"}, cobra.ShellCompDirectiveNoFileComp + }) + cmd.Flags().StringVar(&p_itemIdVar, "item-id", "14977205582", "itemId Item ID: Walmart item id, taken from a product URL or from the id field of the Walmart Search API response. On walmart.com it is numeric (for example 14977205582), on walmart.ca an alphanumeric code (for example 6NZMJ5CW6MH2). Required unless url is provided.") + cmd.Flags().StringVar(&p_languageVar, "language", "en", "language Language: Language of the product details. Availability depends on the storefront - walmart.com serves en and es, walmart.ca serves en and fr. A language the storefront does not support falls back to its default. [allowed: en|es|fr]") + _ = cmd.RegisterFlagCompletionFunc("language", func(*cobra.Command, []string, string) ([]string, cobra.ShellCompDirective) { + return []string{"en", "es", "fr"}, cobra.ShellCompDirectiveNoFileComp + }) + cmd.Flags().BoolVar(&p_otherOffersVar, "other-offers", false, "otherOffers Other Sellers: Also collect the offers of other sellers competing for this item - each seller name, storefront, price, condition, shipping cost, delivery date and return policy. This takes an extra request to Walmart and costs 5 credits on top of the base 10, whether or not the item turns out to have competing sellers. How many competitors the item advertises, and the cheapest competing price, are returned in the otherOffers block whether the switch is on or off, so it can be left off until the count shows there is something to collect. Default is false.") + cmd.Flags().StringVar(&p_urlVar, "url", "https://www.walmart.com/ip/Samsung-Galaxy-S25-Ultra-256GB-Unlocked-Android-Cell-Phone-with-200MP-Camera-Titanium-Blue/14977205582", "url Product URL: A full Walmart product URL to scrape as is. When provided, it overrides itemId and the storefront is taken from the URL itself. Required unless itemId is provided.") + + return cmd +} + +func init() { + RegisterAPICommand("ecommerce", "E-commerce", newWalmartProductCmd()) +} diff --git a/cmd/gen_walmart_reviews.go b/cmd/gen_walmart_reviews.go new file mode 100644 index 0000000..2e51843 --- /dev/null +++ b/cmd/gen_walmart_reviews.go @@ -0,0 +1,125 @@ +// 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 newWalmartReviewsCmd() *cobra.Command { + var p_aspectIdVar string + var p_conditionVar string + var p_domainVar string + var p_itemIdVar string + var p_languageVar string + var p_pageVar int + var p_ratingVar int + var p_sortVar string + var p_urlVar string + var p_verifiedPurchasesOnlyVar bool + + cmd := &cobra.Command{ + Use: "walmart-reviews", + Short: "Walmart Reviews Scraper API (10 credits/call)", + Long: "The Walmart Reviews Scraper API returns the customer reviews of a single Walmart item, ten a page, with the sorting and filtering the product page itself offers.\n\nEndpoint: GET https://api.hasdata.com/scrape/walmart/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{"walmart.com", "walmart.ca"}); err != nil { + return err + } + } + if c.Flags().Changed("language") { + if err := validateEnumString("language", p_languageVar, []string{"en", "es", "fr"}); err != nil { + return err + } + } + if c.Flags().Changed("sort") { + if err := validateEnumString("sort", p_sortVar, []string{"mostRelevant", "mostRecent", "mostHelpful", "highestRated", "lowestRated", "oldest"}); 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("aspect-id") { + params.Set("aspectId", p_aspectIdVar) + } + if c.Flags().Changed("condition") { + params.Set("condition", p_conditionVar) + } + if c.Flags().Changed("domain") { + params.Set("domain", p_domainVar) + } + if c.Flags().Changed("item-id") { + params.Set("itemId", p_itemIdVar) + } + if c.Flags().Changed("language") { + params.Set("language", p_languageVar) + } + if c.Flags().Changed("page") { + params.Set("page", strconv.Itoa(p_pageVar)) + } + if c.Flags().Changed("rating") { + params.Set("rating", strconv.Itoa(p_ratingVar)) + } + if c.Flags().Changed("sort") { + params.Set("sort", p_sortVar) + } + if c.Flags().Changed("url") { + params.Set("url", p_urlVar) + } + if c.Flags().Changed("verified-purchases-only") { + params.Set("verifiedPurchasesOnly", strconv.FormatBool(p_verifiedPurchasesOnlyVar)) + } + resp, err := cli.Do(ctx, "GET", "https://api.hasdata.com/scrape/walmart/reviews", params, nil) + if err != nil { + return err + } + return WriteResponse(c, resp) + }, + } + cmd.Flags().StringVar(&p_aspectIdVar, "aspect-id", "", "aspectId Frequent Mention: Return only reviews mentioning one topic, given as its id. The topics differ per product - a phone has Battery Life or Display, a coffee has Flavor or Aroma - so take the id from the Frequent mentions group of the filters block in the response rather than guessing it.") + cmd.Flags().StringVar(&p_conditionVar, "condition", "", "condition Condition: Return only reviews written about one item condition, given as its code. Applies to items sold in several conditions, such as new and restored. Take the code from the Condition group of the filters block in the response.") + cmd.Flags().StringVar(&p_domainVar, "domain", "", "domain Domain: Walmart storefront the item belongs to. Each storefront has its own catalog, item ids and review pool, so an id from one storefront does not resolve on another. Ignored when url is provided. Default is walmart.com. [allowed: walmart.com|walmart.ca]") + _ = cmd.RegisterFlagCompletionFunc("domain", func(*cobra.Command, []string, string) ([]string, cobra.ShellCompDirective) { + return []string{"walmart.com", "walmart.ca"}, cobra.ShellCompDirectiveNoFileComp + }) + cmd.Flags().StringVar(&p_itemIdVar, "item-id", "1028936148", "itemId Item ID: Walmart item id, taken from a product URL or from the id field of the Walmart Search API response. On walmart.com it is numeric (for example 14977205582), on walmart.ca an alphanumeric code (for example 6NZMJ5CW6MH2). Required unless url is provided.") + cmd.Flags().StringVar(&p_languageVar, "language", "en", "language Language: Language of the review page. Availability depends on the storefront - walmart.com serves en and es, walmart.ca serves en and fr. A language the storefront does not support falls back to its default. Reviews themselves are returned in the language their author wrote them in. [allowed: en|es|fr]") + _ = cmd.RegisterFlagCompletionFunc("language", func(*cobra.Command, []string, string) ([]string, cobra.ShellCompDirective) { + return []string{"en", "es", "fr"}, cobra.ShellCompDirectiveNoFileComp + }) + cmd.Flags().IntVar(&p_pageVar, "page", 1, "page Page: Page of reviews to return, ten reviews a page. The response reports the last available page in pagination.totalPages, and the next one in pagination.nextPage. Note that only reviews carrying written text are paginated, so the ceiling follows reviewsInformation.totalReviews rather than the larger totalRatings. Default is 1.") + cmd.Flags().IntVar(&p_ratingVar, "rating", 0, "rating Star Rating: Return only reviews carrying this star rating. The filters block of the response lists the ratings this item actually has, with a review count for each.") + cmd.Flags().StringVar(&p_sortVar, "sort", "mostRelevant", "sort Sort By: Order of the returned reviews, named as the Walmart review page names it. Default is mostRelevant. [allowed: mostRelevant|mostRecent|mostHelpful|highestRated|lowestRated|oldest]") + _ = cmd.RegisterFlagCompletionFunc("sort", func(*cobra.Command, []string, string) ([]string, cobra.ShellCompDirective) { + return []string{"mostRelevant", "mostRecent", "mostHelpful", "highestRated", "lowestRated", "oldest"}, cobra.ShellCompDirectiveNoFileComp + }) + cmd.Flags().StringVar(&p_urlVar, "url", "https://www.walmart.com/ip/Restored-Apple-iPhone-14-Carrier-Unlocked-128-GB-Starlight-MPUN3LL-A-Refurbished/1028936148", "url Product URL: A full Walmart product URL whose reviews to scrape. When provided, it overrides itemId and the storefront is taken from the URL itself. Required unless itemId is provided.") + cmd.Flags().BoolVar(&p_verifiedPurchasesOnlyVar, "verified-purchases-only", false, "verifiedPurchasesOnly Verified Purchases Only: Return only reviews left by customers whose purchase Walmart confirmed. Narrows the pool considerably, since most reviews are unverified or syndicated from the manufacturer.") + + return cmd +} + +func init() { + RegisterAPICommand("ecommerce", "E-commerce", newWalmartReviewsCmd()) +} diff --git a/cmd/gen_walmart_search.go b/cmd/gen_walmart_search.go new file mode 100644 index 0000000..17799f0 --- /dev/null +++ b/cmd/gen_walmart_search.go @@ -0,0 +1,138 @@ +// 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 newWalmartSearchCmd() *cobra.Command { + var p_catIdVar string + var p_deliveryTypeVar string + var p_domainVar string + var p_facetVar string + var p_languageVar string + var p_maxPriceVar float64 + var p_minPriceVar float64 + var p_pageVar int + var p_qVar string + var p_sortVar string + var p_urlVar string + + cmd := &cobra.Command{ + Use: "walmart-search", + Short: "Walmart Search Scraper API (10 credits/call)", + Long: "The Walmart Search Scraper API allows users to get search results from Walmart based on the specified query, category and storefront. This API enables searching for products on Walmart.\n\nEndpoint: GET https://api.hasdata.com/scrape/walmart/search\nCost: 10 credits per call.", + Args: cobra.NoArgs, + PreRunE: func(c *cobra.Command, _ []string) error { + if c.Flags().Changed("delivery-type") { + if err := validateEnumString("delivery-type", p_deliveryTypeVar, []string{"shipping", "pickup"}); err != nil { + return err + } + } + if c.Flags().Changed("domain") { + if err := validateEnumString("domain", p_domainVar, []string{"walmart.com", "walmart.ca"}); err != nil { + return err + } + } + if c.Flags().Changed("language") { + if err := validateEnumString("language", p_languageVar, []string{"en", "es", "fr"}); err != nil { + return err + } + } + if c.Flags().Changed("sort") { + if err := validateEnumString("sort", p_sortVar, []string{"bestMatch", "priceLowToHigh", "priceHighToLow", "bestseller", "highlyRated", "newArrivals"}); 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("cat-id") { + params.Set("catId", p_catIdVar) + } + if c.Flags().Changed("delivery-type") { + params.Set("deliveryType", p_deliveryTypeVar) + } + if c.Flags().Changed("domain") { + params.Set("domain", p_domainVar) + } + if c.Flags().Changed("facet") { + params.Set("facet", p_facetVar) + } + if c.Flags().Changed("language") { + params.Set("language", p_languageVar) + } + if c.Flags().Changed("max-price") { + params.Set("maxPrice", strconv.FormatFloat(p_maxPriceVar, 'f', -1, 64)) + } + if c.Flags().Changed("min-price") { + params.Set("minPrice", strconv.FormatFloat(p_minPriceVar, 'f', -1, 64)) + } + if c.Flags().Changed("page") { + params.Set("page", strconv.Itoa(p_pageVar)) + } + if c.Flags().Changed("q") { + params.Set("q", p_qVar) + } + if c.Flags().Changed("sort") { + params.Set("sort", p_sortVar) + } + if c.Flags().Changed("url") { + params.Set("url", p_urlVar) + } + resp, err := cli.Do(ctx, "GET", "https://api.hasdata.com/scrape/walmart/search", params, nil) + if err != nil { + return err + } + return WriteResponse(c, resp) + }, + } + cmd.Flags().StringVar(&p_catIdVar, "cat-id", "", "catId Category ID: Walmart category id, taken from a category URL (for example 976759_1086446_1229651). Combine it with q to search inside a category, or send it alone to browse the whole category. Required unless q is provided.") + cmd.Flags().StringVar(&p_deliveryTypeVar, "delivery-type", "", "deliveryType Delivery Type: Keep only the products available with the selected fulfillment method. [allowed: shipping|pickup]") + _ = cmd.RegisterFlagCompletionFunc("delivery-type", func(*cobra.Command, []string, string) ([]string, cobra.ShellCompDirective) { + return []string{"shipping", "pickup"}, cobra.ShellCompDirectiveNoFileComp + }) + cmd.Flags().StringVar(&p_domainVar, "domain", "", "domain Domain: Walmart storefront to search. Each storefront has its own catalog, prices and currency. Default is walmart.com. [allowed: walmart.com|walmart.ca]") + _ = cmd.RegisterFlagCompletionFunc("domain", func(*cobra.Command, []string, string) ([]string, cobra.ShellCompDirective) { + return []string{"walmart.com", "walmart.ca"}, cobra.ShellCompDirectiveNoFileComp + }) + cmd.Flags().StringVar(&p_facetVar, "facet", "", "facet Facet Filter: Walmart filter in the name:value form, for example brand:Great Value. Every value available for a query is listed in the facets block of the response, each one carrying the exact string to send back here, so a first unfiltered request tells you what can be filtered on. Combine several filters with a double pipe: brand:Great Value||retailer_type:Walmart.") + cmd.Flags().StringVar(&p_languageVar, "language", "en", "language Language: Language of the results. Availability depends on the storefront - walmart.com serves en and es, walmart.ca serves en and fr. A language the storefront does not support falls back to its default. [allowed: en|es|fr]") + _ = cmd.RegisterFlagCompletionFunc("language", func(*cobra.Command, []string, string) ([]string, cobra.ShellCompDirective) { + return []string{"en", "es", "fr"}, cobra.ShellCompDirectiveNoFileComp + }) + cmd.Flags().Float64Var(&p_maxPriceVar, "max-price", 0, "maxPrice Maximum Price: Upper bound of the price range, in the storefront currency.") + cmd.Flags().Float64Var(&p_minPriceVar, "min-price", 0, "minPrice Minimum Price: Lower bound of the price range, in the storefront currency.") + cmd.Flags().IntVar(&p_pageVar, "page", 0, "page Page Number: Page number for pagination (e.g., 1 for the first page, 2 for the second page, etc.). Walmart stops serving results after roughly page 10, returning an empty page beyond that.") + cmd.Flags().StringVar(&p_qVar, "q", "coffee", "q Search Query: The search term for which to get the search results. It can be omitted only when catId is provided, to browse a whole category instead of searching.") + cmd.Flags().StringVar(&p_sortVar, "sort", "bestMatch", "sort Sort By: The sorting option for the search results. [allowed: bestMatch|priceLowToHigh|priceHighToLow|bestseller|highlyRated|newArrivals]") + _ = cmd.RegisterFlagCompletionFunc("sort", func(*cobra.Command, []string, string) ([]string, cobra.ShellCompDirective) { + return []string{"bestMatch", "priceLowToHigh", "priceHighToLow", "bestseller", "highlyRated", "newArrivals"}, cobra.ShellCompDirectiveNoFileComp + }) + cmd.Flags().StringVar(&p_urlVar, "url", "", "url Search URL: A full Walmart search or category URL to scrape as is. When provided, it overrides q, catId and the other search parameters, and the storefront is taken from the URL itself.") + + return cmd +} + +func init() { + RegisterAPICommand("ecommerce", "E-commerce", newWalmartSearchCmd()) +} diff --git a/cmd/gen_zillow_listing.go b/cmd/gen_zillow_listing.go index 5c16be5..a2d5fa1 100644 --- a/cmd/gen_zillow_listing.go +++ b/cmd/gen_zillow_listing.go @@ -277,7 +277,7 @@ func newZillowListingCmd() *cobra.Command { }) cmd.Flags().Float64Var(&p_lotSize_maxVar, "lot-size-max", 0, "lotSize[max] Lot Size Max: The maximum lot size.") cmd.Flags().Float64Var(&p_lotSize_minVar, "lot-size-min", 0, "lotSize[min] Lot Size Min: The minimum lot size.") - cmd.Flags().StringVar(&p_moveInDateVar, "move-in-date", "", "moveInDate Move In Date: The desired move-in date.") + cmd.Flags().StringVar(&p_moveInDateVar, "move-in-date", "", "moveInDate Move In Date: The desired move-in date in `YYYY-MM-DD` format.") cmd.Flags().BoolVar(&p_mustHaveGarageVar, "must-have-garage", false, "mustHaveGarage Must Have Garage: If set to true, only listings with a garage will be included.") cmd.Flags().StringSliceVar(&p_otherAmenitiesVar, "other-amenities", nil, "otherAmenities[] Other Amenities: An array of other amenities.") _ = cmd.RegisterFlagCompletionFunc("other-amenities", func(*cobra.Command, []string, string) ([]string, cobra.ShellCompDirective) { @@ -322,5 +322,5 @@ func newZillowListingCmd() *cobra.Command { } func init() { - RegisterAPICommand("zillow", "Zillow", newZillowListingCmd()) + RegisterAPICommand("real_estate", "Real Estate", newZillowListingCmd()) } diff --git a/cmd/gen_zillow_property.go b/cmd/gen_zillow_property.go index 54a19eb..119c111 100644 --- a/cmd/gen_zillow_property.go +++ b/cmd/gen_zillow_property.go @@ -56,5 +56,5 @@ func newZillowPropertyCmd() *cobra.Command { } func init() { - RegisterAPICommand("zillow", "Zillow", newZillowPropertyCmd()) + RegisterAPICommand("real_estate", "Real Estate", newZillowPropertyCmd()) } diff --git a/internal/gen/spec-hash.txt b/internal/gen/spec-hash.txt index b519b34..0707038 100644 --- a/internal/gen/spec-hash.txt +++ b/internal/gen/spec-hash.txt @@ -1 +1 @@ -e5451e3be6771c1b0f5ee61741d45e7b17312f9ffedcfba4369fd8c759b47d71 +171916e51bd57e7ac31568a3fb81a0bb1c6edc6769f686d54a1c66b3b47f7986 diff --git a/pr-body.md b/pr-body.md index 248a77e..c523430 100644 --- a/pr-body.md +++ b/pr-body.md @@ -1,38 +1,34 @@ ## Changes - GENERATION_REPORT.md | 13 ++++-- - cmd/gen_airbnb_listing.go | 27 +++++++++-- - cmd/gen_bing_serp.go | 28 ++++++------ - cmd/gen_booking_place.go | 2 +- - cmd/gen_booking_search.go | 2 +- - cmd/gen_google_images.go | 2 +- - cmd/gen_google_immersive_product.go | 2 +- - cmd/gen_google_maps.go | 4 +- - cmd/gen_google_maps_reviews.go | 6 +-- - cmd/gen_google_news.go | 2 +- - cmd/gen_google_serp.go | 2 +- - cmd/gen_google_serp_light.go | 2 +- - cmd/gen_google_shopping.go | 2 +- - cmd/gen_instagram_profile.go | 2 +- - cmd/gen_redfin_listing.go | 2 +- - cmd/gen_web_scraping.go | 2 +- - internal/gen/spec-hash.txt | 2 +- - pr-body.md | 90 ------------------------------------- - 18 files changed, 65 insertions(+), 127 deletions(-) + GENERATION_REPORT.md | 27 ++++++++----- + cmd/gen_airbnb_listing.go | 4 +- + cmd/gen_amazon_product.go | 2 +- + cmd/gen_amazon_reviews.go | 2 +- + cmd/gen_amazon_search.go | 2 +- + cmd/gen_amazon_seller.go | 2 +- + cmd/gen_amazon_seller_products.go | 2 +- + cmd/gen_booking_place.go | 4 +- + cmd/gen_booking_search.go | 4 +- + cmd/gen_google_flights.go | 4 +- + cmd/gen_google_hotels.go | 4 +- + cmd/gen_redfin_listing.go | 2 +- + cmd/gen_redfin_property.go | 2 +- + cmd/gen_shopify_collections.go | 2 +- + cmd/gen_shopify_products.go | 2 +- + cmd/gen_zillow_listing.go | 4 +- + cmd/gen_zillow_property.go | 2 +- + internal/gen/spec-hash.txt | 2 +- + pr-body.md | 84 --------------------------------------- + 19 files changed, 39 insertions(+), 118 deletions(-) ## Generation Report # Generation Report -Generated at: 2026-08-31T07:13:05Z +Generated at: 2026-09-06T07:05:57Z -## APIs generated (55) +## APIs generated (60) - airbnb-listing - airbnb-property -- amazon-product -- amazon-reviews -- amazon-search -- amazon-seller -- amazon-seller-products - bing-serp - booking-place - booking-search @@ -42,6 +38,16 @@ Generated at: 2026-08-31T07:13:05Z - yelp-reviews - yelp-search - duckduckgo +- amazon-product +- amazon-reviews +- amazon-search +- amazon-seller +- amazon-seller-products +- shopify-collections +- shopify-products +- walmart-product +- walmart-reviews +- walmart-search - google-images - google-maps - google-maps-contributor-reviews @@ -57,6 +63,8 @@ Generated at: 2026-08-31T07:13:05Z - google-serp-light - google-shopping - google-short-videos +- google-scholar +- google-scholar-cite - google-flights - google-hotels - google-trends @@ -66,8 +74,8 @@ Generated at: 2026-08-31T07:13:05Z - indeed-listing - redfin-listing - redfin-property -- shopify-collections -- shopify-products +- zillow-listing +- zillow-property - instagram-posts - instagram-profile - tiktok-comments @@ -79,8 +87,6 @@ Generated at: 2026-08-31T07:13:05Z - youtube-search-api - youtube-transcript-api - youtube-video-api -- zillow-listing -- zillow-property ## Deprecated APIs (hidden in help) - amazon-reviews