Wave Robots API v2 & Third Party Integration

Robots, Gadgets, Embed »
Pamela Fox

Robots
"events": [
        {
            "type": "WAVELET_SELF_ADDED",
            "modifiedBy": "pamela.fox@wavesandbox.com",
            "timestamp": 1269400482868,
            "properties": {
                "blipId": "b+FYYeTpCXJ"
            }
        }
    ],
    "wavelet": {
        "creationTime": 1269400451853,
        "lastModifiedTime": 1269400482868,
        "version": 14,
        "participants": [
            "pamela.fox@wavesandbox.com",
            "wave-skimmy@appspot.com"
        ],
        "creator": "pamela.fox@wavesandbox.com",
        "rootBlipId": "b+FYYeTpCXJ",
        "title": "Dear Diary,",
        "waveId": "wavesandbox.com!w+FYYeTpCXI",
        "waveletId": "wavesandbox.com!conv+root"
    },
  {"params": {
            "blipId": "b+FYYeTpCXJ",
            "waveletId": "wavesandbox.com!conv+root",
            "waveId": "wavesandbox.com!w+FYYeTpCXI",
            "modifyAction": {
                "modifyHow": "REPLACE",
                "elements": [
                    {
                        "type": "IMAGE",
                        "properties": {
                            "url": "http://wave-skimmy.appspot.com/smile.gif"
                        }
                    }
                ]
            },
            "modifyQuery": {
                "textMatch": ":)",
                "maxRes": -1
            }
        },
        "method": "document.modify",
        "id": "op2"
    }
Events
Operations
Robot
Wave
Wave
http://geo-bot.appspot.com/_wave/robot/jsonrpc
Google Wave
import logging

from waveapi import appengine_robot_runner
from waveapi import element
from waveapi import events
from waveapi import ops
from waveapi import robot

anim_base = 'http://wave-skimmy.appspot.com'
anim_ext = '.gif'
emoticons = {
  ':)' : 'smile',
  ':(' : 'frown',
  '(heart)': 'heart'
  }

def ProcessBlip(event, wavelet):
  blip = event.blip
  for emoticon in emoticons:
    r = blip.all(emoticon)
    if r:
      r.replace(element.Image(anim_base + emoticons[emoticon] + anim_ext))
  pass

if __name__ == '__main__':
  skimmy = robot.Robot('Skimmy', 
    image_url='http://wave-skimmy.appspot.com/public/half.png', 
    profile_url='http://wave-skimmy.appspot.com/public/menu.htm')
  skimmy.register_handler(events.BlipSubmitted, ProcessBlip)
  skimmy.register_handler(events.WaveletSelfAdded, ProcessBlip)
  appengine_robot_runner.run(skimmy, debug=True)
3rd Party Integration
Proxying-For
Active
robot.setup_oauth(credentials.CONSUMER_KEY,
    credentials.CONSUMER_SECRET,
    server_rpc_base='http://sandbox.gmodules.com/api/rpc') 


wavelet.proxyFor('douwe').reply('\n').append('Hello');
robot.register_profile_handler(ProfileHandler)

def ProfileHandler(name):
  if name == 'douwe':
     return {'name': 'Douwe',
                   'imageUrl': 'http://twitter.com/douwe.gif',
                   'profileUrl': 'http://douweosinga.com'}
wave = robot.new_wave(domain='wavesandbox.com',
    participants=['someguy@wavesandbox.com',]) 
wave.title = 'Some wave'
robot.submit(wave)

wave = self._sinky.fetch_wavelet(wave.wave_id, wave.wavelet_id)
cron:
- description: tweet update
  url: /web/cron
  schedule: every 1 minutes


class CronHandler(webapp.RequestHandler):
  def get(self):
    waves = models.SearchWave.all()
    for wave in waves:
      blind_wave = self.robot.blind_wavelet(wave_json)
      search_term = blind_wave.data_documents['twitsearchterm']
      tweets = GetTweets(search_term)
      for tweet in tweets:
        blind_wave.root_blip.at(0).insert(tweet.text)
      robot.submit(blind_wave)
Twitter Search Bot
def onWaveletSelfAdded(event, wavelet):
 wavelet.data_documents['twitsearchterm'] = 'pirate'
 wave = models.SearchWave()
 wave.wave_json = simplejson.dumps(wavelet.serialize())
 wave.put()

<cronentries>
  <cron>
    <url>/send_wave_updates?projectId=wave-api&type=daily</url>
    <description>Send daily wave-api digest</description>
    <schedule>every 2 minutes</schedule>
  </cron>
  <cron>
    <url>/send_wave_updates?projectId=wave-api&type=weekly</url>
    <description>Send daily wave-api digest</description>
    <schedule>every monday 08:30</schedule>
    <timezone>America/New_York</timezone>
  </cron>
</cronentries>
public class SendWaveUpdates extends HttpServlet {

 public void doGet(HttpServletRequest req, HttpServletResponse resp) throws IOException {
    wavelet = robot.newWave(robot.getDomain(), defaultParticipants);
    wavelet.setTitle("Wave API Digest");

    for (ForumPost entry : entries) {
      String entryTitle = entry.getTitle();
      String id = entry.getId();
      rootBlip.append(entryTitle + "\n");

      end = start + line.length();
      BlipContentRefs.range(rootBlip, start, end).annotate("link/wave", entry.getId());
      start = end;
    }

    robot.submit(wavelet, robot.getRpcServerUrl());
  }
}
Forum Botty Digest

Loading comments...

Please log in to add your comment.

Report abuse

More presentations by Pamela Fox

More prezis by author