Abfrage api Elasticsearch gespeichert in einer Textvariablen verwandeln

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

Abfrage api Elasticsearch gespeichert in einer Textvariablen verwandeln

Beitragvon AntoineP » Donnerstag 13. Juli 2017, 11:43

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 :

  1. json_text = """
  2. [
  3. {"BTC":{"USD":2403.99},"ETH":{"USD":222.1},"DASH":{"USD":179.04}},
  4. {"BTC":{"USD":2402.89},"ETH":{"USD":222.1},"DASH":{"USD":179.04}}
  5. ]
  6. """


Tatsächlich verwende ich es in der folgenden Funktion :

  1. a = json.loads(json_text)
  2.  
  3. 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 :

  1. import threading
  2. from Elastic import Elastic
  3. import urllib.request
  4. from ValueAnalyse import ValueAnalyse
  5. class Util:
  6.     def __init__(self):
  7.         pass
  8.     def disp(self,el,call,prices,assets):
  9.         threading.Timer(1, self.disp,[el,call,prices,assets]).start()
  10.         value = urllib.request.urlopen(call).read()
  11.         prices.append(value)
  12.         print(len(prices))
  13.         print("prices : ")
  14.         print(type(prices))
  15.         a = " ".join(str(x) for x in prices)
  16.         print(a)
  17.         va = ValueAnalyse(a)
  18.         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 BlackJack am Donnerstag 13. Juli 2017, 14:13, insgesamt 1-mal geändert.
Grund: Quelltext in Python-Codebox-Tags gesetzt.
Benutzeravatar
BlackJack
Moderator
Beiträge: 32710
Registriert: Dienstag 25. Januar 2005, 23:29
Wohnort: Berlin
Kontaktdaten:

Re: Abfrage api Elasticsearch gespeichert in einer Textvariablen verwandeln

Beitragvon BlackJack » Donnerstag 13. Juli 2017, 14:32

@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.
“XML combines all the inefficiency of text-based formats with most of the unreadability of binary formats :-)” — Oren Tirosh, c.l.p, 2002
AntoineP
User
Beiträge: 10
Registriert: Donnerstag 6. Juli 2017, 10:57

Re: Abfrage api Elasticsearch gespeichert in einer Textvariablen verwandeln

Beitragvon AntoineP » Montag 17. Juli 2017, 15:01

@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/projetFinance/blob/master/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]) + ']'

Zurück zu „Datenbankprogrammierung mit Python“

Wer ist online?

Mitglieder in diesem Forum: 0 Mitglieder