code: def search(self, q, max_id=None, since_id=None, lang=None,
                 result_type='recent', geocode=None, max_pages=None):
          
          url = "https://api.twitter.com/1.1/search/tweets.json"
          params = {
              "count": 100,
              "q": q,
              "include_ext_alt_text": 'true'
          }
          if lang is not None:
              params['lang'] = lang
          if result_type in ['mixed', 'recent', 'popular']:
              params['result_type'] = result_type
          else:
              params['result_type'] = 'recent'
          if geocode is not None:
              params['geocode'] = geocode
  
          retrieved_pages = 0
          reached_end = False
  
          while True:
              if since_id:
                  # Make the since_id inclusive, so we can avoid retrieving
                  # an empty page of results in some cases
                  params['since_id'] = str(int(since_id) - 1)
              if max_id:
                  params['max_id'] = max_id
  
              resp = self.get(url, params=params)
              retrieved_pages += 1
  
              statuses = resp.json()["statuses"]
  
              if len(statuses) == 0:
                  log.info("no new tweets matching %s", params)
                  break
  
              for status in statuses:
                  # We've certainly reached the end of new results
                  if since_id is not None and status['id_str'] == str(since_id):
                      reached_end = True
                      break
  
                  yield status
  
              if reached_end:
                  log.info("no new tweets matching %s", params)
                  break
  
              if max_pages is not None and retrieved_pages == max_pages:
                  log.info("reached max page limit for %s", params)
                  break
  
              max_id = str(int(status["id_str"]) - 1)
docs: Pass in a query with optional max_id, min_id, lang or geocode
          and get back an iterator for decoded tweets. Defaults to recent (i.e.
          not mixed, the API default, or popular) tweets.