]>
jfr.im git - irc/rizon/acid.git/blob - pyva/src/main/python/esim/api/feed.py
6 from BaseHTTPServer
import BaseHTTPRequestHandler
7 from decimal
import Decimal
8 from StringIO
import StringIO
9 from urlparse
import urlparse
10 from xml
.dom
.minidom
import Element
11 from xml
.dom
.minidom
import parse
13 class InputError(Exception):
14 def __init__(self
, msg
):
20 class FeedError(Exception):
21 def __init__(self
, e
):
22 if hasattr(e
, 'code'):
26 self
.msg
= 'not found.'
28 self
.msg
= 'this e-Sim API feed is unavailable.'
30 self
.msg
= 'e-Sim server has encountered an unexpected error.'
32 self
.msg
= 'invalid response from e-Sim server. Try again later.'
34 self
.msg
= 'e-Sim API feed is temporarily unavailable. Try again later.'
36 self
.msg
= 'something went wrong while connecting to e-Sim API feed (%s)' % BaseHTTPRequestHandler
.responses
[e
.code
][0]
40 elif hasattr(e
, 'reason'):
44 self
.msg
= 'connection to e-Sim API feed timed out. Try again later.'
53 if e
== 'No citizen with such name':
54 self
.msg
= 'Requested citizen was not found. @c3@bNote:@o names are case sensitive @errsep @bCiTizeN@b is not the same as @bcitizen@b.'
55 elif e
== "No JSON object could be decoded":
56 self
.msg
= 'e-Sim API feed is temporarily unavailable. Try again later.'
67 def __init__(self
, value
):
69 raise InputError('Invalid feed input.')
71 if isinstance(value
, str) or isinstance(value
, unicode):
73 opener
= urllib2
.build_opener()
74 opener
.addheaders
= [('User-Agent', 'Rizon e-Sim bot - www.rizon.net')]
75 feed
= opener
.open(value
.replace(' ', '%20'), timeout
=20)
76 self
._html
= feed
.read()
78 except urllib2
.URLError
, e
:
81 raise InputError('Invalid feed input type.')
88 raise InputError('Invalid feed input.')
90 if isinstance(value
, basestring
):
91 feed
= HtmlFeed(value
)
93 return json
.load(StringIO(feed
.html()))
97 raise InputError('Invalid feed input type.')