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.You are not allowed to attach a file to this page.