[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