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.930 ]

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

Varredura de PING Utilizando o Python

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

Reconhecimento de placas de veículos com OpenALPR

Qu1cksc0pe - All-in-One Static Malware Analysis Tool

Como baixar vídeos do Facebook via terminal

  
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