Elliot Haughin API验证凭据错误

时间:2012-01-13 21:38:51

标签: api codeigniter twitter

我目前正在使用Codeigniter和Elliot Haughin Twitter库为校园项目构建Twitter客户端应用程序。它只是像tweetdeck这样的标准应用程序。登录后,用户将被定向到包含timline的个人资料页面。我使用Jquery每20秒刷新一次时间轴。一开始,一切都顺利进行,直到我在随机时间发现以下错误: ![错误] [1]

  

遇到PHP错误

     

严重性:注意

     

消息:未定义的属性:stdClass :: $ request

     

文件名:libraries / tweet.php

     

行号:205

我已在网上搜索此错误,但无法找到满意的解释。所以我试着自己找到它并发现错误是因为凭证验证错误。我尝试var_dump行 $ user = $ this-> tweet-> call('get','account / verify_credentials'); 并生成空数组 。我的问题是,当用户已经登录并且甚至在更新了一些推文之后,该错误是如何出现的?我的脚本中是否存在任何逻辑错误,或者库有什么问题?谁能解释一下发生在我身上的事情?请帮我... 这是我的代码:

构造函数 Login.php

<?php 

    class Login extends CI_Controller
    {
        function __construct()
        {
            parent::__construct();

            $this->load->library('tweet');
            $this->load->model('login_model');

        }

        function index()
        {
            $this->tweet->enable_debug(TRUE); //activate debug


            if(! $this->tweet->logged_in())
            {
                $this->tweet->set_callback(site_url('login/auth'));
                $this->tweet->login();
            }
            else
            {

                redirect('profile');
            }

        }

        //authentication function
        function auth()
        {
            $tokens = $this->tweet->get_tokens();
            $user = $this->tweet->call('get', 'account/verify_credentials');

            $data = array(
                'user_id' => $user->id_str,
                'username' => $user->screen_name,
                'oauth_token' => $tokens['oauth_token'],
                'oauth_token_secret' => $tokens['oauth_token_secret'],
                'level' => 2,
                'join_date' => date("Y-m-d H:i:s")
            );


            //jika user sudah autentikasi, bikinkan session
            if($this->login_model->auth($data) == TRUE)
            {
                $session_data = array(
                    'user_id' => $data['user_id'],
                    'username' => $data['username'],
                    'is_logged_in' => TRUE 
                );
                $this->session->set_userdata($session_data);
                redirect('profile');
            }

        }

    }

profile.php(构造函数)

<?php

class Profile extends CI_Controller
{
    function __construct()
    {
        parent::__construct();

        $this->load->library('tweet');
        $this->load->model('user_model');

    }

    function index()
    {
        if($this->session->userdata('is_logged_in') == TRUE)
        {
            //jika user telah login tampilkan halaman profile

            //load data dari table user
            $data['biography'] = $this->user_model->get_user_by_id($this->session->userdata('user_id'));

            //load data user dari twitter
            $data['user'] = $this->tweet->call('get', 'users/show', array('id' => $this->session->userdata('user_id')));

            $data['main_content'] = 'private_profile_view';
            $this->load->view('includes/template', $data);
        }
        else
        {
            //jika belum redirect ke halaman welcome
            redirect('welcome');
        }
    }

    function get_home_timeline()
    {
        $timeline = $this->tweet->call('get', 'statuses/home_timeline');
        echo json_encode($timeline);

    }

    function get_user_timeline()
    {
        $timeline = $this->tweet->call('get', 'statuses/user_timeline', array('screen_name' => $this->session->userdata('username')));
        echo json_encode($timeline);
    }

    function get_mentions_timeline()
    {
        $timeline = $this->tweet->call('get', 'statuses/mentions');
        echo json_encode($timeline);
    }

    function logout()
    {
        $this->session->sess_destroy();
        redirect('welcome');
    }
}

/** end of profile **/

Default.js(更新时间轴的javascript)

$(document).ready(function(){

                //bikin tampilan timeline jadi tab
                $(function() {
                                $( "#timeline" ).tabs();
                            });


                //home diupdate setiap 20 detik
                update_timeline('profile/get_home_timeline', '#home_timeline ul');
                var updateInterval = setInterval(function() {
                    update_timeline('profile/get_home_timeline', '#home_timeline ul');
                },20*1000);   

                //user timeline diupdate pada saat new status di submit
                update_timeline('profile/get_user_timeline', '#user_timeline ul');

                //mention diupdate setiap 1 menit
                update_timeline('profile/get_mentions_timeline', '#mentions_timeline ul');
                var updateInterval = setInterval(function() {
                    update_timeline('profile/get_mentions_timeline', '#mentions_timeline ul');
                },60*1000);


});

function update_timeline(method_url, target)
{
        //get home timeline
        $.ajax({
          type: 'GET',
          url: method_url,
          dataType: 'json',
          cache: false,
          success: function(result) {
            $(target).empty();
            for(i=0;i<10;i++){
                $(target).append('<li><article><img src="'+ result[i]['user']['profile_image_url'] +'"><a href="">'+ result[i]['user']['screen_name'] + '</a>'+ linkify(result[i]['text']) +'</li></article>');
            }
          }
        });
}


function linkify(data)
{
    var param = data.replace(/(^|\s)@(\w+)/g, '$1@<a href="http://www.twitter.com/$2" target="_blank">$2</a>');
    var param2 = param.replace(/(^|\s)#(\w+)/g, '$1#<a href="http://search.twitter.com/search?q=%23$2" target="_blank">$2</a>');
    return param2;      
}

这就是代码。请帮我。毕竟,我非常感谢你们的所有评论和解释。感谢

NB:对不起,如果我的英语语法不好:-)

1 个答案:

答案 0 :(得分:4)

您正在拨打statuses/home_timeline这是一个未经身份验证的电话。未经身份验证的通话的费率限制为每小时150次请求

  

Unauthenticated calls are permitted 150 requests per hour. Unauthenticated calls are measured against the public facing IP of the server or device making the request.

这可以解释为什么你在测试的高峰期看到问题。

根据您设置的方式,您将在 50分钟之后使您的费率限制到期。

我建议将间隔更改为更高的数字, 30秒会更改。这样,您就可以在每个小时下执行 120次请求