'Returns a list of results from Twitter for the given query.
- type : SEARCH,
- start: Result.id or int,
- count: maximum 100.
There is a limit of 150+ queries per 15 minutes.'

def search(self, query, type=SEARCH, start=1, count=10, sort=RELEVANCY, size=None, cached=False, **kwargs):

    if (type != SEARCH):
        raise SearchEngineTypeError
    if ((not query) or (count < 1) or (isinstance(start, (int, long, float)) and (start < 1))):
        return Results(TWITTER, query, type)
    if (not isinstance(start, (int, long, float))):
        id = ((int(start) - 1) if (start and start.isdigit()) else '')
    else:
        if (start == 1):
            self._pagination = {}
        if (start <= 10000):
            id = (query, kwargs.get('geo'), kwargs.get('date'), (int(start) - 1), count)
            id = self._pagination.get(id, '')
        else:
            id = (int(start) - 1)
    url = URL((TWITTER + 'search/tweets.json?'), method=GET)
    url.query = {'q': query, 'max_id': id, 'count': min(count, 100)}
    if ('geo' in kwargs):
        url.query['geocode'] = ','.join((map(str, kwargs.pop('geo')) + ['10km'])[:3])
    if ('date' in kwargs):
        url.query['until'] = kwargs.pop('date')
    url.query['lang'] = (self.language or '')
    url = self._authenticate(url)
    kwargs.setdefault('unicode', True)
    kwargs.setdefault('throttle', self.throttle)
    try:
        data = url.download(cached=cached, **kwargs)
    except HTTP420Error:
        raise SearchEngineLimitError
    except HTTP429TooMayRequests:
        raise SearchEngineLimitError
    data = json.loads(data)
    results = Results(TWITTER, query, type)
    results.total = None
    for x in data.get('statuses', []):
        r = Result(url=None)
        r.id = self.format(x.get('id_str'))
        r.url = self.format((TWITTER_STATUS % (x.get('user', {}).get('screen_name'), x.get('id_str'))))
        r.text = self.format(x.get('text'))
        r.date = self.format(x.get('created_at'))
        r.author = self.format(x.get('user', {}).get('screen_name'))
        r.language = self.format(x.get('metadata', {}).get('iso_language_code'))
        r.shares = self.format(x.get('retweet_count', 0))
        r.profile = self.format(x.get('user', {}).get('profile_image_url'))
        rt = x.get('retweeted_status', None)
        if rt:
            comment = re.search('^(.*?    )RT', r.text)
            comment = (comment.group(1) if comment else '')
            r.text = self.format(('RT    @%s:    %s' % (rt['user']['screen_name'], rt['text'])))
        results.append(r)
    if isinstance(start, (int, long, float)):
        k = (query, kwargs.get('geo'), kwargs.get('date'), int(start), count)
        if results:
            self._pagination[k] = str((int(results[(-1)].id) - 1))
        else:
            self._pagination[k] = id
    return results
