'Fetches the given API path, e.g., ``statuses/user_timeline/btaylor``
The path should not include the format or API version number.
(we automatically use JSON format and API version 1).
If the request is a POST, ``post_args`` should be provided. Query
string arguments should be given as keyword arguments.
All the Twitter methods are documented at http://dev.twitter.com/
Many methods require an OAuth access token which you can
obtain through `~OAuthMixin.authorize_redirect` and
`~OAuthMixin.get_authenticated_user`. The user returned through that
process includes an \'access_token\' attribute that can be used
to make authenticated requests via this method. Example
usage::
class MainHandler(tornado.web.RequestHandler,
tornado.auth.TwitterMixin):
@tornado.web.authenticated
@tornado.gen.coroutine
def get(self):
new_entry = yield self.twitter_request(
"/statuses/update",
post_args={"status": "Testing Tornado Web Server"},
access_token=self.current_user["access_token"])
if not new_entry:
# Call failed; perhaps missing permission?
yield self.authorize_redirect()
return
self.finish("Posted a message!")'

@_auth_return_future
def twitter_request(self, path, callback=None, access_token=None, post_args=None, **args):

    if (path.startswith('http:') or path.startswith('https:')):
        url = path
    else:
        url = ((self._TWITTER_BASE_URL + path) + '.json')
    if access_token:
        all_args = {}
        all_args.update(args)
        all_args.update((post_args or {}))
        method = ('POST' if (post_args is not None) else 'GET')
        oauth = self._oauth_request_parameters(url, access_token, all_args, method=method)
        args.update(oauth)
    if args:
        url += ('?' + urllib_parse.urlencode(args))
    http = self.get_auth_http_client()
    http_callback = functools.partial(self._on_twitter_request, callback)
    if (post_args is not None):
        http.fetch(url, method='POST', body=urllib_parse.urlencode(post_args), callback=http_callback)
    else:
        http.fetch(url, callback=http_callback)
