[Public] Python und Twitter, ein Trauerspiel

mganster at freenet.de mganster at freenet.de
Fr Jun 14 08:29:01 CEST 2013


das mit den Sensoren sollte gehen. Thomas, danke schonmal dafür. Kannst du mir in etwa sagen, was ich falsch gemacht habe? Da muss dann noch ein bisschen dran gedreht werden, das Ding soll ja Statements aus dem Space raushauen. Und wofür ist die config.json? Was muss da rein?
 
Grüße
Micha
 
-----Ursprüngliche Nachricht-----
 Von: "Dr Holger Hewener" [holger at hewener.net]
 Gesendet: Fr. 14.06.2013 08:13
 An: "Öffentliche Liste Technik Kultur Saar e.V." [public at lists.hacksaar.de]
 Betreff: Re: [Public] Python und Twitter, ein Trauerspiel

...ohne groß da rein geschaut zu haben fände ich es cool ein Hygrometer und einen Helligkeitssensor mit einzubinden. Kann man die da mit auswerten? Hardware könnte per COM Port die Infos senden..Holger
Am 13.06.2013 um 23:24 schrieb Thomas Darimont <thomas.darimont at googlemail.com>:

Hallo zusammen,hier noch für die, die es interessiert ein "kleiner" Twitter-Client für Pflanzen und sonstige Mitteilungsfreudigen Erdbewohner. Dazu benötigt man folgende dependencies:httplib2-0.8python-oauth2python-twitter-1.0setuptools-0.7.2simplejson-3.3.0[code]__author__ = 'Tom'import sysimport timeimport twitterimport simplejsonimport datetimeclass PlantTwitterClient(object):    PLANT_STATE_NEED_WATER = "need_water"    PLANT_STATE_FINE = "fine"    STATE_TO_TWEET_MAP = {        PLANT_STATE_NEED_WATER: "%s hat Durst!"        , PLANT_STATE_FINE: "%s geht es gut!"    }    def __init__(self, configPath):        self.loadConfig(configPath)        self.plantName = self.config["plant"]["name"]        self.plantHealthCheckIntervalInSeconds = self.config["plant"]["healthCheckIntervalInSeconds"]        self.twitterClient = self.newTwitterClient()    def log(self, msg):        now = datetime.datetime.now()        print "[%s]: %s" % (now.strftime("%Y-%m-%d %H:%M"), msg)    def loadConfig(self, configPath):        try:            self.log("Load config from %s" % configPath)            self.config = simplejson.load(open(configPath))        except:            self.log("Could not load config from: %s -> Problem was: %s" % (configPath, sys.exc_info()[0]))            sys.exit(-1)    def newTwitterClient(self):        twitterClient = twitter.Api(consumer_key=self.config["twitter"]["consumer_key"]            , consumer_secret=self.config["twitter"]["consumer_secret"]            , access_token_key=self.config["twitter"]["access_token_key"]            , access_token_secret=self.config["twitter"]["access_token_secret"])        return twitterClient    def readPlantState(self):        #insert code for real sensor reading here :)        #faking random sensor values...        import random        plantState = random.choice((self.PLANT_STATE_NEED_WATER, self.PLANT_STATE_FINE))        return plantState    def composeTweet(self, state):        tweet = self.STATE_TO_TWEET_MAP[state] % (self.plantName)        now = datetime.datetime.now()        return "[%s] %s" % (now.strftime("%H:%M:%S"), tweet)    def sendTweetForState(self, state):        now = datetime.datetime.now()        tweet = self.composeTweet(state)        if self.config["twitter"]["enabled"]:            self.log("Sending Twitter Update: %s" % tweet)            self.twitterClient.PostUpdate(tweet)        else:            self.log("Twitter is disabled - just logging tweet instead: %s" % tweet)    def handlePlantStateChange(self, oldPlantState, newPlantState):        self.log("Plant State Changed! %s -> %s" % (oldPlantState, newPlantState))        self.sendTweetForState(newPlantState)    def run(self):        oldPlantState = None        while True:            try:                newPlantState = self.readPlantState()                if oldPlantState != newPlantState:                    self.handlePlantStateChange(oldPlantState, newPlantState)                oldPlantState = newPlantState                time.sleep(self.plantHealthCheckIntervalInSeconds)            except KeyboardInterrupt:                self.log("Exit [ctrl+c]")                sys.exit(0)            except:                self.log("Unknown Error occured: %s" % sys.exc_info()[0])if __name__ == "__main__":    if len(sys.argv) < 2:        print "Missing config path argument is required!"        print '''Usage:        python PlantTwitterClient.py path/to/config.json        '''        sys.exit(0)    plantTwitterClient = PlantTwitterClient(configPath=str(sys.argv[1]))    plantTwitterClient.run()[/code]Gruß Thomas

Am 13. Juni 2013 21:54 schrieb Thomas Darimont <thomas.darimont at googlemail.com>:
Hallo Michael,wenn du mir mal Bertas Twitter-Credentials schickst kann ich mal danach schauen.Gruß ThomasAm 13.06.2013 21:27 schrieb "Michael Ganster" <mganster at freenet.de>:
Heyho alle miteinander,
 
 wie einige schon wissen, hat unser Space eine neue Bewohnerin, Bertha,
 ein Bogenhanf. Bertha hat auch Twitter. Leider aber keine Arme samt
 Händen und daran hängenden Fingern zum tippen. Also ist Bertha auf
 unsere Hilfe angewiesen. Da unter Umständen immer wieder jemand Anderes
 anwesend ist, wenn Bertha den Zwitscherbefehl erteilt, ist es nicht
 praktikabel, sich immer bei Twitter anzumelden. Es soll also eine
 Bertha-Base her, die nach Antriggern postet, was auch immer gepostet
 werden muss. Realisierbar ist das wohl ganz nett in Python mittels
 Twitter-Modul.
 
 Nunja, im Moment bin ich an den ersten Tests und ich bin sowohl in
 Sachen Twitter als auch in Python ein Anfänger. Daher mal schnell die
 Webtutorials gewälzt, die alle auf die gleiche Quelle verweisen und
 daher alle gleich aussehen und die ich soweit übernommen hab. Alle
 zwischendurch aufgetretenen Fehler sind behoben, das Ding läuft ohne
 Fehler ab. Nur leider erscheint kein Tweet für unseren Bogenhanf. Hier
 mal, was ich so abgesetzt hab:
 
 >>> import twitter
 >>> api = twitter.Api(consumer_key='key_censored', consumer_secret='so
 is this one', access_token_key='no one should care about this',
 access_token_secret='look anywhere else, it's my secret!')
 >>>out = bertha.PostUpdate('Python knows triggering twitter!')
 >>> print out.text
 None
 >>> print out
 {}
 
 
 Es erscheint also weder ein Tweet noch eine Fehlermeldung. Hat
 irgendjemand eine Idee?
 
 LG
 Micha
 
 _______________________________________________
 Public mailing list
 Public at lists.hacksaar.de
 http://lists.hacksaar.de/cgi-bin/mailman/listinfo/public
_______________________________________________
Public mailing list
Public at lists.hacksaar.de
http://lists.hacksaar.de/cgi-bin/mailman/listinfo/public-----Ursprüngliche Nachricht Ende-----


---
Alle Postfächer an einem Ort. Jetzt wechseln und E-Mail-Adresse mitnehmen! Rundum glücklich mit freenetMail
-------------- nächster Teil --------------
Ein Dateianhang mit HTML-Daten wurde abgetrennt...
URL: <http://lists.hacksaar.de/pipermail/public/attachments/20130614/f6ddff9d/attachment.html>


More information about the Public mailing list