| 193 | |
| 194 | |
| 195 | class ArticleReply(WechatReply): |
| 196 | TEMPLATE = u""" |
| 197 | <xml> |
| 198 | <ToUserName><![CDATA[{target}]]></ToUserName> |
| 199 | <FromUserName><![CDATA[{source}]]></FromUserName> |
| 200 | <CreateTime>{time}</CreateTime> |
| 201 | <MsgType><![CDATA[news]]></MsgType> |
| 202 | <ArticleCount>{count}</ArticleCount> |
| 203 | <Articles>{items}</Articles> |
| 204 | </xml> |
| 205 | """ |
| 206 | |
| 207 | ITEM_TEMPLATE = u""" |
| 208 | <item> |
| 209 | <Title><![CDATA[{title}]]></Title> |
| 210 | <Description><![CDATA[{description}]]></Description> |
| 211 | <PicUrl><![CDATA[{picurl}]]></PicUrl> |
| 212 | <Url><![CDATA[{url}]]></Url> |
| 213 | </item> |
| 214 | """ |
| 215 | |
| 216 | def __init__(self, message, **kwargs): |
| 217 | super(ArticleReply, self).__init__(message, **kwargs) |
| 218 | self._articles = [] |
| 219 | |
| 220 | def add_article(self, article): |
| 221 | if len(self._articles) >= 10: |
| 222 | raise AttributeError("Can't add more than 10 articles in an ArticleReply") |
| 223 | else: |
| 224 | self._articles.append(article) |
| 225 | |
| 226 | def render(self): |
| 227 | items = [] |
| 228 | for article in self._articles: |
| 229 | items.append(ArticleReply.ITEM_TEMPLATE.format( |
| 230 | title=article.title, |
| 231 | description=article.description, |
| 232 | picurl=article.picurl, |
| 233 | url=article.url, |
| 234 | )) |
| 235 | self._args["items"] = ''.join(items) |
| 236 | self._args["count"] = len(items) |
| 237 | return ArticleReply.TEMPLATE.format(**self._args) |
| 238 | |
| 239 | |
| 240 | class GroupTransferReply(WechatReply): |