[Public] Python und Twitter, ein Trauerspiel

Thomas Darimont thomas.darimont at googlemail.com
Di Jun 18 13:45:33 CEST 2013


Hallo Michael,

klar kein Problem :) Dann bis Mittwoch.

Gruß Thomas


Am 14. Juni 2013 09:06 schrieb <mganster at freenet.de>:

> **
>
> 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.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 <#13f41844de5ad2f3_>>:
>
>>  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<#13f41844de5ad2f3_>>:
>>
>>
>> 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 <#13f41844de5ad2f3_>
>>> 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<http://email.freenet.de/produkte/basic/index.html>
>
> _______________________________________________
> 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/20130618/05850d9c/attachment.html>


More information about the Public mailing list