【问题标题】:PubNub - Pushing HTML UpdatesPubNub - 推送 HTML 更新
【发布时间】:2012-03-31 15:31:27
【问题描述】:

我目前正在尝试将 html 更新推送到使用 PubNub 的用户的页面。我想将 html 代码推送给用户(这包括链接、引号、使 html 成为必要),并将其添加到用户表格的末尾。

我目前正在尝试使用api发送消息如下:

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

消息在哪里:

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

我的问题是当我尝试发送页面更新时收到以下消息:

</div> is not JSON serializable

我假设这是因为我正在尝试发送 html 代码?

关于如何解决这个问题/更好的方法来解决这个问题有什么建议吗?这是我第一次尝试将消息“推送”到网页,所以我可能完全错了。

【问题讨论】:

    标签: python html push-notification pubnub


    【解决方案1】:

    您尝试通过 PubNub 发送原始 HTML 并遇到 "JSON not Serializable" 问题。首先,您正确地假设您可以推送 HTML 代码!欢呼。只需确保您放置在"message" 中的数据实际上是一个STRING。以下类型是 JSON 可序列化的:

    1. 对象
    2. 数组
    3. 字符串
    4. 数字

    确保不要发送特殊的 python 类或函数。这些不会序列化。字符串内容可以包括任何UTF-8字符单字节多字节

    将此 Python 用于"message"

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

    【讨论】:

    • 发送 html 代码的最佳方式是什么,因为它包含链接、图像(只是指向图像的链接,它们托管在其他地方)?
    • 感谢您的帮助!我正在使用 BeautifulSoup 解析网页以提取 html 内容,并将其传递给 pubnub.publish 命令。看起来我试图传递给 pubnub.publish 的内容仍然是 BeautifulSoup 对象。我将其转换为字符串,但现在无法发送实际字符串。消息是否存在大小限制或导致此消息静默失败的原因?
    • 1.8KB 是上限。最大消息大小为 1.8KB,有几种方法可以解决这个问题,包括: 1.) 发送元数据而不是整个有效负载。 2.) 将有效负载上传到 S3,通过 PubNub.Publish() 方法发送链接。 3.) 将消息拆分为 1K 块,然后在客户端重新组装。
    • 我不认为我正在尝试的消息大于 1.8KB。我可能会尝试将 html 保存到本地网络服务器,然后将链接推出。您是否碰巧有使用这样的指定 html 文档中的内容更新页面的示例?甚至只是将消息负载文本添加到页面?
    • 好问题!您可以在此处查看使用 PubNub 将 HTML 内容推送到网页或移动设备(例如带有 Webkit Safari 或桌面 Chrome/Firefox/IE 的 iPhone)的示例 - github.com/pubnub/pubnub-api/tree/master/app-showcase/…
    【解决方案2】:

    我不是网络专家,但在我看来,您应该定义一个模型并发送它。然后,您将反序列化模型并更新客户端。这样你就可以使用 JSon 并且不会遇到任何问题。

    如果您绝对必须发送 HTML,则传输 HTML 时的另一个选择是将其编码为 base 64 字符串。使用这种方法,您将在发送之前对字符串进行编码并在接收客户端上对其进行解码。 google上有很多关于编码base64字符串的信息。这可以防止字符串在 HTML 标记等上出错。

    下面是 base64 编码的示例:http://ostermiller.org/calc/encode.html 比如下面的代码:

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

    看起来像这样的 base64 字符串

    PGltZyBzcmM9ImltYWdlcy9teXBpY3R1cmUuanBnIj48L2ltZz4KPGRpdiBpZD0iY2hhdC1ib3gi
    

    Lz4KPHVsPgogIDxsaT5JdGVtIDE8L2xpPgogIDxsaT5JdGVtIDI8L2xpPgo8L3VsPg==

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2019-12-18
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多