A meno di due mesi dal rilascio delle prime
API per Google Buzz,
John Panzer ha già annunciato l'introduzione di altre nuove feature. La più importante, nonché la più richiesta, è sicuramente
firehose. Con questo strumento si vuole rendere disponibile in real time tutte le attività pubblicate e condivise grazie a
pubsubhubbub.
Già parecchi partner come
Collecta,
OneRiot,
Gnip e altri hanno aderito a questa novità. Un'applicazione, ispirata da
Twisori, è già nata sfruttando questa nuova opportunità:
buzz-mood. L'idea è quella di pescare tra gli aggiornamenti di
Buzz, accomunarli secondo un piccolo insieme di topic o
bucket (
love,
hate e altro) e presentarli a video in maniera
random.
Il codice in Python,
disponibile per chi vuole cimentarsi in questo strumento, è molto semplice. Ecco riportato come gestire gli update pubblicati (ma sono disponibili anche
altre azioni) da
pubsubhubbub, inclusa la classe (
Mood) per lo storage locale dei dati.
from google.appengine.ext import db
BUCKETS = [
'i love',
'i hate',
'i want',
'i think',
'i believe',
'i feel',
'i wish',
'i hope'
]
PATTERN = re.compile(r'b(%s)b' % '|'.join(BUCKETS), re.IGNORECASE)
class Mood(db.Model):
name = db.StringProperty(required=True)
last_summary = db.TextProperty(required=False)
last_content = db.TextProperty(required=False)
last_modified = db.DateTimeProperty(auto_now=True)
counter = db.IntegerProperty(default=0)
def assign(summary, content):
//altro codice
FIREHOSE = "https://www.googleapis.com/buzz/v1/activities/@all/@public"
HUB = "http://pubsubhubbub.appspot.com/"
//altro codice
class PubsubhubbubUpdatesHandler(webapp.RequestHandler):
def get(self):
import mood
moods = mood.Mood.all().fetch(len(mood.BUCKETS))
if moods:
lm = max([m.last_modified for m in moods])
else:
lm = datetime.datetime.now()
# Intentional loss of precision
lm = datetime.strptime(lm.strftime(DATE_FORMAT), DATE_FORMAT)
ims = None
if self.request.headers.get('If-Modified-Since'): ims = datetime.strptime(
self.request.headers.get('If-Modified-Since'), DATE_FORMAT
)
if not ims or (ims and lm > ims):
json = simplejson.dumps([{ "name": m.name,
"lastSummary": m.last_summary,
"lastContent": m.last_content,
"lastModified": m.last_modified.isoformat(),
"counter": m.counter
} for m in moods])
logging.info(json)
self.response.headers[ 'Content-Type' ] =
'application/json; charset=utf-8'
# Locale-independent
self.response.headers[ 'Last-Modified' ] = lm.strftime(DATE_FORMAT)
self.response.out.write(json)
else:
self.response.set_status(304)
Tra le altre novità pubblicate troviamo anche i
commenti degli utenti user, un feed che segnala i commenti fatti, i famosi
Like, e un contatore di condivisione, il quale indica quante volte un elemento pubblico è stato condiviso da altri.