code: def normalize_api_url(self):
          
          def tester(self, api_url):
              """
              Attempts to fetch general information about the MediaWiki instance
              in order to test whether *api_url* will return JSON.
              """
              data = self._fetch_http(api_url, {'action': 'query',
                                                'meta': 'siteinfo'})
              try:
                  data_json = json.loads(data)
                  return (data, data_json)
              except ValueError:
                  return (data, None)
  
          data, data_json = tester(self, self._api_url)
          if data_json:
              return self._api_url
          else:
              # if there's an index.php in the URL, we might find the API
              if 'index.php' in self._api_url:
                  test_api_url = self._api_url.split('index.php')[0] + 'api.php'
                  test_data, test_data_json = tester(self, test_api_url)
                  if test_data_json:
                      self._api_url = test_api_url
                      return self._api_url
              return None
docs: Checks that the API URL used to initialize this object actually returns
          JSON. If it doesn't, make some educated guesses and try to find the
          correct URL.
  
          :returns: a valid API URL or ``None``