Seite 1 von 1

Python request zum Upload von NFTs via API mit Base64

Verfasst: Sonntag 24. Oktober 2021, 16:05
von GoldenTankIO
Hallo zusammen und jetzt schon einmal Dankeschön fürs Zuhören. Wir hängen leider an einem Problem fest und kommen nicht weiter. Hier schonmal der Code:

Code: Alles auswählen

import pip._vendor.requests
import json
from os import linesep
import base64

from pip._vendor.requests.structures import CaseInsensitiveDict

url = "https://api.nft-maker.io/UploadNft/HERE_STANDS_OUR_API_KEY"

headers = CaseInsensitiveDict()
headers["accept"] = "text/plain"
headers["Content-Type"] = "application/json"

testname = ["arraytest55", "arraytest66"]

counter = 1; 
names = []
nftName = []
nftBase64 = []
nftBase64String = []


for x in range (0,10): 

    if (counter < 10):
        nftName.append 
(fr"C:\Users\Alex1\OneDrive\Desktop\CardaLuck\Python\UploadNFT\GoldfishTicket000{x+1}.jpg")
  
        counter = counter + 1
        continue

    if (counter < 100):
        nftName.append 
(fr"C:\Users\Alex1\OneDrive\Desktop\CardaLuck\Python\UploadNFT\GoldfishTicket00{x+1}.jpg")
    
        counter = counter + 1
        continue

    if (counter < 1000):
        nftName.append 
(fr"C:\Users\Alex1\OneDrive\Desktop\CardaLuck\Python\UploadNFT\GoldfishTicket0{x+1}.jpg")
  
        counter = counter + 1
        continue

    else: 
        nftName.append 
(fr"C:\Users\Alex1\OneDrive\Desktop\CardaLuck\Python\UploadNFT\GoldfishTicket{x+1}.jpg")
 
        counter = counter + 1
        continue




for x in range (0, 10):
    with open(nftName[x], "rb") as image_file:
        names.append(nftName[x])
        nftBase64.append (base64.b64encode(image_file.read()))
        nftBase64[x] = '"' + str(nftBase64) + '"'

   






for x in range(0,5):

     data = """
    {
    "assetName": " """ + names[x] + """ ",
    "previewImageNft": {
        "mimetype": "string",
        "fileFromBase64": """ + nftBase64[x] + """,
        "description": "string",
        "metadataPlaceholder": [
        {
            "name": "string",
            "value": "string"
        }
        ]
     }
    }
    """


    resp = pip._vendor.requests.post(url, headers=headers, data=data)

    print(resp.status_code)
    
Grundlegend wollen mit Hilfe einer API unsere Bilder auf in NFTs umwandeln. Dafür ist es wichtig, dass die Bilder im Base64-Format durch die Python request auf der Seite hochgeladen wird.
Link zur API: https://api.nft-maker.io/swagger/index.html
Wir benutzen nur die Funktion "Upload NFT".
Hierbei haben wir unseren apikey und nftprojectid eingetragen und die curl request zu python formatiert. Dann habe ich alle Bildernamen in einen Array gespeichert und wieder ausgegeben (Was auch funktioniert). Dann habe ich die Bilder in Base64 umgewandelt, was ebenfalls funktioniert. Wenn ich dies dann aber versuche in die Request zu packen, wirft er mir immer 500 internal server error aus. WIr denken, dass es an der Formatierung des base64-string liegen könnte.

Vielen lieben Dank für euere Hilfe!

Re: Python request zum Upload von NFTs via API mit Base64

Verfasst: Sonntag 24. Oktober 2021, 17:12
von Sirius3
Wie kommst Du auf die Idee `requests` über ein inoffizielles Modul aus pip zu importieren?
Man initialisiert keine Variablen auf Vorrat, sondern erst, wenn man sie braucht.
Wenn man Code kopiert und nur eine Kleinigkeit ändert, dann macht man etwas falsch, z.B. indem man eine Funktion sucht, die Zahlen mit 0en auffüllt.
`continue` ist selten sinnvoll, hier hätte elif geholfen.
Du hast ein `x` und `counter`, wobei x immer 1 kleiner ist als counter, was Du dadurch behebst, dass überall x+1 verwendet wird.
Einen Index benutzt man in Python nicht, um auf alle Listenelemente nacheinander zuzugreifen, sondern die for-Schleife geht direkt über die Liste.
Und dann baut man keine Json-Strings händisch zusammen. Du hast doch json importiert, benutzt es aber nicht. Ist auch nicht nötig, weil requests das automatisch macht.

Code: Alles auswählen

import requests
import base64
from pathlib import Path

URL = "https://api.nft-maker.io/UploadNft/HERE_STANDS_OUR_API_KEY"
HEADERS = {
    "accept": "text/plain",
    "Content-Type": "application/json",
}
UPLOADPATH = Path("C:/Users/Alex1/OneDrive/Desktop/CardaLuck/Python/UploadNFT")

def main():
    names = []
    nft_names = [
        UPLOADPATH / f"GoldfishTicket{counter:04d}.jpg"
        for counter in range(1, 11)
    ]

    for name, filename in zip(names, nft_names):
         data = {
            "assetName": name,
            "previewImageNft": {
                "mimetype": "string",
                "fileFromBase64": base64.b64encode(filename.read_bytes()),
                "description": "string",
                "metadataPlaceholder": [
                    {
                        "name": "string",
                        "value": "string"
                    }
                ]
            }
        }
        resp = requests.post(URL, headers=HEADERS, data=data)
        print(resp.status_code)

if __name__ == "__main__":
    main()
Was der genaue Fehler ist, kann man schwierig sagen. Funktionieren denn andere (einfachere) Aufrufe?

Re: Python request zum Upload von NFTs via API mit Base64

Verfasst: Sonntag 24. Oktober 2021, 17:44
von __blackjack__
Da scheint es wohl irgendwo ein schlechtes Beispiel zu geben wo die Leute klauen. Neulich erst Thema mit dem gleichen Import und auch NFT-Kacke: viewtopic.php?f=1&t=53146

Die Frage ist ob man solche Typen nicht einfach daran scheitern lassen sollte. Also die moralische Frage die sich stellt für Luftbuchungen den Planeten zu verheizen.

Re: Python request zum Upload von NFTs via API mit Base64

Verfasst: Sonntag 24. Oktober 2021, 17:48
von __deets__
__blackjack__ hat geschrieben: Sonntag 24. Oktober 2021, 17:44 Da scheint es wohl irgendwo ein schlechtes Beispiel zu geben wo die Leute klauen. Neulich erst Thema mit dem gleichen Import und auch NFT-Kacke: viewtopic.php?f=1&t=53146

Die Frage ist ob man solche Typen nicht einfach daran scheitern lassen sollte. Also die moralische Frage die sich stellt für Luftbuchungen den Planeten zu verheizen.
Genau mein Gedanke. Das ist wirklich ein solch unglaublicher Unfug dieses NFT-Zeug, noch oben auf die eh schon fragwuerdige Blockchain-Nummer drauf...

Re: Python request zum Upload von NFTs via API mit Base64

Verfasst: Sonntag 24. Oktober 2021, 18:13
von GoldenTankIO
Alles am Code funktioniert soweit, nur das finale Hochladen nicht.

Und da hier mehrfach Kritik geäußert worden ist:
Wir releasen unsere NFTs auf der Cardano-Blockchain. Hierbei wird der Planet definitiv nicht "verheizt". Und dass jeder eine Meinung zu NFT und Crypto allgemein hat, ist doch vollkommen ok. Ich habe lediglich um Hilfe beim Code gebeten und wollte keine moralische Diskussion lostreten. Ich wusste nicht, dass man im deutschen Python-Forum scheinbar keine NFT-Fragen stellen sollte.

Re: Python request zum Upload von NFTs via API mit Base64

Verfasst: Sonntag 24. Oktober 2021, 18:31
von __deets__
Niemand hat dir verboten, NFT-Diskussionen loszutreten. Genauso wenig kannst du anderen Nutzern hier vorschreiben, was wir von NFTs halten, und worueber wir so diskutieren, und wem wir aus welchen Gruenden unter die Arme greifen oder nicht. Was im uebrigen erstmal fuer __blackjack__ und mich gilt, ob andere Leute dir helfen, ist davon ebenfalls voellig unbeeinflusst.

Re: Python request zum Upload von NFTs via API mit Base64

Verfasst: Mittwoch 27. Oktober 2021, 17:52
von DasIch
GoldenTankIO hat geschrieben: Sonntag 24. Oktober 2021, 18:13 Wir releasen unsere NFTs auf der Cardano-Blockchain. Hierbei wird der Planet definitiv nicht "verheizt".
Gesellschaftlich trotzdem problematisch da egal ob man proof-of-work, proof-of-stake oder proof-of-space nutzt es letztendlich auf ein proof-of-capital hinausläuft und man für dessen Investition belohnt wird. Durch diese Belohnung ist garantiert das Kapitaleigner immer gewinnen während andere Nutzer gezwungen sind einen größeren Trottel zu finden der nicht nur mehr für die Coins/NFTs bezahlt sondern auch noch was für die Miner übrig lässt.

Außerdem gibt es da natürlich noch die Opportunitätskosten die man hat weil diese Investitionen natürlich auch in die Realwirtschaft gehen könnten z.B. in erneuerbare Energien.

Re: Python request zum Upload von NFTs via API mit Base64

Verfasst: Donnerstag 28. Oktober 2021, 11:16
von DeaD_EyE
Andere pinkeln auf eine Leinwand und bekommen 1e6 € dafür. In die gleiche Kategorie ordne ich NFT ein.
Das durch das Rechnen mehr Strom verbraucht wird, ist mir aber egal. Die Kosten trägt ja der Kunde und der Planet wird dadurch auch nicht explodieren oder so.