File tree Expand file tree Collapse file tree 3 files changed +176
-0
lines changed
Expand file tree Collapse file tree 3 files changed +176
-0
lines changed Original file line number Diff line number Diff line change 1+ import json
2+
3+
4+ def save_to_disk (data , fname , verbose = False ):
5+ with open (fname , "w" , encoding = "utf8" ) as f :
6+ json .dump (data , f )
7+
8+ if verbose :
9+ print (f"#entries = { len (data )} " )
10+
11+ return
Original file line number Diff line number Diff line change 1+ import requests
2+
3+ from src .query_utils import get_query
4+
5+
6+ def get_geforce_url ():
7+ return "https://games.geforce.com/graphql"
8+
9+
10+ def fetch_page (cursor = "" , is_slim_query = True ):
11+ print (f"Cursor: { cursor } " )
12+
13+ r = requests .post (
14+ url = get_geforce_url (),
15+ json = {"query" : get_query (cursor , is_slim_query = is_slim_query )},
16+ )
17+ if r .ok :
18+ data = r .json ()
19+ item_info = data ["data" ]["apps" ]["items" ]
20+ page_info = data ["data" ]["apps" ]["pageInfo" ]
21+ else :
22+ item_info = None
23+ page_info = None
24+
25+ return item_info , page_info
26+
27+
28+ def fetch_all_pages (is_slim_query = True ):
29+ data = []
30+
31+ has_next_page = True
32+ cursor = ""
33+
34+ while has_next_page :
35+ item_info , page_info = fetch_page (cursor , is_slim_query = is_slim_query )
36+
37+ data += item_info
38+
39+ has_next_page = page_info ["hasNextPage" ]
40+ cursor = page_info ["endCursor" ]
41+
42+ return data
Original file line number Diff line number Diff line change 1+ def get_query (cursor , is_slim_query = True ):
2+ query_prefixe = "{"
3+
4+ query_header = f'apps(first: 1200, after: "{ cursor } ")'
5+
6+ qery_metadata = """{
7+ numberReturned
8+ pageInfo {
9+ hasNextPage
10+ endCursor
11+ totalCount
12+ }"""
13+
14+ query_content = get_query_content (is_slim_query = is_slim_query )
15+
16+ query_suffixe = "} }"
17+
18+ return query_prefixe + query_header + qery_metadata + query_content + query_suffixe
19+
20+
21+ def get_query_content (is_slim_query = True ):
22+ if is_slim_query :
23+ query_content = get_slim_query_content ()
24+ else :
25+ query_content = get_full_query_content ()
26+
27+ return query_content
28+
29+
30+ def get_slim_query_content ():
31+ query_content = """
32+ items {
33+ id
34+ title
35+ developerName
36+ publisherName
37+ type
38+ osType
39+ storeIds {
40+ store
41+ id
42+ }
43+ computedValues {
44+ earliestReleaseDate
45+ earliestStreetDate
46+ }
47+ }
48+ """
49+
50+ return query_content
51+
52+
53+ def get_full_query_content ():
54+ query_content = """
55+ items {
56+ osType
57+ id
58+ cmsId
59+ sortName
60+ title
61+ longDescription
62+ contentRatings {
63+ type
64+ categoryKey
65+ }
66+ developerName
67+ geForceUrl
68+ images {
69+ FEATURE_IMAGE
70+ GAME_BOX_ART
71+ HERO_IMAGE
72+ KEY_ART
73+ KEY_ICON
74+ KEY_IMAGE
75+ TV_BANNER
76+ SCREENSHOTS
77+ }
78+ keywords
79+ maxLocalPlayers
80+ maxOnlinePlayers
81+ apks {
82+ type
83+ version
84+ url
85+ }
86+ publisherName
87+ storeIds {
88+ id
89+ store
90+ }
91+ streamingModes {
92+ framesPerSecond
93+ heightInPixels
94+ widthInPixels
95+ }
96+ supportedControls
97+ supportedGamePlayModes
98+ type
99+ computedValues {
100+ earliestReleaseDate
101+ earliestStreetDate
102+ allKeywords
103+ }
104+ genres
105+ appStore
106+ variants {
107+ id
108+ title
109+ appStore
110+ developerName
111+ gfn {
112+ status
113+ visibility
114+ releaseDate
115+ isInLibrary
116+ }
117+ osType
118+ storeId
119+ }
120+ }
121+ """
122+
123+ return query_content
You can’t perform that action at this time.
0 commit comments