[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