Resposta embutida do robô do Google Wave
-
21-09-2019 - |
Pergunta
Recentemente, tenho trabalhado no meu primeiro robô para o Google Wave, uma parte vital do que ele faz é inserir respostas embutidas em um BLIP. Não posso para a minha vida descobrir como fazer isso!
Os documentos da API têm uma função InsertinlineBlip O que parecia promissor, no entanto, chamando isso não parece fazer nada!
Edit :: Parece que este é um bug conhecido. No entanto, a questão ainda está sendo a maneira correta de inserir um Blip em linha? Estou assumindo algo assim:
inline = blip.GetDocument().InsertInlineBlip(positionInText)
inline.GetDocument().SetText("some text")
Solução
Se você olhar para o Código fonte por OpBasedDocument.InsertInlineBlip()
Você verá o seguinte:
412 - def InsertInlineBlip(self, position):
413 """Inserts an inline blip into this blip at a specific position.
414
415 Args:
416 position: Position to insert the blip at.
417
418 Returns:
419 The JSON data of the blip that was created.
420 """
421 blip_data = self.__context.builder.DocumentInlineBlipInsert(
422 self._blip.waveId,
423 self._blip.waveletId,
424 self._blip.blipId,
425 position)
426 # TODO(davidbyttow): Add local blip element.
427 return self.__context.AddBlip(blip_data)
Eu acho que o comentário do TODO sugere que esse recurso ainda não está ativo. O método deve ser chamável e retornar corretamente, no entanto, suspeito que a operação do documento não seja aplicada ao documento global.
A sintaxe que você incluiu na sua postagem parece correta. Como você pode ver acima, InsertInlineBlip()
Retorna o valor do AddBlip()
, que é ... Dun, Dun, Dun ... um Blip.
543 - def AddBlip(self, blip_data):
544 """Adds a transient blip based on the data supplied.
545
546 Args:
547 blip_data: JSON data describing this blip.
548
549 Returns:
550 An OpBasedBlip that may have operations applied to it.
551 """
552 blip = OpBasedBlip(blip_data, self)
553 self.blips[blip.GetId()] = blip
554 return blip
Editar: é interessante notar que a assinatura do método do método de inserção InsertInlineBlip(self, position)
é significativamente diferente do método de inserção InsertElement(self, position, element)
. InsertInlineBlip()
não leva um parâmetro de elemento a ser inserido. Parece a lógica atual para InsertInlineBlip()
é mais parecido Blip.CreateChild()
, que devolve um novo filho com o qual trabalhar. A partir disso, podemos suspeitar que essa API mudará à medida que a funcionalidade é adicionada.
Outras dicas
Pode ser um possível incomodar.
Parece ter sido um bug anteriormente, no entanto, uma atualização hoje a consertou:http://code.google.com/p/google-wave-resources/wiki/waveapischangelog