'Fetches the given relative API path, e.g., "/bret/friends"
If the request is a POST, ``post_args`` should be provided. Query
string arguments should be given as keyword arguments.
All the FriendFeed methods are documented at
http://friendfeed.com/api/documentation.
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.FriendFeedMixin):
@tornado.web.authenticated
@tornado.gen.coroutine
def get(self):
new_entry = yield self.friendfeed_request(
"/entry",
post_args={"body": "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 friendfeed_request(self, path, callback, access_token=None, post_args=None, **args):

    url = ('http://friendfeed-api.com/v2' + path)
    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))
    callback = functools.partial(self._on_friendfeed_request, callback)
    http = self.get_auth_http_client()
    if (post_args is not None):
        http.fetch(url, method='POST', body=urllib_parse.urlencode(post_args), callback=callback)
    else:
        http.fetch(url, callback=callback)
