Attachment 'ShowTweets-0.4.py'

Download

   1 # -*- coding: iso-8859-1 -*-
   2 u"""
   3     MoinMoin - ShowTweets macro Version 0.4 ALPHA
   4                Displays twitter messages (aka tweeds) from a user
   5 
   6     <<ShowTweets(user="Twitter Username", maxTweets=10)>>
   7 
   8     Exampels:
   9      * <<ShowTweets(twitter)>>
  10 
  11     @copyright: 2009 by MarcelHäfner (http://moinmo.in/MarcelHäfner)
  12     @license: GNU GPL, see COPYING for details.
  13 
  14     Licences for dependencies:
  15      * Python-Twitter is under Apache License, Version 2.0
  16      * simplejson is under MIT License
  17 
  18     Dependencies:
  19      * Python wrapper around the Python API (Python-Twitter):
  20        http://code.google.com/p/python-twitter/
  21      * JSON encoder/decoder for Python (simplejson)
  22        http://pypi.python.org/pypi/simplejson
  23 
  24     @TODO:
  25      1. Better caching for the displayed tweets:
  26         http://apiwiki.twitter.com/Rate-limiting)
  27      2. Authentication without cleartext passwd
  28         http://apiwiki.twitter.com/OAuth-FAQ
  29      3. Better error handling for the urllib, not depending on sys and socket
  30         stuff or atleast optimize the try and except stuff
  31 """
  32 from MoinMoin import wikiutil
  33 from MoinMoin.parser.text_moin_wiki import Parser as WikiParser
  34 import twitter
  35 import socket
  36 import sys
  37 
  38 Dependencies = []  # do cache; or use ['time'] for not caching
  39 
  40 
  41 def errorOutput(macro, errorType, errorMessage):
  42     """
  43     Return a rendered error message
  44     @param errorType: some main error type
  45     @param errorMessage: detail error type
  46     @returns: list
  47     """
  48     request = macro.request
  49     fmt = macro.formatter
  50     _ = request.getText
  51 
  52     errorMsg = []
  53     errorMsg.append(fmt.div(True, css_class="error"))
  54     errorMsg.append(wikiutil.renderText(request, WikiParser, _("/!\ Error Message from Macro [[http://moinmo.in/MacroMarket/ShowTweets|ShowTweets]]!")))
  55     errorMsg.append(fmt.bullet_list(True))
  56     errorMsg.append(fmt.listitem(True))
  57     errorMsg.append(fmt.text(_("Type: %s") % wikiutil.escape(errorType)))
  58     errorMsg.append(fmt.listitem(False))
  59     errorMsg.append(fmt.listitem(True))
  60     errorMsg.append(fmt.text(_("Message: %s") % wikiutil.escape(errorMessage)))
  61     errorMsg.append(fmt.listitem(False))
  62     errorMsg.append(fmt.bullet_list(False))
  63     errorMsg.append(fmt.div(False))
  64     return ''.join(errorMsg)
  65 
  66 
  67 def macro_ShowTweets(macro, user, maxTweets=10):
  68     """
  69     Creates a ordered list with twitter status messages
  70     @param user: username from a twitter account, needed
  71     @param maxTweets: optional, how many tweets should be displayed
  72     """
  73 
  74     #inital stuff
  75     socket.setdefaulttimeout(10)  # timeout set to 10s
  76     request = macro.request
  77     fmt = macro.formatter
  78     _ = request.getText
  79     output = []
  80     tweetNumber = 0
  81 
  82     #You also can use your Twitter Account to request for example privat twitter
  83     #statuses. but be aware, that for the moment you have to put your userdata
  84     #and password in cleartext, so make sure that nobody else can read your
  85     #macro. Change "api = twitter.Api" to
  86     #"api = twitter.Api(username='username', password='password')"
  87     api = twitter.Api()
  88 
  89     #get the messages from twitter or use an exception to display an error msg
  90     try:
  91         statuses = api.GetUserTimeline(user=wikiutil.escape(user), count=maxTweets)
  92     except:
  93         return errorOutput(macro, _("GetUserTimeline"), str(sys.exc_info()[1]))
  94 
  95     #starting tweets output
  96     output.append(fmt.div(True, css_class="ShowTweets"))
  97     output.append(fmt.bullet_list(True))
  98 
  99     #reading tweets
 100     for tweetNumber in range(len(statuses)):
 101         output.append(fmt.listitem(True))
 102         output.append(wikiutil.renderText(request, WikiParser, wikiutil.escape(statuses[tweetNumber].text)))
 103         output.append(fmt.span(True, css_class="date", style="color:Gray; font-size:75%; display:block;"))
 104         output.append(fmt.text(wikiutil.escape(statuses[tweetNumber].created_at)))
 105         output.append(fmt.span(False))
 106         output.append(fmt.listitem(False))
 107 
 108     #check if there is atleast one tweet available for ouput
 109     if tweetNumber < 1:
 110         return errorOutput(macro, _("tweetNumber"), _("Can't find any twitter status message from user '%s'" % user))
 111 
 112     #finishing output
 113     output.append(fmt.bullet_list(False))
 114     output.append(fmt.div(False))
 115     return ''.join(output)

Attached Files

To refer to attachments on a page, use attachment:filename, as shown below in the list of files. Do NOT use the URL of the [get] link, since this is subject to change and can break easily.
  • [get | view] (2009-10-18 23:02:56, 3.6 KB) [[attachment:ShowTweets-0.1.py]]
  • [get | view] (2009-10-20 12:52:55, 3.8 KB) [[attachment:ShowTweets-0.3.py]]
  • [get | view] (2010-05-20 23:46:11, 4.2 KB) [[attachment:ShowTweets-0.4.py]]
  • [get | view] (2013-06-21 09:28:11, 4.6 KB) [[attachment:ShowTweets.py]]
  • [get | view] (2010-05-20 23:53:11, 65.9 KB) [[attachment:output_tweets.png]]
 All files | Selected Files: delete move to page copy to page

You are not allowed to attach a file to this page.