Abfrage api Elasticsearch gespeichert in einer Textvariablen verwandeln

Installation und Anwendung von Datenbankschnittstellen wie SQLite, PostgreSQL, MariaDB/MySQL, der DB-API 2.0 und sonstigen Datenbanksystemen.
Antworten
AntoineP
User
Beiträge: 23
Registriert: Donnerstag 6. Juli 2017, 10:57

Halo !

Ich möchte verwandeln die Ausgabe einer API-Abfrage zu einer Textvariable.
Die Abfrage ist gelagert mit ElasticSearch und sieht aus wie :

Code: Alles auswählen

b'{"BTC":{"USD":2403.99},"ETH":{"USD":222.1},"DASH":{"USD":179.04}}'
b'{"BTC":{"USD":2402.89},"ETH":{"USD":222.1},"DASH":{"USD":179.04}}'
...
Und ich möchte bekommen es wie :

Code: Alles auswählen

json_text = """
[
{"BTC":{"USD":2403.99},"ETH":{"USD":222.1},"DASH":{"USD":179.04}},
{"BTC":{"USD":2402.89},"ETH":{"USD":222.1},"DASH":{"USD":179.04}}
]
"""
Tatsächlich verwende ich es in der folgenden Funktion :

Code: Alles auswählen

a = json.loads(json_text)

values = [(each["BTC"].get("USD"), each["ETH"].get("USD"), each["DASH"].get("USD")) for each in a]
Dennoch, wenn Sie eine andere Idee haben, bin ich offen für sie.

Wie es produziert und gespeichert wird

Hier ist wie es produziert die Aufgabe

In der Datei Main.py ich nenne eine Klass Util :

Code: Alles auswählen

import threading
from Elastic import Elastic
import urllib.request
from ValueAnalyse import ValueAnalyse 
class Util:
    def __init__(self):
        pass
    def disp(self,el,call,prices,assets):
        threading.Timer(1, self.disp,[el,call,prices,assets]).start()
        value = urllib.request.urlopen(call).read()
        prices.append(value)
        print(len(prices))
        print("prices : ")
        print(type(prices))
        a = " ".join(str(x) for x in prices)
        print(a)
        va = ValueAnalyse(a)
        el.store(assets,value)
In der Klasse versuche ich, die Ausgabe in Text zu verwandeln.

Aber nicht fuktioniert. Es sieht aus wie der erste Code.
Zuletzt geändert von Anonymous am Donnerstag 13. Juli 2017, 14:13, insgesamt 1-mal geändert.
Grund: Quelltext in Python-Codebox-Tags gesetzt.
BlackJack

@AntoineP: Also mir ist da jetzt nicht klar was Du bekommst und was Du haben möchtest.

Du bekommst von der Webanfrage Bytes. Falls die ein JSON-Dokument darstellen, möchtest Du das wahrscheinlich dekodieren. Die Funktion dafür kennst Du ja schon: `json.loads()`.

Die `Util`-”Klasse” macht als Klasse keinen Sinn. Das ist ja einfach nur eine Funktion in eine Klasse gesteckt.

Das mit dem `Timer` der in Konkurrenz zur Webanfrage und Verarbeitung steht sieht fehlerhaft aus. Wenn da eine Webanfrage mal ungefähr eine Sekunde ”hängen” sollte, dann muss man sich sehr sicher sein das die Reihenfolge in `prices` nicht ganz so wichtif ist, `ValueAnalyse` eine reine Funktion ist, und die `store()`-Methode threadsicher ist und auch dort die Reihenfolge der Aufrufe nicht wichtig ist.
AntoineP
User
Beiträge: 23
Registriert: Donnerstag 6. Juli 2017, 10:57

@BlackJack Du bist richtig mit die `Util`-”Klasse” macht als Klasse keinen Sinn. Noch, bis jetzt `json.loads()` geht nicht darum, den JSON-Text zu lesen :

Code: Alles auswählen

b'{"BTC":{"USD":2403.99},"ETH":{"USD":222.1},"DASH":{"USD":179.04}}'
b'{"BTC":{"USD":2402.89},"ETH":{"USD":222.1},"DASH":{"USD":179.04}}'
...
Ich denke, es gibt genug kann trygh Daten, wenn Sie versuchen wollen. Ansonsten ist hier das GitHub-Repository mit dem Quellcode der Datei.: https://github.com/antoinecomp/projetFi ... er/Util.py.

Deshalb wollte ich es umwandeln.

Eine code das könnte funktionieren

Code: Alles auswählen

json_text = "[" + ','.join([e.decode("utf-8") for e in elastic_data]) + ']'
Antworten