Erro 429 sobre datos de exploración de Expedia

Escribí un script con axios para eliminar datos de Expedia GraphQL API.

Funcionó durante 1 año, y ahora estoy recibiendo errores 429 demasiadas peticiones en la primera solicitud que trato de hacer.

Dato curioso: Cuando pongo la consulta en el cartero, obtengo la respuesta correctamente. Traté de copiar la misma solicitud que funciona en Postman a NodeJS con mucha libs(axios, request, http) y siempre recibo error 429 - Too Many Solicita.

  • He probado muchos ajustes de cabecera diferentes y todavía no trabajo.

Estoy publicando la parte de consulta de abajo para ser más fácil de entender lo que está pasando.

    axiosExpedia
            .post('https://www.expedia.com.br/graphql', 
            { variables: 
                { context: 
                     { siteId: 69,
                         locale: 'pt_BR',
                         eapid: 0,
                         currency: 'BRL',
                         device: { type: 'DESKTOP' },
                         identity: 
                            { duaid: 'c4e8e73c-16fa-4672-af53-62380e414523',
                                expUserId: '-1',
                                tuid: '-1',
                                authState: 'ANONYMOUS' },
                         debugContext: { abacusOverrides: [], alterMode: 'RELEASED' } },
                    propertyId: '16024731',
                    sortBy: 'NEWEST_TO_OLDEST',
                    filters: 
                     { includeRecentReviews: true,
                         includeRatingsOnlyReviews: true,
                         travelerType: [] },
                    pagination: { size: 10, startingIndex: 10 },
                    searchCriteria: 
                     { primary: 
                            { dateRange: 
                                 { checkInDate: { day: 20, month: 11, year: 2020 },
                                     checkOutDate: { day: 22, month: 11, year: 2020 } },
                                destination: 
                                 { regionName: 'Brasil',
                                     regionId: '23',
                                     coordinates: null,
                                     pinnedPropertyId: null,
                                     propertyIds: null },
                                rooms: [ { adults: 2, children: [] } ] },
                         secondary: 
                            { counts: [],
                                ranges: [],
                                selections: 
                                 [ { id: 'sort', value: 'RECOMMENDED' },
                                     { id: 'regionId', value: '23' },
                                     { id: 'privacyTrackingState', value: 'CAN_TRACK' },
                                     { id: 'useRewards', value: 'SHOP_WITHOUT_POINTS' } ] } } },
             query: 'query PropertyFilteredReviewsQuery($context: ContextInput!, $propertyId: String!, $sortBy: PropertyReviewSort!, $filters: PropertyReviewFiltersInput!, $pagination: PaginationInput!, $searchCriteria: PropertySearchCriteriaInput) {\n  propertyReviewSummaries(context: $context, propertyIds: [$propertyId]) {\n    ...__PropertyReviewSummaryFragment\n    __typename\n  }\n  propertyInfo(context: $context, propertyId: $propertyId) {\n    reviewInfo(sortBy: $sortBy, pagination: $pagination, filters: $filters, searchCriteria: $searchCriteria) {\n      ...__PropertyReviewsListFragment\n      ...__WriteReviewLinkFragment\n      sortAndFilter {\n        ...TravelerTypeFragment\n        __typename\n      }\n      __typename\n    }\n    __typename\n  }\n  __PropertyReviewSummary__: __type(name: "PropertyReviewSummary") {\n    possibleTypes {\n      name\n    }\n  }\n  __PropertyReviews__: __type(name: "PropertyReviews") {\n    possibleTypes {\n      name\n    }\n  }\n  __PropertyReview__: __type(name: "PropertyReview") {\n    possibleTypes {\n      name\n    }\n  }\n  __ReviewThemes__: __type(name: "ReviewThemes") {\n    possibleTypes {\n      name\n    }\n  }\n  __ManagementResponse__: __type(name: "ManagementResponse") {\n    possibleTypes {\n      name\n    }\n  }\n  __SortAndFilterViewModel__: __type(name: "SortAndFilterViewModel") {\n    possibleTypes {\n      name\n    }\n  }\n}\n\nfragment __PropertyReviewSummaryFragment on PropertyReviewSummary {\n  overallScoreWithDescription\n  propertyReviewCountDetails {\n    fullDescription\n    __typename\n  }\n  reviewDisclaimer\n  reviewSummaryDetails {\n    label\n    ratingPercentage\n    formattedRatingOutOfMax\n    __typename\n  }\n  totalCount {\n    raw\n    __typename\n  }\n  __typename\n}\n\nfragment __PropertyReviewsListFragment on PropertyReviews {\n  summary {\n    paginateAction {\n      text\n      analytics {\n        referrerId\n        linkName\n        __typename\n      }\n      __typename\n    }\n    __typename\n  }\n  reviews {\n    ...ReviewParentFragment\n    managementResponses {\n      ...ReviewChildFragment\n      __typename\n    }\n    __typename\n  }\n  __typename\n}\n\nfragment ReviewParentFragment on PropertyReview {\n  id\n  superlative\n  locale\n  title\n  reviewScoreWithDescription {\n    label\n    value\n    __typename\n  }\n  text\n  stayDuration\n  submissionTime {\n    formatted(format: "d MMM yyyy")\n    __typename\n  }\n  themes {\n    ...ReviewThemeFragment\n    __typename\n  }\n  ...FeedbackIndicatorFragment\n  ...AuthorFragment\n  ...PhotosFragment\n  ...TravelersFragment\n  ...ReviewTranslationInfoFragment\n  __typename\n}\n\nfragment AuthorFragment on PropertyReview {\n  reviewAuthorAttribution {\n    text\n    __typename\n  }\n  __typename\n}\n\nfragment PhotosFragment on PropertyReview {\n  id\n  photos {\n    description\n    url\n    __typename\n  }\n  __typename\n}\n\nfragment TravelersFragment on PropertyReview {\n  travelers\n  __typename\n}\n\nfragment ReviewThemeFragment on ReviewThemes {\n  icon {\n    id\n    description\n    __typename\n  }\n  label\n  __typename\n}\n\nfragment FeedbackIndicatorFragment on PropertyReview {\n  helpfulReviewVotes\n  feedbackIndicator {\n    label\n    __typename\n  }\n  __typename\n}\n\nfragment ReviewTranslationInfoFragment on PropertyReview {\n  translationInfo {\n    loadingTranslationText\n    targetLocale\n    translatedBy {\n      description\n      __typename\n    }\n    translationCallToActionLabel\n    seeOriginalText\n    __typename\n  }\n  __typename\n}\n\nfragment ReviewChildFragment on ManagementResponse {\n  id\n  header {\n    text\n    __typename\n  }\n  response\n  __typename\n}\n\nfragment TravelerTypeFragment on SortAndFilterViewModel {\n  sortAndFilter {\n    name\n    label\n    options {\n      label\n      isSelected\n      optionValue\n      description\n      __typename\n    }\n    __typename\n  }\n  __typename\n}\n\nfragment __WriteReviewLinkFragment on PropertyReviews {\n  writeReviewLink {\n    link {\n      uri {\n        value\n        relativePath\n        __typename\n      }\n      clientSideAnalytics {\n        referrerId\n        linkName\n        __typename\n      }\n      __typename\n    }\n    value\n    accessibilityLabel\n    __typename\n  }\n  __typename\n}\n' })
            

Screenshot Postman

Pregunta hecha hace 3 años, 4 meses, 29 días - Por bugbusterx


2 Respuestas:

  • El error 429 de "Too Many Requests" indica que estás haciendo demasiadas peticiones a la API de Expedia en un periodo de tiempo corto. Aquí te dejo algunas sugerencias que podrían ayudarte a resolver este problema:

    • Verifica los límites de la API: Asegúrate de revisar la documentación de la API de Expedia para conocer los límites de peticiones permitidos en un periodo de tiempo determinado. Es posible que hayas excedido estos límites sin darte cuenta.
    • Implementa un mecanismo de espera entre las peticiones: Puedes intentar agregar un pequeño retraso entre cada solicitud para no sobrecargar el servidor con demasiadas solicitudes simultáneas. Puedes utilizar la función `setTimeout` de JavaScript para agregar un tiempo de espera entre las llamadas.
    • Utiliza un sistema de caché: Si estás realizando consultas repetidas a la misma información, considera implementar un sistema de caché para almacenar temporalmente los resultados y así evitar hacer consultas innecesarias a la API.
    • Revisa tus ajustes de cabecera: Aunque mencionas que has probado diferentes ajustes de cabecera, asegúrate de que estás enviando los encabezados correctos y necesarios para cada solicitud. A veces, configurar adecuadamente los encabezados puede ayudar a evitar problemas de límites de peticiones.
    • Considera contactar al soporte técnico de Expedia: Si has agotado todas las opciones anteriores y sigues experimentando el error 429, considera comunicarte con el soporte técnico de Expedia para obtener ayuda específica sobre este problema.

    Espero que estas sugerencias te sean de ayuda para resolver el error 429 que estás experimentando al interactuar con la API de Expedia. ¡Déjame saber si puedo ayudarte con algo más!

    Respondida el Dec 19, 2020 a las 13:50 - por Gpt

    Votos positivos: 0 | Votos negativos: 0

  • p>###### ## ##### ##### ######

    Respondida el Dec 19, 2020 a las 13:56 - por Gemini

    Votos positivos: 0 | Votos negativos: 0