Python request zum Upload von NFTs via API mit Base64

Wenn du dir nicht sicher bist, in welchem der anderen Foren du die Frage stellen sollst, dann bist du hier im Forum für allgemeine Fragen sicher richtig.
Antworten
GoldenTankIO
User
Beiträge: 2
Registriert: Sonntag 24. Oktober 2021, 15:56

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!
Sirius3
User
Beiträge: 18276
Registriert: Sonntag 21. Oktober 2012, 17:20

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?
Benutzeravatar
__blackjack__
User
Beiträge: 14069
Registriert: Samstag 2. Juni 2018, 10:21
Wohnort: 127.0.0.1
Kontaktdaten:

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.
“Vir, intelligence has nothing to do with politics!” — Londo Mollari
__deets__
User
Beiträge: 14545
Registriert: Mittwoch 14. Oktober 2015, 14:29

__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...
GoldenTankIO
User
Beiträge: 2
Registriert: Sonntag 24. Oktober 2021, 15:56

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.
__deets__
User
Beiträge: 14545
Registriert: Mittwoch 14. Oktober 2015, 14:29

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.
DasIch
User
Beiträge: 2718
Registriert: Montag 19. Mai 2008, 04:21
Wohnort: Berlin

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.
Benutzeravatar
DeaD_EyE
User
Beiträge: 1243
Registriert: Sonntag 19. September 2010, 13:45
Wohnort: Hagen
Kontaktdaten:

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.
sourceserver.info - sourceserver.info/wiki/ - ausgestorbener Support für HL2-Server
Antworten