[Public] Python und Twitter, ein Trauerspiel

Dr Holger Hewener holger at hewener.net
Fr Jun 14 08:13:45 CEST 2013


...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.8
> python-oauth2
> python-twitter-1.0
> setuptools-0.7.2
> simplejson-3.3.0
> 
> [code]
> __author__ = 'Tom'
> 
> import sys
> import time
> import twitter
> import simplejson
> import datetime
> 
> 
> class 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ß Thomas
>> 
>> Am 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
-------------- nächster Teil --------------
Ein Dateianhang mit HTML-Daten wurde abgetrennt...
URL: <http://lists.hacksaar.de/pipermail/public/attachments/20130614/c3139194/attachment.html>


More information about the Public mailing list