0

I am developing a social followers count via Hybrid auth frame work.I am learning this kinda beginer in PHP/MYSQL and API.I don't understand the error why I am getting this.

This is Hybrid auth example code with my followers count code. Help

    <?php
  // start a new session (required for Hybridauth)
  session_start();

  // change the following paths if necessary
  $config   = dirname(__FILE__) . '/hybridauth/hybridauth/config.php';
  require_once( "hybridauth/hybridauth/Hybrid/Auth.php" );

  try{
    // create an instance for Hybridauth with the configuration file path as parameter
    $hybridauth = new Hybrid_Auth( $config );

    // try to authenticate the user with twitter,
    // user will be redirected to Twitter for authentication,
    // if he already did, then Hybridauth will ignore this step and return an instance of the adapter
    $twitter = $hybridauth->authenticate( "Twitter" );

    // get the user profile
    $twitter_user_profile = $twitter->getUserProfile();

    echo "Ohai there! U are connected with: <b>{$twitter->id}</b><br />";
    echo "As: <b>{$twitter_user_profile->displayName}</b><br />";

   // echo "As: <b>{$twitter_user_profile->following}</b><br />";

    // debug the user profile


  }
  catch( Exception $e ){
    // Display the recived error,
    // to know more please refer to Exceptions handling section on the userguide
    switch( $e->getCode() ){
      case 0 : echo "Unspecified error."; break;
      case 1 : echo "Hybriauth configuration error."; break;
      case 2 : echo "Provider not properly configured."; break;
      case 3 : echo "Unknown or disabled provider."; break;
      case 4 : echo "Missing provider application credentials."; break;
      case 5 : echo "Authentification failed. "
                  . "The user has canceled the authentication or the provider refused the connection.";
               break;
      case 6 : echo "User profile request failed. Most likely the user is not connected "
                  . "to the provider and he should authenticate again.";
               $twitter->logout();
               break;
      case 7 : echo "User not connected to the provider.";
               $twitter->logout();
               break;
      case 8 : echo "Provider does not support this feature."; break;
    }

    // well, basically your should not display this to the end user, just give him a hint and move on..
    echo "<br /><br /><b>Original error message:</b> " . $e->getMessage();
  }


require_once 'twitteroauth-master/src/twitteroauth.php';
require_once 'config.php';

require "twitteroauth-master/vendor/autoload.php";

use Abraham\TwitterOAuth\TwitterOAuth;



define("CONSUMER_KEY", "*****");
define("CONSUMER_SECRET", "****");
define("OAUTH_TOKEN", "*****");
define("OAUTH_SECRET", "******");
$username = 'kodeordie'; //Your twitter screen name or page name
$connection = new TwitterOAuth(CONSUMER_KEY, CONSUMER_SECRET, OAUTH_TOKEN, OAUTH_SECRET);
$followers = $connection->get('users/show', array('screen_name' => $username));
$followers = json_decode($followers,true);
$f = $followers['followers_count'];
echo $f;
?>

Twitteroauth.php

<?php

/*
 * Abraham Williams (abraham@abrah.am) http://abrah.am
 *
 * The first PHP Library to support OAuth for Twitter's REST API.
 */

/**
 * Twitter OAuth class
 */
class TwitterOAuth {
  /* Contains the last HTTP status code returned. */
  public $http_code;
  /* Contains the last API call. */
  public $url;
  /* Set up the API root URL. */
  public $host = "https://api.twitter.com/1.1/";
  /* Set timeout default. */
  public $timeout = 30;
  /* Set connect timeout. */
  public $connecttimeout = 30; 
  /* Verify SSL Cert. */
  public $ssl_verifypeer = FALSE;
  /* Respons format. */
  public $format = 'json';
  /* Decode returned json data. */
  public $decode_json = TRUE;
  /* Contains the last HTTP headers returned. */
  public $http_info;
  /* Set the useragnet. */
  public $useragent = 'TwitterOAuth v0.2.0-beta2';
  /* Immediately retry the API call if the response was not successful. */
  //public $retry = TRUE;




  /**
   * Set API URLS
   */
  function accessTokenURL()  { return 'https://api.twitter.com/oauth/access_token'; }
  function authenticateURL() { return 'https://api.twitter.com/oauth/authenticate'; }
  function authorizeURL()    { return 'https://api.twitter.com/oauth/authorize'; }
  function requestTokenURL() { return 'https://api.twitter.com/oauth/request_token'; }

  /**
   * Debug helpers
   */
  function lastStatusCode() { return $this->http_status; }
  function lastAPICall() { return $this->last_api_call; }

  /**
   * construct TwitterOAuth object
   */
  function __construct($consumer_key, $consumer_secret, $oauth_token = NULL, $oauth_token_secret = NULL) {
    $this->sha1_method = new OAuthSignatureMethod_HMAC_SHA1();
    $this->consumer = new OAuthConsumer($consumer_key, $consumer_secret);
    if (!empty($oauth_token) && !empty($oauth_token_secret)) {
      $this->token = new OAuthConsumer($oauth_token, $oauth_token_secret);
    } else {
      $this->token = NULL;
    }
  }


  /**
   * Get a request_token from Twitter
   *
   * @returns a key/value array containing oauth_token and oauth_token_secret
   */
  function getRequestToken($oauth_callback) {
    $parameters = array();
    $parameters['oauth_callback'] = $oauth_callback; 
    $request = $this->oAuthRequest($this->requestTokenURL(), 'GET', $parameters);
    $token = OAuthUtil::parse_parameters($request);
    $this->token = new OAuthConsumer($token['oauth_token'], $token['oauth_token_secret']);
    return $token;
  }

  /**
   * Get the authorize URL
   *
   * @returns a string
   */
  function getAuthorizeURL($token, $sign_in_with_twitter = TRUE) {
    if (is_array($token)) {
      $token = $token['oauth_token'];
    }
    if (empty($sign_in_with_twitter)) {
      return $this->authorizeURL() . "?oauth_token={$token}";
    } else {
       return $this->authenticateURL() . "?oauth_token={$token}";
    }
  }

  /**
   * Exchange request token and secret for an access token and
   * secret, to sign API calls.
   *
   * @returns array("oauth_token" => "the-access-token",
   *                "oauth_token_secret" => "the-access-secret",
   *                "user_id" => "9436992",
   *                "screen_name" => "abraham")
   */
  function getAccessToken($oauth_verifier) {
    $parameters = array();
    $parameters['oauth_verifier'] = $oauth_verifier;
    $request = $this->oAuthRequest($this->accessTokenURL(), 'GET', $parameters);
    $token = OAuthUtil::parse_parameters($request);
    $this->token = new OAuthConsumer($token['oauth_token'], $token['oauth_token_secret']);
    return $token;
  }

  /**
   * One time exchange of username and password for access token and secret.
   *
   * @returns array("oauth_token" => "the-access-token",
   *                "oauth_token_secret" => "the-access-secret",
   *                "user_id" => "9436992",
   *                "screen_name" => "abraham",
   *                "x_auth_expires" => "0")
   */  
  function getXAuthToken($username, $password) {
    $parameters = array();
    $parameters['x_auth_username'] = $username;
    $parameters['x_auth_password'] = $password;
    $parameters['x_auth_mode'] = 'client_auth';
    $request = $this->oAuthRequest($this->accessTokenURL(), 'POST', $parameters);
    $token = OAuthUtil::parse_parameters($request);
    $this->token = new OAuthConsumer($token['oauth_token'], $token['oauth_token_secret']);
    return $token;
  }

  /**
   * GET wrapper for oAuthRequest.
   */
  function get($url, $parameters = array()) {
    $response = $this->oAuthRequest($url, 'GET', $parameters);
    if ($this->format === 'json' && $this->decode_json) {
      return json_decode($response);
    }
    return $response;
  }

  /**
   * POST wrapper for oAuthRequest.
   */
  function post($url, $parameters = array()) {
    $response = $this->oAuthRequest($url, 'POST', $parameters);
    if ($this->format === 'json' && $this->decode_json) {
      return json_decode($response);
    }
    return $response;
  }

  /**
   * DELETE wrapper for oAuthReqeust.
   */
  function delete($url, $parameters = array()) {
    $response = $this->oAuthRequest($url, 'DELETE', $parameters);
    if ($this->format === 'json' && $this->decode_json) {
      return json_decode($response);
    }
    return $response;
  }

  /**
   * Format and sign an OAuth / API request
   */
  function oAuthRequest($url, $method, $parameters) {
    if (strrpos($url, 'https://') !== 0 && strrpos($url, 'http://') !== 0) {
      $url = "{$this->host}{$url}.{$this->format}";
    }
    $request = OAuthRequest::from_consumer_and_token($this->consumer, $this->token, $method, $url, $parameters);
    $request->sign_request($this->sha1_method, $this->consumer, $this->token);
    switch ($method) {
    case 'GET':
      return $this->http($request->to_url(), 'GET');
    default:
      return $this->http($request->get_normalized_http_url(), $method, $request->to_postdata());
    }
  }

  /**
   * Make an HTTP request
   *
   * @return API results
   */
  function http($url, $method, $postfields = NULL) {
    $this->http_info = array();
    $ci = curl_init();
    /* Curl settings */
    curl_setopt($ci, CURLOPT_USERAGENT, $this->useragent);
    curl_setopt($ci, CURLOPT_CONNECTTIMEOUT, $this->connecttimeout);
    curl_setopt($ci, CURLOPT_TIMEOUT, $this->timeout);
    curl_setopt($ci, CURLOPT_RETURNTRANSFER, TRUE);
    curl_setopt($ci, CURLOPT_HTTPHEADER, array('Expect:'));
    curl_setopt($ci, CURLOPT_SSL_VERIFYPEER, $this->ssl_verifypeer);
    curl_setopt($ci, CURLOPT_HEADERFUNCTION, array($this, 'getHeader'));
    curl_setopt($ci, CURLOPT_HEADER, FALSE);

    switch ($method) {
      case 'POST':
        curl_setopt($ci, CURLOPT_POST, TRUE);
        if (!empty($postfields)) {
          curl_setopt($ci, CURLOPT_POSTFIELDS, $postfields);
        }
        break;
      case 'DELETE':
        curl_setopt($ci, CURLOPT_CUSTOMREQUEST, 'DELETE');
        if (!empty($postfields)) {
          $url = "{$url}?{$postfields}";
        }
    }

    curl_setopt($ci, CURLOPT_URL, $url);
    $response = curl_exec($ci);
    $this->http_code = curl_getinfo($ci, CURLINFO_HTTP_CODE);
    $this->http_info = array_merge($this->http_info, curl_getinfo($ci));
    $this->url = $url;
    curl_close ($ci);
    return $response;
  }

  /**
   * Get the header info to store.
   */
  function getHeader($ch, $header) {
    $i = strpos($header, ':');
    if (!empty($i)) {
      $key = str_replace('-', '_', strtolower(substr($header, 0, $i)));
      $value = trim(substr($header, $i + 2));
      $this->http_header[$key] = $value;
    }
    return strlen($header);
  }
}
Bajwa kapoor
  • 73
  • 3
  • 12

2 Answers2

0
$followers = $connection->get('users/show', array('screen_name' => $username));

$f = $followers->followers_count; You are trying to access $followers as a stdClass which JSON returns sometimes.

Instead try to access it as an array $f = $followers['followers_count'];

abraham
  • 46,583
  • 10
  • 100
  • 152
isnisn
  • 254
  • 1
  • 7
  • I updated FYI as @abraham said But it returns me an error like this `Fatal error: Class 'Abraham\TwitterOAuth\Config not foundinC:\wamp\www\hy\twitteroauth-master\src\TwitterOAuth.php on line 17` I also updated my Hybrid auth example code recent code Just help me to get rid of this – Bajwa kapoor Jan 15 '16 at 16:56
  • I just figure out That error but again this error `Warning: json_decode() expects parameter 1 to be string, object given in C:\wamp\www\hy\index.php on line 76` – Bajwa kapoor Jan 15 '16 at 17:31
  • TwitterOAuth automatically runs `json_decode`. You don't need to handle that in your code. – abraham Jan 15 '16 at 19:11
  • Thanks for replying. But I am new to php tell me what to do with that code. @abraham – Bajwa kapoor Jan 16 '16 at 03:11
  • RE the `json_decode` error, you just have to remove that line from your code. – abraham Jan 18 '16 at 17:36
  • @abraham json_code($json_string, true) will return an array, while json_decode($json) will return a stdClass object. – isnisn Feb 08 '16 at 08:30
0

I had a very similar error:

Undefined property: stdClass::$email

It was caused by the "request email address" field in Twitter's Oauth settings being disabled.

When I enabled it, it took a few minutes to propagate, and then it started working.

Check this sequence:

  1. Navigate to https://developer.twitter.com
  2. Click Developer Portal (at the top right)
  3. Click Projects & Apps (in the left sidebar)
  4. Click your project name
  5. Under Authentication settings, click Edit
  6. Make sure Request email address from users is enabled

My answer here might be moderately useful in other cases. Twitter's oauth settings are quite strict in terms of fields.

If your Oauth is working in localhost environment and not production, compare the two apps together. Look at every field and make sure they are congruent.

NOTE about followers_count

Based on my answer, if your controller is expecting followers_count field to be sent by Twitter and it is omitted, you could see this error. That could mean a simple setting somewhere is disabled or otherwise incorrect.

agm1984
  • 15,500
  • 6
  • 89
  • 113