Python асинхронный httprequest - PullRequest
5 голосов
/ 18 марта 2012

Я пытаюсь использовать Twitter-сервис поиска в Python.Я хочу вызвать веб-сервис, например:

http://search.twitter.com/search.json?q=blue%20angels&rpp=5&include_entities=true&result_type=mixed

из моей программы на Python.

Может кто-нибудь сказать мне

  1. , как использовать объект xmlhttprequstв питоне

  2. как передать ему параметры, а

  3. как получить данные в словаре.

Вот моя попытка:

import urllib
import sys
url = "http://search.twitter.com/search.json?q=blue%20angels&rpp=5&include_entities=true&result_type=mixed"
urlobj = urllib.urlopen(url)
data = urlobj.read()
print data

Спасибо.

Ответы [ 2 ]

8 голосов
/ 18 марта 2012

Вам не нужен "асинхронный httprequest", чтобы использовать API поиска в Твиттере:

import json
import urllib
import urllib2

# make query
query = urllib.urlencode(dict(q="blue angel", rpp=5, include_entities=1,
                              result_type="mixed"))  
# make request
resp = urllib2.urlopen("http://search.twitter.com/search.json?" + query)

# make dictionary (parse json response)
d = json.load(resp)

Вероятно, есть несколько библиотек, которые обеспечивают хороший интерфейс OO для этих запросов http.

Чтобы сделать несколько запросов одновременно, вы можете использовать gevent:

import gevent
import gevent.monkey; gevent.monkey.patch_all() # patch stdlib

import json
import urllib
import urllib2

def f(querystr):
    query = urllib.urlencode(dict(q=querystr, rpp=5, include_entities=1,
                                  result_type="mixed"))
    resp = urllib2.urlopen("http://search.twitter.com/search.json?" + query)
    d = json.load(resp)
    print('number of results %d' % (len(d['results']),))

jobs = [gevent.spawn(f, q) for q in ['blue angel', 'another query']]
gevent.joinall(jobs) # wait for completion
4 голосов
/ 18 марта 2012

Я бы порекомендовал проверить запросы и его async модуль .

Простой запрос:

import json
import requests

params = {'rpp': 5, 'include_entities': 1, 'result_type': 'mixed',
          'q': 'blue angel'}

r = requests.get('http://search.twitter.com/search.json', params=params)

print json.loads(r.text)

Асинхронизация:

import json
from requests import async

def add_option_params(args):
    options = {'rpp': 5, 'include_entities': 1, 'result_type': 'mixed'}
    args['params'].update(options)
    return args

requests = []

for search_term in ['test1', 'test2', 'test3']:
    request = async.get('http://search.twitter.com/search.json',
                        params={'q': search_term},
                        hooks={'args': add_option_params})
    requests.append(request)

for result in async.map(requests):
    print result.url, json.loads(result.text)['completed_in']
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...