|
import requests |
|
from PIL import Image, PngImagePlugin |
|
from io import BytesIO |
|
import json |
|
import os |
|
import time |
|
import get_token |
|
import requests |
|
|
|
|
|
|
|
def get_json(id): |
|
url = f"https://api.cosmo.fans/objekt/v1/token/{id}" |
|
response = requests.get(url) |
|
if response.status_code == 200: |
|
return response.json() |
|
else: |
|
return {"error": "Request failed with status code " + str(response.status_code)} |
|
|
|
|
|
|
|
|
|
def fetch_image_with_retries(url, retries=3, delay=5): |
|
for i in range(retries): |
|
try: |
|
response = requests.get(url) |
|
response.raise_for_status() |
|
return Image.open(BytesIO(response.content)) |
|
except requests.exceptions.RequestException as e: |
|
print(f"Attempt {i+1} failed: {e}") |
|
time.sleep(delay) |
|
raise Exception("Failed to fetch image after several attempts") |
|
|
|
def download_img(token_id, folder_name): |
|
response_json = get_json(token_id) |
|
|
|
if 'objekt' in response_json and 'thumbnailImage' in response_json['objekt']: |
|
thumbnail_url = response_json['objekt']['thumbnailImage'] |
|
name = response_json.get('name', 'Unknown') |
|
class_nft = response_json['objekt']['class'] |
|
|
|
|
|
img = fetch_image_with_retries(thumbnail_url) |
|
|
|
|
|
meta = PngImagePlugin.PngInfo() |
|
meta.add_text("name", f"{name} {class_nft}") |
|
|
|
|
|
filename = f"./{folder_name}/{token_id}.png" |
|
img.save(filename, pnginfo=meta) |
|
else: |
|
print(f"Key 'objekt' or 'thumbnailImage' not found in response for token_id {token_id}. Skipping...") |
|
|
|
|
|
|
|
|
|
|