Alimentando Desktopcouch com Zeitgeist

Zeitgeist é um indexador de atividades, gerando informações sobre aplicações acessadas, músicas tocadas, etc.
Desktopcouch é (ou era) a parte de sincronização do Ubuntu One. Este artigo demonstra como criar uma extensão para o
Zeitgeist que alimente o Desktopcouch. Desta forma, as informações do Zeitgeist puderam ser acessadas remotamente.

[ Hits: 16.980 ]

Por: Hugo Ribeiro em 08/03/2012 | Blog: https://github.com/hugosenari/


Do evento Zeitgeist para o CouchDB



O Desktopcouch, como já dito, usa CouchDB como banco de dados, isto quer dizer, que suas informações são acessadas em formato 'json', ou como para quem utiliza a implementação em Python do Desktopcouch 'Record' que funciona como um 'dict'.

Você pode acessar suas informações do Desktopcouch abrindo no navegador de arquivos:

-> $HOME/.local/share/desktop-couch/couchdb.html

Ou:

-> file:///home/{username}/.local/share/desktop-couch/couchdb.html

Como a ideia do Desktopcouch é sincronização entre várias aplicações, novamente a ideia de ontologia é utilizada. Primeiro se define um padrão e provê uma URI para ela.

Existem alguns padrões predefinidos no site do Desktopcouch.

Para este caso em específico, será criado um novo formato, que nada mais é do que o 'Event' do Zeitgeist em formato 'dict'.

zeitgeist_event = { 'record_type':'https://github.com/hugosenari/zeitgeist-extensions/wiki/ZeitgeistEvent', //pode utilizar outra uri 'id':'event_id', //apos ser registrado o evento ganha um id no zeitgeist 'actor':'uri application do evento', 'interpretation':'uri do que é o evento', 'manifestation':'uri de evento o evento aconteceu', 'timestamp':'quando ocorreu o evento em timestamp', 'subject': [ { 'interpretation': 'uri interpretation do subject', 'manifestation': 'uri manifestation do subject', 'origin':'local de origem: geralmente mesmo que uri/../', 'storage': 'local'||'net'||'deleted'||'<UUID of volume>', 'text': 'text do subject', 'uri': 'uri do subject', } ], 'application_annotations':{ // podem ir informações especificas da aplicação que esta sincronizando ou usando } }


Para o Event da página anterior ser convertido neste record a cima temos o seguinte script:

record = { 'application_annotations':{ 'zeitgeist': { 'profile': 'username' } 'actor': event.get_actor() 'id': int(event.get_id()) 'interpretation': event.get_interpretation() 'manifestation': event.get_manifestation() 'origin': event.get_origin() 'payload': event.get_payload() 'timestamp': int(event.get_timestamp()) 'subjects': [] } } for subject in event.get_subjects(): sub = {} if subject.get_interpretation(): sub['interpretation'] = subject.get_interpretation() if subject.get_manifestation(): sub['manifestation'] = subject.get_manifestation() if subject.get_mimetype(): sub['mimetype'] = subject.get_mimetype() if subject.get_origin(): sub['origin'] = subject.get_origin() if subject.get_storage(): sub['storage'] = subject.get_storage() if subject.get_text(): sub['text'] = subject.get_text() if subject.get_uri(): sub['uri'] = subject.get_uri() record['subjects'].append(sub)


E finalmente, para armazenar esta informação no Desktopcouch, como a maioria das bases de dados, primeiro se conecta ao banco, em seguida envia o dado.

O que pode ser feito da seguinte forma:

from desktopcouch.records.server import DesktopDatabase from desktopcouch.records.record import Record as CouchRecord #conecta no banco #caso o banco não exista ele cria, quando passado o create=True, ele não recria se já existir couchdb = DesktopDatabase('zeitgeist', create=True) #converte o dict anterior para um Record couchrecord = CouchRecord( #o dict record, #a uri do formato a ser armazenado 'https://github.com/hugosenari/zeitgeist-extensions/wiki/ZeitgeistEvent' ) #insere no banco couchdb.put_record(couchrecord)


Você pode criar teu próprio formato, entretanto, fica este como base de algumas das informações contidas no Event. Base, pois um Event pode ter outras informações.

Por exemplo, o 'payload', um campo reservado para dados binários. Um versão diferente deste código pode registar este 'payload' como sendo um anexo do documento no CouchDB.

Existe um bom tutorial sobre outras sincronizações para o Desktopcounch: http://arstechnica.com - Guides.

Muito do artigo do link acima, se inspira neste, mas eu prefiro incluir minhas informações no Zeitgeist para torná-las ainda mais úteis.
Página anterior     Próxima página

Páginas do artigo
   1. Introdução
   2. Ontologia, as informações do Zeitgeist
   3. Do evento Zeitgeist para o CouchDB
   4. Recuperação e Espera de Novos Eventos
   5. Juntando os pontos
Outros artigos deste autor
Nenhum artigo encontrado.
Leitura recomendada

Python Flask Básico

Como criar um keylogger em Python

Splash Screen para Inkscape

Programe em Python no jogo Minecraft com seu filho ou sozinho

Introdução a Threads e como implementá-las em Python

  
Comentários
[1] Comentário enviado por hugosenari em 09/05/2012 - 05:01h

Para quem se interessar em sincronizar isto e outras coisas (principalmente agora que ubnutu one não da mais suporte para couchdb), encontrei um servidor gratúito com couchdb https://www.alwaysdata.com/plans/shared/

Bem legal, tem outras coisas também (servidor python ...).


Contribuir com comentário




Patrocínio

Site hospedado pelo provedor RedeHost.
Linux banner

Destaques

Artigos

Dicas

Tópicos

Top 10 do mês

Scripts