[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