Quantcast
Channel: Active questions tagged rest - Stack Overflow
Viewing all articles
Browse latest Browse all 4140

List object error for python epic games api [closed]

$
0
0

I've made this site where you search for a keyword and tell games from different platforms using APIs (so far, Steam and Epic Games) but I get this error, here's my code:

from flask import Flask, request, render_templatefrom steam_web_api import Steamfrom dotenv import load_dotenvimport jsonfrom typing import NamedTupleimport osimport requests# Loads package from Epic Games Store APIfrom epicstore_api.exc import EGSException, EGSNotFoundfrom epicstore_api.models import EGSCategory, EGSCollectionType, EGSProductTypefrom epicstore_api.queries import STORE_QUERYclass OfferData(NamedTuple):   namespace: str   offer_id: str__all__ = ['EpicGamesStoreAPI', 'OfferData']class EpicGamesStoreAPI:  """Class for interacting with EGS web API without user credentials."""   def __init__(self, locale="en-US", country="US", session=None) -> None:     self._session = requests.Session() or session     self.locale = locale     self.country = country   def _clean_1004_errors(self, raw):     if 'errors' in raw:       for error in raw['errors'].copy():         service_response = json.loads(error.get('serviceResponse', {}))         if service_response and service_response.get('numericErrorCode') == 1004:           raw['errors'].remove(error)       if not raw['errors']:         raw.pop('errors')     return raw   def _make_graphql_query(self, query, headers, **variables):     url = 'https://graphql.epicgames.com/graphql'     payload = {'query': query, 'variables': variables}     print(f"Payload: {json.dumps(payload, indent=2)}")  # Print the payload for debugging     response = self._session.post(url, json=payload, headers=headers)     try:       response.raise_for_status()     except requests.exceptions.HTTPError as e:       print(f"HTTPError: {e.response.text}")  # Print the response content for debugging       raise     return self._clean_1004_errors(response.json())     def fetch_store_games(     self,     count: int = 30,     product_type: str = 'ALL_PRODUCTS',     allow_countries: str = 'US',     namespace: str = '',     sort_by: str = 'title',     sort_dir: str = 'ASC',     release_date: str | None = None,     start: int = 0,     keywords: str = '',     categories: list[EGSCategory] | str | None = None,     *,     with_price: bool = True,   ) -> dict:     sort_dir = sort_dir.upper()     if sort_dir not in ('ASC', 'DESC'):       raise ValueError(f'Parameter ``sort_dir`` have to be equals to ASC or DESC, not to {sort_dir}')     if categories is None:       categories = ''     return self._make_graphql_query(       STORE_QUERY,       headers={'content-type': 'application/json;charset=UTF-8'},       count=count,       category=product_type,       allowCountries=allow_countries,       namespace=namespace,       sortBy=sort_by,       sortDir=sort_dir,       releaseDate=release_date,       start=start,       keywords=keywords,       tag=categories,       withPrice=with_price     )# Define the GraphQL querySTORE_QUERY = """query searchStoreQuery(  $allowCountries: String  $category: String  $namespace: String  $sortBy: String  $sortDir: String  $start: Int  $tag: String  $releaseDate: String  $withPrice: Boolean = true  $keywords: String  $count: Int) {  Catalog {   searchStore(    allowCountries: $allowCountries    category: $category    count: $count    country: "US"    keywords: $keywords    namespace: $namespace    sortBy: $sortBy    sortDir: $sortDir    releaseDate: $releaseDate    start: $start    tag: $tag   ) {    elements {     title     description     keyImages {      type      url     }     seller {      name     }     categories {      path     }     price(country: "US") @include(if: $withPrice) {      totalPrice {       fmtPrice(locale: "en-US") {        discountPrice       }      }     }     productSlug    }   }  }}"""# Load environment variables from .envload_dotenv()app = Flask(__name__)steam_api_key = os.environ.get("STEAM_API_KEY")if not steam_api_key:   raise ValueError("STEAM_API_KEY environment variable not set.")steam = Steam(steam_api_key)@app.route('/')def index():   return render_template('index.html')@app.route('/search', methods=['POST'])def search():   search_query = request.form.get('search_query')   try:     # Fetch Steam games     steam_games = steam.apps.search_games(search_query)     for game in steam_games['apps']:       game['name'] = game['name'].encode('utf-8').decode('unicode_escape')       # Fetch all Epic Games Store games     epic_api = EpicGamesStoreAPI()     epic_games_response = epic_api.fetch_store_games(       product_type='games/edition/base|bundles/games|editors',       count=30,       sort_by='releaseDate',       sort_dir='DESC',       keywords=search_query,       with_price=True,     )     # Extract the relevant part of the response     epic_games = epic_games_response.get('Catalog', {}).get('searchStore', {}).get('elements', [])         # Print the Epic Games Store response for debugging     print(f"Epic Games Store Response: {json.dumps(epic_games, indent=2)}")       return render_template('results.html', steam_games=steam_games, epic_games=epic_games)   except Exception as e:     print(f"An error occurred: {e}")     return str(e), 500if __name__ == '__main__':  app.run(debug=True)

and this is the error:An error occurred: 'list object' has no attribute 'data'

pls help

At first the site wouldnt load, then i got help and made the search site load but then the error would pop up.


Viewing all articles
Browse latest Browse all 4140

Latest Images

Trending Articles



Latest Images

<script src="https://jsc.adskeeper.com/r/s/rssing.com.1596347.js" async> </script>