Elliot Haughin API верифицирует ошибку учетных данных - PullRequest
2 голосов
/ 14 января 2012

В настоящее время я создаю клиентское приложение Twitter для проекта кампуса с использованием библиотеки Codeigniter и Elliot Haughin Twitter. Это просто стандартное приложение, как твитдек. После входа в систему пользователь будет перенаправлен на страницу профиля, содержащую Timline. Я использую Jquery для обновления временной шкалы каждые 20 секунд. В начале все прошло гладко, пока я не обнаружил следующую ошибку в случайное время: ! [ошибка] [1]

Произошла ошибка PHP

Серьезность: Уведомление

Сообщение: неопределенное свойство: stdClass :: $ request

Имя файла: library / 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 Ответ

4 голосов
/ 14 января 2012

Вы делаете звонок на statuses/home_timeline, который является вызовом без аутентификации. Предел скорости для неаутентифицированных звонков составляет 150 запросов в час .

Разрешены неаутентифицированные звонки 150 запросов в час . Неаутентифицированные звонки сравниваются с общедоступным IP-адресом сервер или устройство, отправляющее запрос.

Это объясняет, почему вы видите проблему на пике вашего тестирования.

Если вы настроите его, срок действия лимита истечет через 50 минут или меньше.

Я предлагаю изменить интервал на более высокое число, подойдет 30 секунд . Таким образом, вы будете делать 120 запросов в час и с ограничением скорости.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...