home *** CD-ROM | disk | FTP | other *** search
/ Maximum CD 2012 January / maximum-cd-2012-01.iso / DiscContents / digsby_setup.exe / lib / yahoo / yahooutil.pyo (.txt) < prev    next >
Encoding:
Python Compiled Bytecode  |  2011-10-05  |  8.2 KB  |  216 lines

  1. # Source Generated with Decompyle++
  2. # File: in.pyo (Python 2.6)
  3.  
  4. from __future__ import with_statement
  5. import re
  6. from urllib import unquote_plus
  7. from itertools import izip
  8. from struct import pack, calcsize
  9. from httplib import HTTPConnection
  10. from yahoolookup import ykeys, commands
  11. from logging import getLogger
  12. log = getLogger('yahoo')
  13. info = log.info
  14. from util import odict, threaded
  15. from pprint import pformat
  16. from common.exceptions import LoginError
  17.  
  18. class YahooLoginError(LoginError):
  19.     
  20.     def __init__(self, protocol, message):
  21.         if not isinstance(message, basestring):
  22.             raise TypeError('message must be a string')
  23.         isinstance(message, basestring)
  24.         self.protocol = protocol
  25.         Exception.__init__(self, message)
  26.  
  27.  
  28. _filematch = re.compile('.*/(.+)\\?\\w+')
  29.  
  30. def filename_from_url(url):
  31.     return unquote_plus(_filematch.search(url).group(1))
  32.  
  33. argsep = pack('BB', 192, 128)
  34.  
  35. def to_ydict(d, argsep = argsep):
  36.     if not d:
  37.         return ''
  38.     
  39.     def to_ydict_entry(k, v):
  40.         
  41.         try:
  42.             n = int(k)
  43.         except ValueError:
  44.             
  45.             try:
  46.                 n = ykeys[k]
  47.             log.warning('to_ydict got a dict with a non number key: %s', k)
  48.             return ''
  49.  
  50.  
  51.         if isinstance(v, bytes):
  52.             pass
  53.         elif isinstance(v, (int, long)):
  54.             v = str(v)
  55.         elif not isinstance(v, unicode):
  56.             import warnings
  57.             warnings.warn('yahoo got argument %r of type %r, not unicode' % (v, type(v)))
  58.             v = unicode(v)
  59.         
  60.         v = v.encode('utf-8')
  61.         return ''.join([
  62.             str(n),
  63.             argsep,
  64.             v,
  65.             argsep])
  66.  
  67.     if hasattr(d, 'iteritems'):
  68.         item_iterator = d.iteritems()
  69.     elif isinstance(d, (list, tuple)):
  70.         item_iterator = izip(d[::2], d[1::2])
  71.     
  72.     return (''.join,)((lambda .0: for k, v in .0:
  73. to_ydict_entry(k, v))(item_iterator))
  74.  
  75.  
  76. def from_ydict_iter(data, argsep = argsep):
  77.     if not data:
  78.         return iter([])
  79.     data = data.split(argsep)
  80.     keys = data[::2]
  81.     values = data[1::2]
  82.     values = [ from_utf8(v) for v in values ]
  83.     return izip(keys, values)
  84.  
  85.  
  86. def from_utf8(s):
  87.     if isinstance(s, str):
  88.         s = s.decode('fuzzy utf8')
  89.     
  90.     return s
  91.  
  92.  
  93. def format_packet(data, maxlen = 500, sensitive = False):
  94.     return pformat(items)
  95.  
  96.  
  97. def yiter_to_dict(yiter):
  98.     d = odict()
  99.     for k, v in yiter:
  100.         
  101.         try:
  102.             k = ykeys[k]
  103.         except KeyError:
  104.             pass
  105.  
  106.         d[k] = v
  107.     
  108.     return d
  109.  
  110.  
  111. def from_ydict(data, argsep = argsep):
  112.     d = { }
  113.     for k, v in from_ydict_iter(data, argsep = argsep):
  114.         if k in d:
  115.             log.warning('duplicate %s: %s', k, v)
  116.         
  117.         d[k] = v
  118.     
  119.     return d
  120.  
  121. header_pack = '!4sHHHHiI'
  122. header_desc = (header_pack, 'ymsg', 'version', 'zero', 'size', 'command', 'status', 'session_id')
  123. header_size = calcsize(header_pack)
  124.  
  125. def header_tostr(hdr):
  126.     
  127.     try:
  128.         sv = commands[hdr.command]
  129.     except KeyError:
  130.         log.error('No command string for %s', hdr.command)
  131.         sv = str(hdr.command)
  132.  
  133.     
  134.     try:
  135.         st = commands[hdr.status]
  136.     except KeyError:
  137.         log.error('No status string for %s', hdr.status)
  138.         st = str(hdr.status)
  139.  
  140.     return 'YMSG packet( srv:%s, st:%s, id:%d v:%d, sz:%d )' % (sv, st, hdr.session_id, hdr.version, hdr.size)
  141.  
  142.  
  143. def yahoo_http_post(ydata, cookies, progress_cb = (lambda x: pass)):
  144.     conn = HTTPConnection('filetransfer.msg.yahoo.com')
  145.     conn._http_vsn_str = 'HTTP/1.0'
  146.     conn._http_vsn = 10
  147.     url = 'http://filetransfer.msg.yahoo.com:80/notifyft'
  148.     conn.putrequest('POST', url, skip_host = True, skip_accept_encoding = True)
  149.     conn.putheader('Content-length', str(len(ydata)))
  150.     conn.putheader('Host', 'filetransfer.msg.yahoo.com:80')
  151.     conn.putheader('Cookie', cookies)
  152.     conn.endheaders()
  153.     log.info('putting %d bytes of data...', len(ydata))
  154.     for x in xrange(0, len(ydata), 512):
  155.         conn.send(ydata)
  156.         progress_cb(x)
  157.     
  158.     progress_cb(len(ydata))
  159.     response = conn.getresponse()
  160.     respdata = response.read()
  161.     status = response.status
  162.     log.info('response data %d bytes, status code %s', len(respdata), status)
  163.     conn.close()
  164.     if status != 200:
  165.         log.error('ERROR: POST returned a status of %d', status)
  166.         return False
  167.     info('HTTP POST response status %d', status)
  168.     return True
  169.  
  170. yahoo_http_post = threaded(yahoo_http_post)
  171.  
  172. class Cookie(str):
  173.     
  174.     def __init__(self, s):
  175.         str.__init__(s)
  176.         info('Cookie string %s', s)
  177.         self.params = odict()
  178.         for pair in s.split('&'):
  179.             (key, val) = pair.split('=')
  180.             self.params[key] = val
  181.         
  182.  
  183.     
  184.     def val(self):
  185.         return '&'.join((lambda .0: for k, v in .0:
  186. '%s=%s' % (k, v))(self.params.items()))
  187.  
  188.  
  189.  
  190. def add_cookie(jar, cookiestr):
  191.     spl = cookiestr.find('\t')
  192.     key = cookiestr[:spl]
  193.     value = cookiestr[spl + 1:]
  194.     value = value.split('; ')[0]
  195.     log.info('adding cookie %s: %s', key, value)
  196.     jar[key] = value
  197.  
  198.  
  199. def y_webrequest(url, data, cookies):
  200.     headers = {
  201.         'Cookie': cookies['Y'] + '; ' + cookies['T'],
  202.         'User-Agent': 'Mozilla/4.0 (compatible; MSIE 5.5)',
  203.         'Cache-Control': 'no-cache' }
  204.     import urllib2
  205.     req = urllib2.Request(url, data, headers)
  206.     response = urllib2.urlopen(req)
  207.     return response.read()
  208.  
  209. if __name__ == '__main__':
  210.     cookies = {
  211.         'Y': 'v=1&n=3lutd2l220eoo&l=a4l8dm0jj4hisqqv/o&p=m2l0e8v002000000&r=fr&lg=us&intl=us',
  212.         'T': 'z=3H2OGB3NLPGBQXPLeKgW24v&a=YAE&sk=DAAHHqpEue2zZY&d=YQFZQUUBb2sBWlcwLQF0aXABQldCb2lBAXp6ATNIMk9HQmdXQQ--' }
  213.     data = '<validate intl="us" version="8.1.0.209" qos="0"><mobile_no msisdn="17248406085"></mobile_no></validate>'
  214.     print y_webrequest('http://validate.msg.yahoo.com/mobileno?intl=us&version=8.1.0.209', data, cookies)
  215.  
  216.