import requests from time import time from lib.cesiumCommon import CesiumCommon from lib.gvaWallets import ListWallets class GeolocProfiles(CesiumCommon): # Configure JSON document POST ready to send def getCesiumProfiles(self): response = requests.post( "https://g1.data.e-is.pro/user/profile/_search?scroll=2m", json={ "query": { "constant_score": { "filter": [ {"exists": {"field": "geoPoint"}}, { "geo_bounding_box": { "geoPoint": { "top_left": {"lat": 90, "lon": -180}, "bottom_right": {"lat": -90, "lon": 180}, } } }, ] } }, "_source": [ "title", "avatar._content_type", "description", "city", "address", "socials.url", "creationTime", "membersCount", "type", "geoPoint", ], "size": 20000, }, ) scroll_id = response.json()["_scroll_id"] finalResult = response.json()["hits"]["hits"] while True: # Effectuez une requête de défilement pour obtenir la page suivante response_scroll = requests.post( "https://g1.data.e-is.pro/_search/scroll", json={"scroll_id": scroll_id, "scroll": "2m"}, ) # Vérifiez si la réponse est vide (aucun résultat) ou si la durée du défilement est écoulée if ( not response_scroll.json()["hits"]["hits"] or "error" in response_scroll.json() ): break else: finalResult = finalResult + response_scroll.json()["hits"]["hits"] # Traitez les résultats ici # Une fois terminé, supprimez le contexte de défilement requests.delete( "https://g1.data.e-is.pro/_search/scroll", json={"scroll_id": [scroll_id]} ) return finalResult def getGVAProfiles(self, node): gva = ListWallets(node, False, False, False, False) return gva.sendDoc() def formatProfiles(self, cesiumProfiles, gvaProfiles): walletsResult = [] for profile in cesiumProfiles: source = profile["_source"] pubkey = profile["_id"] try: isMember = gvaProfiles[pubkey]["id"]["isMember"] userId = gvaProfiles[pubkey]["id"]["username"] except: isMember = False userId = None try: title = source["title"] except: title = None try: city = source["city"] except: city = None try: avatar = source["avatar"] except: avatar: None try: socials = source["socials"] except: socials = None try: description = source["description"] except: description = None try: address = source["address"] except: address = None walletsResult.append( { "pubkey": pubkey, **({"address": address} if address else {}), **({"city": city} if city else {}), **({"description": description} if description else {}), **({"avatar": avatar} if avatar else {}), **({"userId": userId} if userId else {}), "isMember": isMember, "geoPoint": source["geoPoint"], **({"socials": socials} if socials else {}), **({"title": title} if title else {}), } ) return walletsResult