Logo Questions Linux Laravel Mysql Ubuntu Git Menu
 

TwitterOAuth: Uncaught exception 'This feature is temporarily unavailable'

I am working on an application in Wordpress which allows users to login using their Twitter accounts, and then redirects the users to a form. On submitting that form, a tweet is sent to the user's Twitter handle. I'm using Abraham's twitteroauth to implement Twitter OAuth.

The source code of the redirected template after successful Twitter login:

<pre>
<?php
/*
 *Template Name: Callback 
*/

?>  
<?php

    session_start();
    require "twitteroauth/autoload.php";
    use Abraham\TwitterOAuth\TwitterOAuth;

    define('CONSUMER_KEY', "XXXXXXXXXXXXXXX");
    define('CONSUMER_SECRET', "XXXXXXXXXXXXXX");
    define('OAUTH_CALLBACK', " http://localhost/wordpress/index.php/callback/");

    $request_token = [];
    $request_token['oauth_token'] = $_SESSION['oauth_token'];
    $request_token['oauth_token_secret'] = $_SESSION['oauth_token_secret'];

    if (isset($_REQUEST['oauth_token']) && $request_token['oauth_token'] !== $_REQUEST['oauth_token'])
    {
        echo "Opps! Something went wrong!";
    }

    else
    {
        $connection = new TwitterOAuth(CONSUMER_KEY, CONSUMER_SECRET, $request_token['oauth_token'], $request_token['oauth_token_secret']);
        $access_token = $connection->oauth("oauth/access_token", array("oauth_verifier" => $_REQUEST['oauth_verifier']));

        //print_r($access_token);

        $_SESSION['access_token'] = $access_token;
    }

    $access_token = $_SESSION['access_token'];

    $connection = new TwitterOAuth(CONSUMER_KEY, CONSUMER_SECRET, $access_token['oauth_token'], $access_token['oauth_token_secret']);

    //$user = $connection->get("account/verify_credentials");

    //$response = $connection->post("statuses/update", array('status' => 'fsociety'))





    //$response = $tmhOAuth->request('POST', $tmhOAuth->url('1.1/statuses/update'), array(
                                                                        //'status' => 'Conceit to fall on parasol.'


?>


<script>

    var count = 0

    function addNewMessage(count)
        {       
                if(count > 5)
                {
                    window.alert("NO MORE THAN 5!");
                }
                else
                {
                    var celeb = document.createElement("input");
                    celeb.type = "text";
                    celeb.name = "tweet" + count;
                    celeb.placeholder = "Tweet" + " " + count;
                    celebrity.appendChild(celeb);

                    var date = document.createElement("input");
                    date.type = "datetime-local";
                    date.name = "date" + count;
                    date.placeholder = "message-date" + " " + count;
                    celebrity.appendChild(date);

                    celebrity.appendChild(document.createElement("br"));
                    celebrity.appendChild(document.createElement("br"));
                }
        }        

</script>

<form method = "POST" action = "">

    <fieldset>
        <a style = "color:red" onclick = "addNewMessage(++count)">Schedule a tweet</a>
        <div id = "celebrity"/>
    </fieldset>

    <br>
    <fieldset>
        <input type="hidden" name="submitted" id="submitted" value="true" />
        <?php wp_nonce_field( 'post_nonce', 'post_nonce_field' ); ?>
        <button type="submit"><?php _e('Add Campaign', 'framework') ?></button>
    </fieldset>


</form>


<?php



if ( isset( $_POST['submitted'] ))
{
    $response = $connection->post("statuses/update", array('status' => 'fsociety'));
}

?>

</pre>

On submitting the form, I use Abraham's twitteroauth to post a tweet on the user's Twitter timeline, which I have tried to implement as follows:

<?php



if ( isset( $_POST['submitted'] ))
{
    $response = $connection->post("statuses/update", array('status' => 'fsociety'));
}

?>

However, this is the error I'm encountering:

Fatal error:  Uncaught exception 'Abraham\TwitterOAuth\TwitterOAuthException' with message 'This feature is temporarily unavailable' in /opt/lampp/htdocs/wordpress/wp-content/themes/twentyfifteen/tuto/twitteroauth/src/TwitterOAuth.php:137
Stack trace:
#0 /opt/lampp/htdocs/wordpress/wp-content/themes/twentyfifteen/tuto/callback.php(30): Abraham\TwitterOAuth\TwitterOAuth->oauth('oauth/access_to...', Array)
#1 /opt/lampp/htdocs/wordpress/wp-includes/template-loader.php(74): include('/opt/lampp/htdo...')
#2 /opt/lampp/htdocs/wordpress/wp-blog-header.php(16): require_once('/opt/lampp/htdo...')
#3 /opt/lampp/htdocs/wordpress/index.php(17): require('/opt/lampp/htdo...')
#4 {main}
  thrown in /opt/lampp/htdocs/wordpress/wp-content/themes/twentyfifteen/tuto/twitteroauth/src/TwitterOAuth.php on line 137

I tried debugging by printing the $access_token, and I'm indeed getting a unique token from the OAuth provider as expected.

What seems to be wrong with my code, and how could I avoid raising that Exception?

like image 205
Manas Chaturvedi Avatar asked Aug 19 '15 12:08

Manas Chaturvedi


1 Answers

Just came across this as I was learning the API and making calls via Postman. It appears you can only make a single call to the access_token endpoint with a particular request token. If this call fails (or indeed succeeds), all subsequent calls will give you the "This feature is temporarily unavailable" error.

You will need to regenerate the access tokens via request_token and authorize / authenticate endpoints after the first call.

like image 86
Blueberry Avatar answered Sep 28 '22 18:09

Blueberry