Thursday, January 14, 2010

google wave için sansür robotu denemesi

Belirlenen kelimeler yazılıp gönderildiğinde istenen alternatifleri ile değiştiren robottur.
(yazılıp gönderilmeden önce yazılır yazılmaz da yapılabilir ancak çok yavaş oldu o zaman).

Hızlıca ilk adımları atlıyorum
(Google App Engine Launcher sahibi olmalısınız ki zatn bedava bir uygulama onu bir indirin. Bu uygulamayı öyle deploy ediyorum ben)
1. Google App Engine bir uygulama oluştur (ben tayyarrobotfiltre yaptım)
2. waveapi (python) indir
3. tayyarrobotfiltre dizini içine waveapiyi kopyala
4. App.yaml oluştur :
application: tayyarrobotfiltre
version: 1
runtime: python
api_version: 1

handlers:
- url: /_wave/.*
  script: main.py
  
- url: /assets
  static_dir: assets
 
- url: /argo.txt
  static_files: argo.txt
  upload: argo.txt

5. argo.txt diye bir dosya (ana dizine) oluşturun. İçinde "dict" oluşturun şunun gibi (içeriğini arttırın tabi. bu bir deneme) :

'salak': 's****', 'salakca':'s****', 'aptal':'a*****'

(aslında xml ile yapmak isterdim ama python çok yeni bir dil bana. siz isterseniz genişletebilirsiniz.)


6. ve python kodumuz da şöyle main.py


# -*- coding: utf-8 -*-
#!/usr/bin/python
# Copyright (C) 2010  Hasan Tayyar BEŞİK
# tayyar.besik@gmail.com


import re
import urllib2


from waveapi import events
from waveapi import model
from waveapi import robot
from waveapi.document import Range



def replace_all(text, dic):
    for i, j in dic.iteritems():
        text = text.replace(i, j)
    return text


def OnBlipSubmitted(properties, context):
 """Invoked when a Blip is submitted to the wave."""
 blip = context.GetBlipById(properties['blipId'])
 contents = blip.GetDocument().GetText()
 dic1 = {'manyak':'m***k','okuz':'o***z','aptal':'a***l','mongol':'****','yalaka':'******','salak':'******'} 

 response = urllib2.urlopen('http://tayyarrobotfiltre.appspot.com/argo.txt')
 #dic = eval('{%s}' % open("/argo.txt","r").read())
 dic = eval('{%s}' % response.read().encode('utf-8'))

 newcontents = replace_all(contents,dic)
 if newcontents != contents:
  blip.GetDocument().SetText(newcontents)
 #blip.GetDocument().SetText(dic)
 #blip.GetDocument().SetText(response.read())
 
def OnDocumentChanged(properties, context):
        """Invoked when the document is edited."""
        pass

def OnRobotAdded(properties, context):
        """Invoked when the robot has been added."""
        root_wavelet = context.GetRootWavelet()
        root_wavelet.CreateBlip().GetDocument().SetText("Merhaba; Ben bir robotum. Konuşmalardaki kötü ifadeleri kaldırırım.  ;)")

if __name__ == '__main__':
        myRobot = robot.Robot('Tayyar Robot Filtreleme',
                        image_url='http://tayyarrobotfiltre.appspot.com/assets/icon.png',
                        version='2',
                        profile_url='http://tayyarrobotfiltre.appspot.com/assets/profile.html')
        myRobot.RegisterHandler(events.BLIP_SUBMITTED, OnBlipSubmitted)
        myRobot.RegisterHandler(events.DOCUMENT_CHANGED, OnDocumentChanged)
        myRobot.RegisterHandler(events.WAVELET_SELF_ADDED, OnRobotAdded)
        myRobot.Run()


No comments: