[Public] Python und Twitter, ein Trauerspiel

mganster at freenet.de mganster at freenet.de
Fr Jun 14 09:06:55 CEST 2013


okay, ich nehm alles zurück und behaupte das Gegenteil, config.json ist ja okay, aber irgendwie steig ich noch nicht überall durch. Können wir uns am Mittwoch mal noch kurz zusammensetzen, Thomas?
 
LG
Micha
 
-----Ursprüngliche Nachricht-----
 Von: "Thomas Darimont" [thomas.darimont at googlemail.com]
 Gesendet: Do. 13.06.2013 23:24
 An: "Öffentliche Liste Technik Kultur Saar e.V." [public at lists.hacksaar.de]
 Betreff: Re: [Public] Python und Twitter, ein Trauerspiel

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
-----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/40016045/attachment.html>


More information about the Public mailing list