Войти Регистрация

Twitter + PHP + Codeigniter: пишем twitter статус на PHP


Twitter + PHP +codeigniterВсем привет! В этой статье мы будем обновлять наш twitter статус с помощью PHP (Фреймворк Codeigniter) и сервиса “Twitter API”. Рекомендую вам следовать шаг за шагом, чтобы не запутаться и во всем разобраться. Нужно сказать, что при написании статьи использовалась программа: CodeIgniter PHP Framework 1.7.1. Что ж поехали!



Настройка CodeIgniter

Для начала, нам необходимо установить некоторые настройки умолчания в разделе настроек codeigniter. Откройте файл system/application/config/autoload.php и измените следующую строку:

$autoload['libraries'] = array('');

на:

$autoload['libraries'] = array('database');

С помощью этого параметра мы будем осуществлять автозагрузку базы данных. Далее откройте файл database.php и измените параметры соединения с базой данных на ваши: имя базы данных, пользователь, пароль. В качестве названия мы будем использовать twitter_api. Теперь откройте файл config.php и измените параметр base_url на путь к вашей папке с codeigniter. Моя папка называется twitter_api. Это моя системная папка. Мой параметр выглядит таким образом:

$config['base_url'] = "http://localhost/ci/twitter_api";

Заполнение базы данных

Так как мы будем работать с базой данных, нам необходимо иметь некоторые данные в базе, чтобы иметь возможность их использовать. Откройте phpmyadmin или вашу систему управления базами данных и создайте новую базу с именем ci_twitter_api. Отлично, теперь мы создадим новую таблицу, используя следующий mysql запрос. Перед выполнением запроса, отредактируйте в нем ваш ПАРОЛЬ и ИМЯ ПОЛЬЗОВАТЕЛЯ для доступа к аккаунту twitter.

CREATE TABLE IF NOT EXISTS `accounts` (  
     `id` int(11) NOT NULL AUTO_INCREMENT,  
     `username` varchar(120) NOT NULL,  
     `password` varchar(32) NOT NULL,  
     `active` int(11) NOT NULL,  
     `last_message` varchar(140) NOT NULL,  
     PRIMARY KEY (`id`)  
   ) ENGINE=MyISAM  DEFAULT CHARSET=cp1251 AUTO_INCREMENT=3 ;  
  
   INSERT INTO `accounts` (`id`, `username`, `password`, `active`, `last_message`) VALUES  
   (1, '<b>YOUR USERNAME</b>', '<b>YOUR PASSWORD</b>', 1, 'No message sent.');

twitter + php: sql запрос

Нажмите кнопку подтверждения и ваш запрос будет выполнен. Теперь ваша структура параметров доступа к twitter аккаунту будет выглядеть таким образом:

twitter + php: sql row

Создание модели

Для этого перейдите в папку system/application/models и создайте новый файл с именем twitter_model.php.

Для начала, мы объявим две глобальные переменные в самом верху.

var $accounts_table = 'accounts';  
var $update_url = 'http://twitter.com/statuses/update.xml';

$accounts_table – содержит имя таблицы, которую мы только что создали. $update_url – это адрес, который мы будем использовать для изменения нашего статуса. Если twitter поменяет этот адрес, вам необходимо будет также поменять его в этой переменной, так как этот адрес будет основой нашего приложения.

Далее, мы создадим наш первый метод, который просто возвратит активный аккаунт пользователя, который хранится в бд. Для определения активности мы будем использовать строку active и значение 1. Мы добавили этот параметр, потому что некоторые люди имеют несколько twitter аккаунтов. Ниже код метода:

class Twitter_model extends Model {  
  
   // get the active twitter account from the database, by row active = 1  
   function getActiveAccount()  
   {  
       return $this->db->get_where($this->accounts_table, array('active' => '1'))->row();  
   } 

В этом методе, для удобства, мы используем класс active_records для получения активного аккаунта и возвращения избранной строки.

Далее, мы создадим наш главный метод, который будем изменять twitter статус. Он будет использовать наш пароль, имя пользователя, и конечно же сообщение которое мы будем отправлять для обновления статуса. Кроме этого, он будет определять HTTP_CODE, который будет возвращен от twitter и будет сообщать нам о результате выполнения обновления статуса.

// update twitter status and last message on success  
function update_status($username, $password, $message)  
{  
    $ch = curl_init($this->update_url);  
  
    curl_setopt($ch, CURLOPT_POST, 1);  
    curl_setopt($ch, CURLOPT_POSTFIELDS, 'status='.urlencode($message));  
    curl_setopt($ch, CURLOPT_RETURNTRANSFER, 1);  
    curl_setopt($ch, CURLOPT_USERPWD, $username . ':' . $password);  
  
    curl_exec($ch);  
  
    $httpcode = curl_getinfo($ch, CURLINFO_HTTP_CODE);  
  
    // if we were successfull we need to update our last_message  
    if ($httpcode == '200')  
    {  
        $this->db->where('active', '1');  
        $this->db->update($this->accounts_table, array('last_message' => $message));  
  
        return TRUE;  
    }  
  
    else  
    {  
        return FALSE;  
    }  
}

На первый взгляд, код может показаться сложным, но это не так, он прост для понимания. Наиболее важная часть метода, та где мы используем cURL для связи с Twitter. Это отличная библиотека, для того, чтобы отправлять и получать данные из twitter.

Теперь рассмотрим подробнее, curl_init инициализирует сессию и принимает URL, как параметр – в нашем случае это url для обновления twitter статуса, который предоставляется сервисом Twitter API.

С помощью curl_setopt, мы устанавливаем некоторые необходимые опции для передачи данных.

CURLOPT_POST – мы устанавливаем значение «1», для того чтобы HTTP запрос, был аналогичен запросу посылаемому из HTML формы.

CURLOPT_POSTFIELDS – этот параметр содержит данные, которые нам необходимо отправить. В нашем случае это ‘status=’ и наше сообщение. Также мы должны использовать функцию urlencode, для того, чтобы иметь возможность использовать спецсимволы в нашем сообщении, такие как ‘%&/” .

CURLOPT_RETURNTRANSFER – этот параметр должен быть равен «1», это важно, потому что, мы будем получать ответ в виде строки, которая будет содержать информацию об успешности обновления twitter статуса.

CURLOPT_USERPWD – этот параметр предназначен для аутентификации. Он просто содержит наш twitter пароль и имя пользователя в формате: username:password.

После установки CURLOPT параметров, мы выполняем отправку с помощью функции curl_exec()  и получаем обратный ответ с помощью curl_getinfo(CURLINFO_HTTP_CODE). Как вы уже поняли, HTTP_CODE сообщает нам об успешности выполнения запроса. Если код равен «200», это значит, что все работает и статус обновлен. В нашем методе, при получении ответа 200, мы обновляем запись в базе данных и возвращаем TRUE, в противном случае возвращаем FALSE.

В завершения нашей модели, мы создадим еще один, последний, метод. Он будет получать наше последнее сообщение из базы данных, это необходимо для вывода его в виде (view).

// get the last_message, by row active = 1  
function getLastMessage()  
{  
    $this->db->select('last_message');  
    $last_message =  $this->db->get_where($this->accounts_table, array('active' => '1'))->row()->last_message;  
  
    return htmlspecialchars($last_message);  
}

Этот метод достаточно простой. Он выбирает из БД строку last_message, активного аккаунта. И возвращает ее в конвертированном виде с помощью htmlspecialchars, для замены некоторых символов HTML сущностями. Вот мы и закончили писать модель для обновления twitter статуса с помощью PHP. Теперь приступим к следующему шагу.

Создание контроллера

Сейчас перейдите в папку system/application/controllers и создайте новый файл с именем twitter.php.

Давайте добавим в него несколько строк:

class Twitter extends Controller {  
  
function Twitter()  
{  
    parent::Controller();  
  
    $this->load->model('twitter_model');  
}

Это простой конструктор, который будет загружать нашу модель (twitter_model). Теперь, перейдем к созданию index() метода:

function index()  
{  
    $data['heading'] = 'Hi, send a tweet!';  
    $data['last_message'] = $this->twitter_model->getLastMessage();  
    $data['active_user'] = $this->twitter_model->getActiveAccount()->username;  
  
    $this->load->view('header', $data);  
    $this->load->view('index');  
    $this->load->view('footer');  
}

В этом методе, мы передаем простой текст, имя пользователя активного twitter аккаунта и последнее его сообщение в массиве $data.

Благодаря нашей модели, нам очень просто получать информацию об активном пользователе и его статусе. В этом и есть преимущества MVC. В конце мы загружаем вид (view), точнее несколько видов.

Теперь, закончим создание контроллера, создадим метод update:

// updating our status on twitter ( new message )  
function update()  
{  
    if ($this->input->post('submit'))  
    {  
        $this->load->library('form_validation');  
        $this->form_validation->set_error_delimiters('<div class="error">', '</div>');  
        $this->form_validation->set_rules('message', 'Message', 'trim|required|min_length[5]|max_length[140]');  
  
        if ($this->form_validation->run() == FALSE)  
        {  
            $this->index();  
        }  
  
        else  
        {  
            $message = $this->input->post('message');  
  
            // get useraccount data  
            $account = $this->twitter_model->getActiveAccount();  
            $username = $account->username;  
            $password = $account->password;  
  
            // send a tweet  
            if ($this->twitter_model->update_status($username, $password, $message))  
            {  
                redirect('twitter');  
            }  
  
            else  
            {  
                $data['error'] = 'There was an error while updating your status';  
  
                $this->load->view('header', $data);  
                $this->load->view('error');  
                $this->load->view('footer');  
            }  
        }  
    }

Если понимаете весь код данного метода, отлично можете следовать к следующему шагу. Если нет, давайте разберем код поэтапно, он будет повторяться, но так будет понятнее о чем идет речь.

if ($this->input->post('submit'))  
    {  
        $this->load->library('form_validation');  
        $this->form_validation->set_error_delimiters(' 
<div class="error">', '</div> 
 
');  
        $this->form_validation->set_rules('message', 'Message', 'trim|required|min_length[5]|max_length[140]');  
  
        if ($this->form_validation->run() == FALSE)  
        {  
            $this->index();  
        }

С помощью $this->input->post(‘submit’), определяем факт подачи запроса из формы. Далее загружаем библиотеку валидации форм (form_validation). Устанавливаем ограничения на сообщение от 5 до 140 символов, удаляем пробелы с помощью функции trim, также устанавливаем поля required, чтобы исключить возможность получения пустого сообщения. Функция set_rules, имеет два параметра: первый – это имя нашего поля сообщения указанного в главном виде, второй – это имя пользователя, которое вставляется в сообщение ошибки (будет понятнее, когда мы создадим вид).

После установки параметров валидации, запускаем валидацию $this->form_validation->run(), которая возвращает истину или ложь. В случае FALSE запускаем наш index() метод. Он будет отображать сообщение об ошибке, когда мы создадим виды.

Рассмотрим следующий фрагмент кода:

else  
   {  
       $message = $this->input->post('message');  
  
       // get useraccount data  
       $account = $this->twitter_model->getActiveAccount();  
       $username = $account->username;  
       $password = $account->password;  
  
       // send a tweet  
       if ($this->twitter_model->update_status($username, $password, $message))  
       {  
           redirect('twitter');  
       }  
  
       else  
       {  
           $data['error'] = 'There was an error while updating your status';  
  
           $this->load->view('header', $data);  
           $this->load->view('error');  
           $this->load->view('footer');  
       }  
   }

Благодаря нашей модели, мы с легкостью получаем имя пользователя и пароль twitter аккаунта, активного пользователя. Используя $this->twitter_model->update_status(), мы собственно отправляем новый статус, как помните, в этот метод необходимо передать имя пользователя, пароль и сообщение. Если статус обновлен успешно, мы перенаправляем методом redirect(), используя url helper. Если, что то не так, мы выводим ошибку и загружаем виды, которые мы создадим в следующем шаге.

Создаем виды

Для полноценной работы нашего PHP приложения, нам необходимо создать виды, для этого перейдите в папку system/application/views и создайте следующие файлы:

  1. header.php
  2. footer.php
  3. index.php
  4. error.php

header.php – содержит основную информацию и метатеги, подключает css стиль, и открывает главные див блоки:

<!DOCTYPE html>  
<html>  
<head>  
<meta http-equiv="Content-Type" content="text/html; charset=utf-8" />  
<link media="screen" rel="Stylesheet" type="text/css" href="<?php echo base_url(); ?>css/style.css" />  
<title>Using the Twitter API with CodeIgniter</title>  
</head>  
  
<body>  
  
<div id="wrapper">  
  
<div id="main">

Мы используем функцию base_url(), для указания пути к нашему css файлу, который мы создадим в следующем шаге.

footer.php – просто содержит все закрывающие теги:

</div><!--end main-->  
  
   </div><!--end wrapper-->  
  
   </body>  
   </html>  

index.php – это страница, на которой будут происходить главные действия приложения:

<h3>  
<?php echo $heading; ?>  
   <span>  
    ( account: <?php echo anchor('http://twitter.com/' . $active_user, $active_user); ?> )  
   </span>  
   </h3>  
  
   <?php echo form_error('message'); ?>  
  
   <?php echo form_open('twitter/update', array('id' => 'update_form')); ?>  
   <?php echo form_input(array('name' => 'message', 'maxlength' => '140')); ?>  
   <?php echo form_submit('submit', 'update'); ?>  
   <?php echo form_close(); ?>  
  
   <div id="last_message">  
       <fieldset>  
           <legend>Last <span>sent by <b><?php echo $active_user ?></b></span></legend>  
           <p><?php echo $last_message; ?></p>  
       </fieldset>  
   </div><!--end last_message-->  

Все переменные используемые в этом виде, передаются через index() метод нашего контроллера. В дополнение, мы используем form helper для создания html форм. Помните, ранее упоминалось, что сообщение об ошибке, будет выводится в этом виде. form_error(‘message’) – будет осуществлять это. Ниже форм, мы будем выводить последнее сообщение, которое отправил активный пользователь.

error.php – будет использоваться, как отдельный файл ошибки, для вывода сообщения в случае невозможности обновления статуса в twitter.

<h3><?php echo $error; ?></h3>  
  
    <?php echo anchor('twitter', 'Go back and try again'); ?>  

Создание CSS файла

Для того, чтобы сделать наше приложение более красивым, мы добавим css код стиля. Зайдите в папку system/ и создайте папку css. В этой папке создайте файл style.css и вставьте в него следующий код:

/* Reset CSS */  
  
html, body, div, span, object, h1, h2, h3, h4, h5, h6, p, blockquote, pre,  
a, address, code, img,  
small, strong, dl, dt, dd, ol, ul, li,  
fieldset, form, label {  
    margin: 0;  
    padding: 0;  
    border: 0;  
    outline: 0;  
    font-size: 100%;  
    vertical-align: baselinebaseline;  
    background: transparent;  
}  
  
body {  
    line-height: 1.5;  
    font-family:Arial, sans-serif;  
    margin:0;  
}  
ol, ul, li {  
    list-style: none;  
    list-style-type:none;  
}  
  
.clear { clear:both; }  
  
/* DEFAULTS */  
  
h3 {  
    color:#35CCFF;  
    font-size:20px;  
}  
  
/* CUSTOM */  
  
#wrapper {  
    width:900px;  
    margin:0 auto;  
}  
  
/* main */  
  
#main {  
    margin-top:50px;  
}  
  
#main h3 span {  
    font-size:14px;  
    color:#cccccc;  
}  
  
#main h3 a {  
    color:#cccccc;  
}  
  
/* form */  
  
#update_form input {  
    width:888px;  
    padding:5px;  
    border:1px solid #d3d3d3;  
    display:block;  
}  
  
#update_form input[type="submit"] {  
    width:auto;  
    margin-top:10px;  
    background-color:#000000;;  
    border:none;  
    color:white;  
    font-size:12px;  
    font-weight:bold;  
    cursor:pointer;  
    padding:3px;  
}  
  
div.error {  
    display:block;  
    background-color:#FB8A8A;  
    border:1px solid #FF3B3B;  
    padding:5px;  
    color:#ffffff;  
    width:50%;  
    margin-bottom:30px;  
    font-weight:bold;  
    margin:0 auto 10px auto;  
    text-align:center;  
}  
  
/* last message */  
  
#last_message fieldset {  
    border:1px dashed #d3d3d3;  
    padding:5px;  
    margin-top:30px;  
}  
  
#last_message fieldset p {  
    padding:5px;  
    font-size:18px;  
    font-weight:normal;  
}  
  
#last_message legend span {  
    font-size:12px;  
}

Код кроссбраузерный и в этом его преимущество. Теперь ваше приложение, должно выглядеть следующим образом:

КАРТИНКА

Проверка на работоспособность

Мы только что, создали отличное приложения для обновления twitter статуса с помощью PHP, CodeIgniter и Twitter API. Теперь остается только тестировать и радоваться проделанной работе, что мы сейчас и сделаем:

Главный вид нашего приложения, давайте напишем что-нибудь!

Общий вид twitter PHP приложения

Вводим наш статус:

twitter статус

После обновления выглядит следующим образом:

twitter php send

Давайте проверим, действительно ли работает это? Зайдем в наш Twitter.

Аккаунт sitear.ru в twitter

В заключение

Очень надеюсь, что вы поняли, как создать приложение и выучили что-то новое. Если, все еще остались некоторые недопонимания по поводу twitter и php, или вы осуществляете это другим способом, дайте знать (в комментариях ниже). Спасибо за внимание!



Дальше: Бан Яндекса: проверка и выход из бана Яндекса


Дискуссия по теме     0 Комментариев
Добавить комментарий
Просмотров: 74282