2012-03-31 15 views
1

Ich versuche derzeit, HTML-Updates auf eine Seite für einen Benutzer mit PubNub zu pushen. Ich möchte HTML-Code an den Benutzer (dies enthält Links, Zitate, HTML-Code erforderlich), und fügen Sie es an das Ende einer Tabelle für den Benutzer.PubNub - Pushing HTML Updates

Ich bin derzeit versucht, die api zu verwenden, um eine Nachricht zu senden, wie folgt:

info = pubnub.publish({ 
     'channel' : 'myChannel', 
     'message' : { 
     'some_text' : message 
     } 
    }) 

Wo Nachricht ist:

<div class="content">Message text here.<img src="image.gif" border="0" alt="" title="laugh out loud" class="inlineimg" /></div> 

Mein Problem ist, dass ich die folgende Mitteilung erhalte, wenn ich versuche, um eine Seitenaktualisierung zu senden:

</div> is not JSON serializable 

Ich gehe davon aus, dass dies geschieht, weil ich versucht werde pting, um HTML-Code zu senden?

Irgendwelche Empfehlungen, wie man diese/bessere Möglichkeiten, dies zu tun, zu beheben? Dies ist mein erster Versuch, Nachrichten an eine Webseite zu "pushen", also kann ich das alles falsch umsetzen.

Antwort

2

Sie versuchen, raw HTML über PubNub zu senden und in das "JSON nicht Serializable" Problem zu laufen. Erstens sind Sie richtig in der Annahme, dass Sie Code Codedrücken können! Hurra. Stellen Sie nur sicher, dass die Daten, die Sie innerhalb der "message" platzieren, tatsächlich eine STRING sind. Folgende Typen sind JSON Serializable:

  1. Objekte
  2. Arrays
  3. Strings
  4. Zahlen

Achten Sie darauf, nicht spezielle Python Klassen oder Funktionen zu schicken. Diese werden nicht serialisiert. Der String-Inhalt kann einen beliebigen UTF-8 Zeichen Einzelbyte und Multibyte enthalten.

verwenden Python für die "message":

message = '''<div class="content">Message text here.<img src="image.gif" border="0" alt="" title="laugh out loud" class="inlineimg" /></div>''' 
+0

Was ist der beste Weg, um den HTML-Code zu senden, da es Links, Bilder (nur Links zu ima ges, sie sind woanders gehostet)? – xur17

+0

Danke für die Hilfe! Ich analysiere eine Webseite mit BeautifulSoup, um den HTML-Inhalt zu extrahieren und an den Befehl pubnub.publish zu übergeben. Es sieht so aus, als wäre der Inhalt, den ich an pubnub.publish weitergeben wollte, immer noch ein BeautifulSoup-Objekt. Ich konvertierte es in eine Zeichenfolge, aber jetzt ist es nicht möglich, die tatsächliche Zeichenfolge zu senden. Gibt es eine Größenbeschränkung für die Nachricht oder etwas, das dazu führt, dass dies im Hintergrund fehlschlägt? – xur17

+0

1,8 KB ist die Grenze. Die maximale Nachrichtengröße beträgt 1,8 KB und es gibt einige Möglichkeiten, dies zu umgehen, einschließlich: 1.) Senden von Meta-Daten anstelle der gesamten Nutzlast. 2.) Lade die Payload auf S3 hoch, sende den Link über die PubNub.Publish() Methode. 3.) Teilen Sie die Nachricht in 1K Chunks und bauen Sie sie auf dem Client neu zusammen. – PubNub

0

Ich bin kein Web-Experte, aber für mich klingt wie Sie ein Modell definieren sollte und dass stattdessen senden. Sie würden dann das Modell deserialisieren und den Client aktualisieren. Auf diese Weise können Sie JSon verwenden und es treten keine Probleme auf.

Wenn Sie unbedingt den HTML-Code senden müssen, besteht eine weitere Möglichkeit bei der Übertragung von HTML darin, ihn in eine Base-64-Zeichenfolge zu codieren. Mit diesem Ansatz hätten Sie die Zeichenfolge vor dem Senden codiert und auf dem empfangenden Client dekodiert. Es gibt viele Informationen zum Codieren von Base64-Strings bei Google. Dadurch wird verhindert, dass die Zeichenfolge bei HTML-Tags und Ähnlichem stolpert.Hier

ist ein Beispiel dafür, was Codierung und von base64 wie folgt aussieht: http://ostermiller.org/calc/encode.html Zum Beispiel der folgende Code:

<img src="images/mypicture.jpg"></img> 
<div id="chat-box"/> 
<ul> 
    <li>Item 1</li> 
    <li>Item 2</li> 
</ul> 

würde wie folgt aussehen als base64 String

PGltZyBzcmM9ImltYWdlcy9teXBpY3R1cmUuanBnIj48L2ltZz4KPGRpdiBpZD0iY2hhdC1ib3gi 

Lz4KPHVsPgogIDxsaT5JdGVtIDE8L2xpPgogIDxsaT5JdGVtIDI8L2xpPgo8L3VsPg = =