home *** CD-ROM | disk | FTP | other *** search
/ Maximum CD 2009 June / maximum-cd-2009-06.iso / DiscContents / digsby_setup.exe / lib / yahoo / yahooutil.pyo (.txt) < prev    next >
Encoding:
Python Compiled Bytecode  |  2009-02-26  |  7.7 KB  |  207 lines

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