2012-03-31 3 views
1

В настоящее время я пытаюсь нажать html-обновления на страницу для пользователя, используя PubNub. Я хочу направить html-код пользователю (сюда входят ссылки, кавычки, необходимые html) и добавить его в конец таблицы для пользователя.PubNub - Push-обновления 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 

Я предполагаю, что это происходит потому, что я атман pting для отправки html-кода?

Любые рекомендации по устранению этих/лучших способов сделать это? Это моя первая попытка «нажимать» сообщения на веб-страницу, поэтому я могу реализовать все это неправильно.

ответ

2

Вы пытаетесь отправить необработанный HTML-код через PubNub и запущен в «JSON not Serializable». Во-первых, вы правы, считая, что вы Можете нажать HTML код! Ура. Просто убедитесь, что данные, которые вы размещаете внутри "message", фактически являются STRING. Следующие типы JSON Сериализуемые:

  1. Объекты
  2. Массивы
  3. Строка
  4. Числа

Убедитесь, чтобы не отправлять специальные классы питона или функцию. Они не будут сериализованы. Содержание струн может содержать любые цифры 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>''' 
+0

Каков наилучший способ отправки html-кода, поскольку он содержит ссылки, изображения (только ссылки на ima ges, они размещены в другом месте)? – xur17

+0

Спасибо за помощь! Я разбираю веб-страницу с помощью BeautifulSoup, чтобы извлечь содержимое html и передать его команде pubnub.publish. Похоже, что контент, который я пытался передать pubnub.publish, все еще был объектом BeautifulSoup. Я преобразовал его в строку, но теперь не удается отправить фактическую строку. Есть ли ограничение по размеру сообщения или что-то, что заставляет это тихо провалиться? – xur17

+0

1.8KB - предел. Максимальный размер сообщения - 1,8 КБ, и есть несколько способов обойти это, в том числе: 1.) Отправка метаданных, а не всей полезной нагрузки. 2.) загрузить полезную нагрузку на S3, отправить ссылку через PubNub.Publish(). 3.) Разделите сообщение на 1 тыс. Кусков и соберите на клиенте. – PubNub

0

Я не веб-эксперт, но мне кажется, что вы должны определить модель и отправить, что вместо этого. Затем вы будете десериализовать модель и обновить клиент. Таким образом, вы можете использовать JSon, и вы не столкнетесь с какими-либо проблемами.

Если вам абсолютно необходимо отправить HTML, другой вариант при передаче HTML - это кодирование в базовой строке 64. При таком подходе вы должны закодировать строку перед ее отправкой и декодировать ее на принимающем клиенте. Существует много информации о кодировке base64 строк в google. Это препятствует тому, чтобы строка отключалась на тегах 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 = =

Смежные вопросы