2016-08-02 5 views
0

Ich benutze Python, um durch einen Firebase-DB zu gehen, um ein Array von Objekten zurückzugeben, wählen Sie dann eine zufällig und geben Sie ihre Werte zurück. Ich habe eine kleine Test-JSON-DB verwendet, die ich manuell erstellt und in Firebase importiert habe. Wenn ich dies tue, sind die untergeordneten Knoten der DB 0, 1, 2 etc ... Mit dem unten stehenden Code kann ich die Daten durchlaufen und mir die benötigten Daten holen.Wie durchschlinge ich UIDs in Firebase

Ich habe ein CMS erstellt, mit dem ich Daten direkt in Firebase eingeben kann (anstatt ein lokales JSON-Dokument zu importieren), indem ich die Methode push() verwende.

Dementsprechend werden die untergeordneten Knoten verschleierten Zeitstempel, die wie folgt aussehen: K036VOR90fh8sd80, KO698fhs7Hf8sfds etc ...

Jetzt, wenn ich versuche zu for-Schleife durch die Knoten, ich die folgende Fehlermeldung bei ln9caption=....:

TypeError: string indices must be integers

Ich nehme an, dass dies geschieht, weil die Kindknoten jetzt Zeichenfolgen sind. Da muss ich das CMS benutzen - wie schleife ich nun diese Knoten durch?

Code:

if 'Item' in intent['slots']: 
    chosen_item = intent['slots']['Item']['value'] 

    result = firebase.get(chosen_item, None) 

    if result: 
     item_object = [] 
     for item in result: 
      item_object.append(item) 

      random_item = (random.choice(item_object)) 
      caption = random_item['caption'] 
      audio_src = random_item['audioPath'] 

Hier ist eine Annäherung von dem, was die Firebase wie folgt aussieht:

{ 
    "1001" : { 
"-K036VOR90fh8sd80EQ" : { 
    "audioPath" : "https://s3.amazonaws.com/bucket-output/audio/audio_0_1001.mp3", 
    "caption" : "Record 0 from 1001" 
}, 
"-KO698fhs7Hf8sfdsWJS" : { 
    "audioPath" : "https://s3.amazonaws.com/bucket-output/audio/audio_1_1001.mp3", 
    "caption" : "Record 1 from 1001" 
    } 
}, 
"2001" : { 
    "-KOFsPBMKVtwHSOfiDJ" : { 
    "audioPath" : "https://s3.amazonaws.com/bucket-output/audio/audio_0_2001.mp3", 
    "caption" : "Record 0 from 2001" 
}, 
"-KOFsQvwgF9icSIolU" : { 
    "audioPath" : "https://s3.amazonaws.com/bucket-output/audio/audio_1_2001.mp3", 
    "caption" : "Record 1 from 2001" 
    } 
} 
} 
+0

Können Sie einen Link zu der Python-Bibliothek hinzufügen, die Sie für den Zugriff auf Firebase verwenden? –

+0

@FrankvanPuffelen Ja, es ist [Python-Firebase] (https://pypi.python.org/pypi/python-firebase/1.2) – SamYoungNY

Antwort

0

Was getan werden muss, ist das Wörterbuch result des übergeordneten Knoten Streifen mit einem for-loop und die .items() Python-Methode - durch die Schlüssel-Werte (k,v) und .append die Werte (v).

Dies entfernt die result der übergeordneten Firebase Wörterbuchschlüssel, d. H. -KOFsQvwgF9icSIolU.

if 'Item' in intent['slots']: 
    chosen_item = intent['slots']['Item']['value'] 

    result = firebase.get(chosen_item, None) 

    if result: 
     item_object = [] 
     for k,v in result.items(): 
      item_object.append(v) 

      random_item = (random.choice(item_object)) 
      caption = random_item['caption'] 
      audio_src = random_item['audioPath'] 
Verwandte Themen