示例#1
0
    def __init__(self, http=None):
        self.http = http or TornadoHTTPClient()

        if not http:
            self.http.set_user_agent(
                "Mozilla/5.0 (X11; Linux x86_64) AppleWebKit/537.36 (KHTML, like Gecko) Ubuntu Chromium/28.0.1500.71 Chrome/28.0.1500.71 Safari/537.36"
            )
            self.http.debug = getattr(config, "TRACE", False)
            self.http.validate_cert = False
            self.http.set_global_headers({"Accept-Charset": "UTF-8,*;q=0.5"})

        self.url = "http://www.simsimi.com/func/reqN"
        self.params = {
            "lc": "zh",
            "ft": 0.0,
            "fl": "http://www.simsimi.com/talk.htm"
        }
        self.ready = False

        self.fetch_kwargs = {}
        if config.SimSimi_Proxy:
            self.fetch_kwargs.update(proxy_host=config.SimSimi_Proxy[0],
                                     proxy_port=config.SimSimi_Proxy[1])

        self._setup_cookie()
示例#2
0
文件: smartrobot.py 项目: pyzh/robot
 def __init__(self, http = None):
     self.http = http or TornadoHTTPClient()
     #self.http.debug=True
     self.result=[]
     self.statment=[]
     self.helpkeyword=['?',u'怎么',u'什么',u'鸭子','ee',u'好了','YY','yy',u'神马',u'啊',u'?',u'是么',u'依依',u'EE',u'BSD鸭子',u'能不能',u'多少',u'么']
     pass
示例#3
0
文件: hub.py 项目: pyzh/robot
    def __init__(self,
                 qid,
                 pwd,
                 client=None,
                 debug=False,
                 handle_msg_image=True):
        self.handle_msg_image = handle_msg_image
        self.http = TornadoHTTPClient()
        self.http.set_user_agent(
            "Mozilla/5.0 (X11; Linux x86_64) AppleWebKit/537.36"
            " (KHTML, like Gecko) Ubuntu Chromium/28.0.1500.71 "
            "Chrome/28.0.1500.71 Safari/537.36")
        self.http.validate_cert = False
        self.http.set_global_headers({"Accept-Charset": "UTF-8,*;q=0.5"})
        self.http.debug = debug

        self.qid = qid
        self.__pwd = pwd
        self.client = client

        self.rc = random.randrange(0, 100)
        self.aid = 1003903  # aid 固定
        self.clientid = random.randrange(11111111, 99999999)  # 客户端id 随机固定
        self.msg_id = random.randrange(11111111, 99999999)  # 消息id, 随机初始化
        self.daid = 164
        self.login_sig = None
        self.ptwebqq = None
        self.nickname = u"YouWillNeverGetIt"
        self.vfwebqq = None
        self.psessionid = None
        self.stop_poll = False

        # 检查是否验证码的回调
        self.ptui_checkVC = lambda *r: r

        # 是否需要验证码
        self.require_check = None
        self.require_check_time = None

        # 是否开始心跳和拉取消息
        self.poll_and_heart = None
        self.login_time = None
        self.hThread = None

        # 验证图片
        self.checkimg_path = tempfile.mktemp(".jpg")
        self._lock_path = tempfile.mktemp()
        self._wait_path = tempfile.mktemp()

        self.group_sig = {}  # 组签名映射, 用作发送临时消息(sess_message)

        self.message_interval = 0.5  # 消息间隔
        self.last_msg_time = time.time()
        self.last_msg_content = None
        self.last_msg_numbers = 0  # 剩余位发送的消息数量
        WebQQRequest.hub = self
        self.connecting = False
示例#4
0
    def find_next(self):
        pprint('Start recover cookie')
        s = TornadoHTTPClient(force_instance = True)

        with open('cookie.txt') as f:
            cookie_str = f.read()

        s.set_global_headers({ 'Cookie': cookie_str })

        resp = yield s.get('http://ehire.51job.com/CommonPage/JobsPostNumbList.aspx')
        pprint('End   recover cookie')

        bs = BeautifulSoup(resp.body, "html.parser")
        pprint(bs.find('b', {'class': 'info_att'}).text)
示例#5
0
文件: webqq_bak.py 项目: udbmnm/twqq
    def __init__(self, qid, pwd, handler = None):
        self.qid = qid               # QQ 号
        self.__pwd = pwd             # QQ密码
        self.nickname = None         # 初始化QQ昵称
        self.http = TornadoHTTPClient()
        self.http.set_user_agent("Mozilla/5.0 (X11; Linux x86_64) AppleWebKit/537.36 (KHTML, like Gecko) Ubuntu Chromium/28.0.1500.71 Chrome/28.0.1500.71 Safari/537.36")
        self.http.debug = TRACE
        self.http.validate_cert = False
        self.http.set_global_headers({"Accept-Charset": "UTF-8,*;q=0.5"})
        self.msg_dispatch = MessageDispatch(self)

        self.rc = random.randrange(0, 100)

        self.aid = 1003903                                    # aid 固定
        self.clientid = random.randrange(11111111, 99999999)  # 客户端id 随机固定
        self.msg_id = random.randrange(11111111, 99999999)     # 消息id, 随机初始化

        self.require_check = False   # 是否需要验证码
        self.poll_and_heart = False  # 开始拉取消息和心跳

        # 初始化WebQQ登录期间需要保存的数据
        self.check_code = None
        self.ptwebqq = None

        self.require_check_time = None  # 需要验证码的时间

        self.checkimg_path = os.path.join(os.path.abspath(os.path.dirname(__file__)), "check.jpg")

        self.friend_info = {}        # 初始化好友列表
        self.group_info = {}         # 初始化组列表
        self.group_sig = {}          # 组签名映射, 用作发送临时消息(sess_message)
        self.group_members_info = {} # 初始化组成员列表
        self.mark_to_uin = {}        # 备注名->uin的映射

        self.daid = 164
        self.login_sig = None

        self.login_time = None       # 登录的时间
        self.last_msg_time = time.time()
        self.last_msg_content = None
        self.last_msg_numbers = 0    # 剩余位发送的消息数量

        self.status_callback = None

        self.poll_stoped = True      # 获取消息是否停止
        self.hThread = None               # 心跳线程
        #self.base_header = {"Referer":"https://d.web2.qq.com/cfproxy.html?v=20110331002&callback=1"}
        self.base_header = {"Referer":"http://s.web2.qq.com/proxy.html?v=20110412001&callback=1&id=3"}
示例#6
0
    def __init__(self, qid, pwd):
        self.qid = qid  # QQ 号
        self.__pwd = pwd  # QQ密码
        self.nickname = None  # 初始化QQ昵称
        self.http = TornadoHTTPClient()
        self.http.set_user_agent(
            "Mozilla/5.0 (X11; Linux x86_64) AppleWebKit/537.36 (KHTML, like Gecko) Ubuntu Chromium/28.0.1500.71 Chrome/28.0.1500.71 Safari/537.36"
        )
        self.http.debug = DEBUG
        self.http.validate_cert = False
        self.http.set_global_headers({"Accept-Charset": "UTF-8,*;q=0.5"})
        self.msg_dispatch = MessageDispatch(self)

        self.rc = random.randrange(0, 100)

        self.aid = 1003903  # aid 固定
        self.clientid = random.randrange(11111111, 99999999)  # 客户端id 随机固定
        self.msg_id = random.randrange(1111111, 99999999)  # 消息id, 随机初始化

        self.require_check = False  # 是否需要验证码
        self.poll_and_heart = False  # 开始拉取消息和心跳

        # 初始化WebQQ登录期间需要保存的数据
        self.check_code = None
        self.ptwebqq = None

        self.check_data = None  # 初始化检查时返回的数据
        self.blogin_data = None  # 初始化登录前返回的数据

        self.friend_info = {}  # 初始化好友列表
        self.group_info = {}  # 初始化组列表
        self.group_sig = {}  # 组签名映射, 用作发送临时消息(sess_message)
        self.group_members_info = {}  # 初始化组成员列表

        self.hb_time = int(time.time() * 1000)
        self.daid = 164
        self.login_sig = None

        self.login_time = None  # 登录的时间
        self.last_group_msg_time = time.time()
        self.last_msg_content = None
        self.last_msg_numbers = 0  # 剩余位发送的消息数量
        self.base_header = {
            "Referer":
            "https://d.web2.qq.com/cfproxy.html?v=20110331002&callback=1"
        }
示例#7
0
    def __init__(self, http=None):
        self.http = http or TornadoHTTPClient()

        if not http:
            self.http.set_user_agent(
                "Mozilla/5.0 (X11; Linux x86_64) AppleWebKit/537.36 (KHTML, like Gecko) Ubuntu Chromium/28.0.1500.71 Chrome/28.0.1500.71 Safari/537.36"
            )
            self.http.validate_cert = False
            self.http.set_global_headers({"Accept-Charset": "UTF-8,*;q=0.5"})

        self.url = "rest://www.simsimi.com/func/reqN"
        self.params = {"lc": "ch", "ft": 0.0}
        self.ready = False

        self.fetch_kwargs = {}
        self.fetch_kwargs.update(proxy_host='192.168.13.19', proxy_port='7777')

        t = threading.Thread(target=self._setup_cookie())
        t.start()
示例#8
0
文件: smartrobot.py 项目: pyzh/robot
#        print 'is match'
        if type == "g" or type=="s" or type=="b":
            print 'search'
            if self.searcher.find(content):
                result=self.searcher.search(content)
                if result>=0 :
                    print 'result count:',result
                    
                    return True
        else:
            self.content = content
            return True
        return False
        pass
if __name__ == "__main__":
    c=TornadoHTTPClient()
    #c.start()
    robot=SmartRobotPlugin(None,None,None,None)
    #while True:
  
    if robot.is_match(111, 'ss?', 'g')==True:
        data=robot.get_result()
        print "data:",data,type(data)
    else:
        print 'no found'
    c=TornadoHTTPClient()
    s=Searcher(c)
    c.start()
    #s.baidu_search('ss')
    c.stop()
#     
示例#9
0
class Command(object):
    http = TornadoHTTPClient()
    _sim_try = {}
    simsimi_proxy = False

    def url_info(self, url, callback, isredirect=False):
        """ 获取url信息
        Arguments:
            `url`   -   链接
            `callback`  -   发送消息的回调
            `isredirect` -   是否是重定向
        """
        _url_info = partial(self._url_info,
                            callback=callback,
                            url=url,
                            isredirect=isredirect)
        self.http.get(url, callback=_url_info)

    def _url_info(self, resp, callback, url, isredirect=False):
        """ 读取url_info的回调 """
        meta_charset = re.compile(
            br'<meta\s+http-equiv="?content-type"?'
            '\s+content="?[^;]+;\s*charset=([^">]+'
            ')"?\s*/?>|<meta\s+charset="?([^">/"]+'
            ')"?\s*/?>', re.IGNORECASE)
        body = ""
        content = resp.body
        c_type = resp.headers.get("Context-Type", "text/html")
        if resp.code in [200]:
            if c_type == "text/html":
                charset = meta_charset.findall(content)
                logging.info("Found charset {0!r} in url {1}".format(
                    charset, url))
                if len(charset) == 1 and len(charset[0]) == 2:
                    charset = charset[0][0] if charset[0][0] else charset[0][1]
                else:
                    charset = ""

                if charset.lower().strip() == "gb2312":
                    charset = "gbk"

                if charset:
                    ucont = content.lower().decode(charset).encode(
                        "utf-8").decode("utf-8")
                else:
                    ucont = content.lower().decode("utf-8")
                parser = etree.HTML(ucont)
                title = parser.xpath(u"//title")
                title = title[0].text if len(title) >= 1 else None
                if title:
                    body += u"网页标题: " + title.replace("\r", "").replace(
                        "\n", "")
                if isredirect:
                    body += u"(重定向到:{0})".format(url)
        elif resp.code in [302, 301]:
            dst = resp.headers.get("Location")
            self.url_info(dst, callback, True)
        else:
            body = u"({0} {1} {2})".format(url, resp.code,
                                           httplib.responses[resp.code])

        if body:
            callback(body)

    def _eurl_info(self, errcode, errmsg, url, callback):
        """ 处理url_info错误 """
        body = u"({0} {1})".format(url, errmsg)
        callback(body)

    def py(self, code, callback):
        """ 执行Python代码
        Arguments:
            `code`      -   要执行的代码
            `callback`  -   发送消息的回调
        """
        url = "http://pythonec.appspot.com/run"
        #url = "http://localhost:8080/run"
        params = [("code", code.encode("utf-8"))]

        read_py = partial(self.read_py, callback=callback)
        self.http.post(url, params, callback=read_py)

    def read_py(self, resp, callback):
        """ 读取执行Python代码的返回 """
        data = resp.body
        try:
            result = json.loads(data)
            status = result.get("status")
            if status:
                content = u"OK: " + result.get("out")
            else:
                content = u"ERR: " + result.get("err")

        except ValueError:
            logging.warn(traceback.format_exc())
            content = u"我出错了, 没办法执行, 我正在改"
        callback(content)

    def shell(self, session, statement, callback):
        """ 实现Python Shell
        Arguments:
            `session`   -   区别用户的shell
            `statement` -   Python语句
            `callback`  -   发送结果的回调
        """
        if statement.strip() in ["cls", "clear"]:
            url = "http://pythonec.appspot.com/drop"
            params = [
                ("session", session),
            ]
        else:
            url = "http://pythonec.appspot.com/shell"
            #url = "http://localhost:8080/shell"
            params = [("session", session),
                      ("statement", statement.encode("utf-8"))]

        def read_shell(resp, callback):
            data = resp.body
            if not data:
                data = "OK"
            callback(data.decode("utf-8"))
            return

        callback = partial(read_shell, callback=callback)
        self.http.get(url, params, callback=callback)

    def paste(self, code, callback, typ="text"):
        """ 贴代码 """
        url = "http://paste.linuxzen.com"
        params = [("class", typ), ("code", code.encode("utf-8")),
                  ("paste", "ff")]

        callback = partial(self.read_paste, oldurl=url, callback=callback)
        self.http.post(url, params, callback=callback)

    def read_paste(self, resp, oldurl, callback):
        """ 读取贴代码结果, 并发送消息 """
        if resp.code == 302:
            url = resp.headers.get("Location")
        else:
            url = resp.effective_url
        if url != oldurl:
            content = url
            callback(content)

    def teach(self, say, response):
        url = "http://paste.linuxzen.com/bot/teach"
        params = (("say", say.encode("utf-8")), ("res",
                                                 response.encode("utf-8")))
        logging.info(u"Teach our bot {0}/{1}".format(say, response))
        self.http.get(url, params)

    def talk(self, say, callback):
        url = "http://paste.linuxzen.com/bot/talk"
        params = (("say", say.encode("utf-8")), )

        def callback(resp):
            data = resp.body
            r = json.loads(data)
            if r.get("status"):
                callback(r.get("response"))
            else:
                self.simsimi(say, callback)

        self.http.get(url, params, callback=callback)

    def simsimi(self, content, callback):
        """ simsimi 小黄鸡 """
        msg_url = "http://www.simsimi.com/func/req"
        msg_params = (("msg", content.encode("utf-8")), ("lc", "ch"))
        headers = {
            "Referer": "http://www.simsimi.com/talk.htm?lc=ch",
            "X-Requested-With": "XMLHttpRequest"
        }

        def read_simsimi(resp):
            result = resp.body
            if result:
                try:
                    response = json.loads(result)
                    res = response.get("response")

                    if is_black_msg(res):
                        return self.simsimi(content, callback)

                    if not res or (res and
                                   res.startswith("Unauthorized access!.")):
                        if not self._sim_try.has_key(content):
                            self._sim_try[content] = 0
                        if self._sim_try.get(content) < 10:
                            logging.warn(
                                "SimSimi error with response {0}".format(res))
                            self._sim_try[content] += 1
                            self.simsimi(content, callback)
                        else:
                            self._sim_try[content] = 0
                            callback(u"T^T ip被SimSimi封了, 无法应答")
                        return
                    else:
                        self._sim_try[content] = 0
                        callback(res)
                        self.teach(content, res)
                except ValueError:
                    logging.warn(traceback.format_exc())
                    logging.warn(
                        "SimSimi error with response {0}".format(result))
                    #self.simsimi(content, callback)
                    callback(u"呵呵")

        kw = {"headers": headers, "callback": read_simsimi}
        if SimSimi_Proxy:
            kw.update(proxy=SimSimi_Proxy)

        self.http.get(msg_url, msg_params, **kw)

    def cetr(self, source, callback, web=False):
        """ 调用有道接口进行英汉互译 """
        key = YOUDAO_KEY
        keyfrom = YOUDAO_KEYFROM
        source = source.encode("utf-8")
        url = "http://fanyi.youdao.com/openapi.do"
        params = [("keyfrom", keyfrom), ("key", key), ("type", "data"),
                  ("doctype", "json"), ("version", 1.1), ("q", source)]

        callback = partial(self.read_cetr, callback=callback, web=web)
        self.http.get(url, params, callback=callback)

    def read_cetr(self, resp, callback, web):
        """ 读取英汉翻译的结果 """
        """
        try:
            buf = StringIO(source)
            with gzip.GzipFile(mode = "rb", fileobj = buf) as gf:
                data = gf.read()
        except:
            logging.warn(traceback.format_exc())
            data = source
        """

        try:
            result = json.loads(resp.body)
        except ValueError:
            logging.warn(traceback.format_exc())
            body = u"error"
        else:
            errorCode = result.get("errorCode")
            if errorCode == 0:
                query = result.get("query")
                r = " ".join(result.get("translation"))
                basic = result.get("basic", {})
                body = u"{0}\n{1}".format(query, r)
                phonetic = basic.get("phonetic")
                if phonetic:
                    ps = phonetic.split(",")
                    if len(ps) == 2:
                        pstr = u"读音: 英 [{0}] 美 [{1}]".format(*ps)
                    else:
                        pstr = u"读音: {0}".format(*ps)
                    body += u"\n" + pstr

                exp = basic.get("explains")
                if exp:
                    body += u"\n其他释义:\n\t{0}".format(u"\n\t".join(exp))

                if web:
                    body += u"\n网络释义:\n"
                    web = result.get("web", [])
                    if web:
                        for w in web:
                            body += u"\t{0}\n".format(w.get("key"))
                            vs = u"\n\t\t".join(w.get("value"))
                            body += u"\t\t{0}\n".format(vs)

            if errorCode == 50:
                body = u"无效的有道key"

        if not body:
            body = u"没有结果"

        callback(body)

    def send_msg(self, msg, callback, nick=None):
        if len(msg) <= MAX_LENGTH:
            body = nick + msg if nick else msg
            callback(body)
        else:
            callback = partial(self.send_msg, callback=callback, nick=nick)
            self.paste(msg, callback)
示例#10
0
 def setUp(self):
     self.http = TornadoHTTPClient()
     self.http.debug = True
示例#11
0
 def setUp(self):
     super(TornadoHTTPClientCoroutineTest, self).setUp()
     self.http = TornadoHTTPClient()
     self.http.debug = True
示例#12
0
 def __init__(self, message_bus):
     self._message_bus = message_bus  # 消息总线
     self._logger = get_logger()  # 日志
     self._http_stream = TornadoHTTPClient()
     self._honor = Honor()
示例#13
0
        if (content.startswith("<") and content.endswith(">")) or\
           (content.startswith(u"《") and content.endswith(u"》")):
            self._name = content.strip("<").strip(">").strip(u"《")\
                    .strip(u"》")

            if not self._name.strip():
                return False

            if self.douban is None:
                self.douban = DoubanReader(self.http)
            return True
        return False


    def handle_message(self, callback):
        self.douban.search(self._name, callback)

if __name__ == "__main__":
    from tornadohttpclient import TornadoHTTPClient
    def cb(b):
        print b
    douban = DoubanReader(TornadoHTTPClient())
    douban.search(u"百年孤独", cb)
    douban.search(u"鸟哥的私房菜", cb)
    douban.search(u"论语", cb)
    douban.search(u"寒战", cb)
    douban.search(u"阿凡达", cb)
    douban.search(u"创战记", cb)
    douban.search(u"简单爱", cb)
    TornadoHTTPClient().start()
示例#14
0
    def find(self):
        pprint('Into tornadohttpclient')
        s = TornadoHTTPClient(force_instance = True)

        pprint('Start login')
        f = yield s.get('http://ehire.51job.com')
        soup = BeautifulSoup(f.body, "html.parser")
        hidAccessKey = soup.find('input', {'name': 'hidAccessKey'})['value']
        fksc = soup.find('input', {'name': 'fksc'})['value']
        hidEhireGuid = soup.find('input', {'name': 'hidEhireGuid'})['value']

        headers = {
            'Accept': 'text/html,application/xhtml+xml,application/xml;q=0.9,image/webp,*/*;q=0.8',
            'Content-Type': 'application/x-www-form-urlencoded',
            'Origin': 'http://ehire.51job.com',
            'Referer': 'http://ehire.51job.com/MainLogin.aspx',
            'User-Agent': 'Mozilla/5.0 (Macintosh; Intel Mac OS X 10_11_5) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/53.0.2785.143 Safari/537.36'
        }
        data = {'ctmName': '大岂网络',
                'userName': '******',
                'password': '******',
                'oldAccessKey': hidAccessKey,
                'langtype': 'Lang=&Flag=1',
                'sc': fksc,
                'ec': hidEhireGuid,
                'isRememberMe': 'True'
                }
        res = yield s.post('https://ehirelogin.51job.com/Member/UserLogin.aspx', data=data, headers=headers)
        pprint('End login')

        pprint('Start force')
        try:
            soup = BeautifulSoup(res.body, "html.parser")
            viewState = soup.find('input', {'name': '__VIEWSTATE'})['value']
            partURL = soup.find('form', {'id': 'form1'})['action']
    
            URL = 'http://ehire.51job.com/Member/' + partURL
            headers = {
                'Accept': 'text/html,application/xhtml+xml,application/xml;q=0.9,image/webp,*/*;q=0.8',
                'Content-Type': 'application/x-www-form-urlencoded',
                'Origin': 'http://ehire.51job.com',
                'Referer': URL,
                'User-Agent': 'Mozilla/5.0 (Macintosh; Intel Mac OS X 10_11_5) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/53.0.2785.143 Safari/537.36'
            }
            data = {'__EVENTTARGET': 'gvOnLineUser',
                    '__EVENTARGUMENT': 'KickOut$0',
                    '__VIEWSTATE': viewState
                    }
            res = yield s.post(URL, data=data, headers=headers)
        except: pass # 有时不需要下线
        pprint('End force')

        pprint('Start fetch remain')
        resp = yield s.get('http://ehire.51job.com/CommonPage/JobsPostNumbList.aspx')
        pprint('End   fetch remain')

        bs = BeautifulSoup(resp.body, "html.parser")
        pprint(bs.find('b', {'class': 'info_att'}).text)

        pprint('###Cookie###')
        pprint(s.cookie)

        with open('cookie.txt', 'w') as f:
            f.write(s.cookie)
示例#15
0
#!/usr/bin/env python
#coding=utf8
from tornado import gen
from tornado.ioloop import IOLoop

from tornadohttpclient import TornadoHTTPClient
import json
# 实例化
http = TornadoHTTPClient()

@gen.coroutine
def get():
    headers = dict((("content-type","application/json"),("Accept-Charset","utf8"),("Authorization","token F017254EAF208C462C8D4ABCBC27F1DD7CB8DA65FF70B063CF16E90AA35BAE7FAF360C87D0617ED7723DC64FC8CA6A47438F5BED9FC60C303DF3AFAAE2C44A8FAE961E8999B43C820615D9489DA0AB178368A3F9CA7640CA755283A67E8D9CC13DA55AFD48606621E37C601A52E64C94530C92D468CF5A72DE68C0F7230103F400A855997086CE4E4E357BB887D0B08C6D5238EA6B5487E0231A10B38650FEE92D14264704D3FC1C80AC6675612E41C17A73D9283470A0C1FBB8C089106169AB6C179C296D073F09FDB1822646AE5B76D458CC433C1F4829AC2DACE160F851188951ED2BF00CA6E4AA53CFCC659C100F53669EB2C9F4DDAA5BBB1C5D8E98EFB720C94AA3") ))
    # 发出get请求
    # response = yield #http.post("http://ipsapro.isoftstone.com:8081/api/user/login",'{"strUser":"******","strPwd":"e10adc3949ba59abbe56e057f20f883ee10adc3949ba59abbe56e057f20f883e"}',headers=headers)

    response = yield http.post("http://ipsapro.isoftstone.com:8081/api/Department/GetDepartment",'',headers=headers);
    # print(response.body)
    fo = open("department.txt", "wb")
    #j=json.loads(response.body)
    #str_json=json.dumps(j['departments'],encoding="gbk",ensure_ascii=False)
    str_json=response.body
    fo.write(str_json)
IOLoop.instance().run_sync(get)